backends/native: Dispose the libinput device in the input thread
Currently, the MetaInputDeviceNative owns the libinput_device, with the small catch that it is eventually finished in the main thread (as the CLUTTER_DEVICE_REMOVED event keeps the last reference to it). Make it sure that the libinput_device is destroyed in the input thread, before giving away the last extra input device references. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1639>
This commit is contained in:
parent
67f0704340
commit
b2b3d000d2
@ -1592,3 +1592,9 @@ meta_input_device_native_get_coords_in_impl (MetaInputDeviceNative *device_nativ
|
|||||||
if (y)
|
if (y)
|
||||||
*y = device_native->pointer_y;
|
*y = device_native->pointer_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_input_device_native_detach_libinput_in_impl (MetaInputDeviceNative *device_native)
|
||||||
|
{
|
||||||
|
g_clear_pointer (&device_native->libinput_device, libinput_device_unref);
|
||||||
|
}
|
||||||
|
@ -157,5 +157,6 @@ void meta_input_device_native_get_coords_in_impl (MetaInputD
|
|||||||
float *y);
|
float *y);
|
||||||
gboolean meta_input_device_native_process_kbd_a11y_event_in_impl (ClutterInputDevice *device,
|
gboolean meta_input_device_native_process_kbd_a11y_event_in_impl (ClutterInputDevice *device,
|
||||||
ClutterEvent *event);
|
ClutterEvent *event);
|
||||||
|
void meta_input_device_native_detach_libinput_in_impl (MetaInputDeviceNative *device_native);
|
||||||
|
|
||||||
#endif /* META_INPUT_DEVICE_NATIVE_H */
|
#endif /* META_INPUT_DEVICE_NATIVE_H */
|
||||||
|
@ -1602,6 +1602,8 @@ evdev_remove_device (MetaSeatImpl *seat_impl,
|
|||||||
if (seat_impl->repeat_source && seat_impl->repeat_device == device)
|
if (seat_impl->repeat_source && seat_impl->repeat_device == device)
|
||||||
meta_seat_impl_clear_repeat_source (seat_impl);
|
meta_seat_impl_clear_repeat_source (seat_impl);
|
||||||
|
|
||||||
|
meta_input_device_native_detach_libinput_in_impl (device_native);
|
||||||
|
|
||||||
g_object_unref (device);
|
g_object_unref (device);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1633,9 +1635,9 @@ process_base_event (MetaSeatImpl *seat_impl,
|
|||||||
device = libinput_device_get_user_data (libinput_device);
|
device = libinput_device_get_user_data (libinput_device);
|
||||||
device_event = clutter_event_new (CLUTTER_DEVICE_REMOVED);
|
device_event = clutter_event_new (CLUTTER_DEVICE_REMOVED);
|
||||||
clutter_event_set_device (device_event, device);
|
clutter_event_set_device (device_event, device);
|
||||||
|
meta_input_settings_remove_device (input_settings, device);
|
||||||
evdev_remove_device (seat_impl,
|
evdev_remove_device (seat_impl,
|
||||||
META_INPUT_DEVICE_NATIVE (device));
|
META_INPUT_DEVICE_NATIVE (device));
|
||||||
meta_input_settings_remove_device (input_settings, device);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user