Files
gtk3/debian/patches/gdk-wayland-Ensure-device-added-removed-emission-in-GdkSe.patch

67 lines
2.5 KiB
Diff

From: Carlos Garnacho <carlosg@gnome.org>
Date: Tue, 13 Jun 2023 22:52:48 +0200
Subject: 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
---
gdk/wayland/gdkdevice-wayland.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 7e7beac..dd7db81 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;
}