From: Carlos Garnacho Date: Tue, 13 Jun 2023 20:52:48 +0000 (+0200) Subject: gdk/wayland: Ensure device-added/removed emission in GdkSeat X-Git-Tag: archive/raspbian/3.24.39-1+rpi1~31 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=de43e5ca8f5251b136b155f6dc491831123c3286;p=gtk%2B3.0.git gdk/wayland: Ensure device-added/removed emission in GdkSeat We've used to emit these in the GdkDeviceManager, but missed to do this signal emission at the GdkSeat object level. In order to avoid the double emission, trigger one from the other. Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6049 Origin: 3.24.39, commit:81029b824b39122704a9bd615dc7b03886516843 Gbp-Pq: Name gdk-wayland-Ensure-device-added-removed-emission-in-GdkSe.patch --- diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c index 7e7beac9d1..dd7db81cf1 100644 --- a/gdk/wayland/gdkdevice-wayland.c +++ b/gdk/wayland/gdkdevice-wayland.c @@ -5181,6 +5181,22 @@ init_pointer_data (GdkWaylandPointerData *pointer_data, master); } +static void +device_manager_device_added (GdkDeviceManager *device_manager, + GdkDevice *device, + GdkSeat *seat) +{ + g_signal_emit_by_name (seat, "device-added", device); +} + +static void +device_manager_device_removed (GdkDeviceManager *device_manager, + GdkDevice *device, + GdkSeat *seat) +{ + g_signal_emit_by_name (seat, "device-removed", device); +} + void _gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager, guint32 id, @@ -5249,6 +5265,11 @@ _gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager, seat); } + g_signal_connect (seat->device_manager, "device-added", + G_CALLBACK (device_manager_device_added), seat); + g_signal_connect (seat->device_manager, "device-removed", + G_CALLBACK (device_manager_device_removed), seat); + gdk_display_add_seat (display, GDK_SEAT (seat)); } @@ -5268,6 +5289,12 @@ _gdk_wayland_device_manager_remove_seat (GdkDeviceManager *manager, if (seat->id != id) continue; + g_signal_handlers_disconnect_by_func (manager, + device_manager_device_added, + seat); + g_signal_handlers_disconnect_by_func (manager, + device_manager_device_removed, + seat); gdk_display_remove_seat (display, GDK_SEAT (seat)); break; }