}
static void
+fallback_dispatch_free_aux_data(struct fallback_dispatch *dispatch)
+{
+ int i;
+ struct mt_aux_data *aux_data;
+
+ for (i = 0; i < (int)dispatch->mt.slots_len; i++) {
+ list_for_each_safe(aux_data, &dispatch->mt.aux_data_list[i], link) {
+ list_remove(&aux_data->link);
+ free(aux_data);
+ }
+ list_remove(&dispatch->mt.aux_data_list[i]);
+ }
+ free(dispatch->mt.aux_data_list);
+}
+
+static void
fallback_interface_suspend(struct evdev_dispatch *evdev_dispatch,
struct evdev_device *device)
{
libinput_timer_destroy(&dispatch->debounce.timer);
libinput_timer_destroy(&dispatch->debounce.timer_short);
+ fallback_dispatch_free_aux_data(dispatch);
+
free(dispatch->mt.slots);
free(dispatch);
}
}
}
-static void
-fallback_device_interface_free_aux_data(struct evdev_dispatch *evdev_dispatch)
-{
- int i;
- struct fallback_dispatch *dispatch;
- struct mt_aux_data *aux_data;
-
- dispatch = fallback_dispatch(evdev_dispatch);
-
- for (i = 0; i < (int)dispatch->mt.slots_len; i++) {
- list_for_each_safe(aux_data, &dispatch->mt.aux_data_list[i], link) {
- list_remove(&aux_data->link);
- free(aux_data);
- }
- list_remove(&dispatch->mt.aux_data_list[i]);
- }
- free(dispatch->mt.aux_data_list);
-}
-
struct evdev_dispatch_device_interface fallback_device_interface = {
.set_aux_data = fallback_device_interface_set_aux_data
};
struct evdev_dispatch *dispatch;
dispatch = device->dispatch;
- evdev_device_free_aux_data(device);
if (dispatch)
dispatch->interface->destroy(dispatch);
dispatch->device_interface->set_aux_data(dispatch, code);
}
}
-
-void
-evdev_device_free_aux_data(struct evdev_device *device)
-{
- struct evdev_dispatch *dispatch = device->dispatch;
- if (!dispatch) return;
- if (!dispatch->device_interface) return;
-
- if (dispatch->device_interface->free_aux_data) {
- dispatch->device_interface->free_aux_data(dispatch, code);
- }
-}
struct evdev_dispatch_device_interface {
void (*set_aux_data) (struct evdev_dispatch *dispatch, uint32_t code);
- void (*free_aux_data) (struct evdev_dispatch *dispatch);
};
enum evdev_dispatch_type {
void
evdev_device_set_aux_data(struct evdev_device *device, uint32_t code);
-
-void
-evdev_device_free_aux_data(struct evdev_device *device);
#endif /* EVDEV_H */