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.
This commit is contained in:
Carlos Garnacho
2023-06-13 22:52:48 +02:00
parent 6070f10922
commit 81029b824b

View File

@ -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;
}