[mutter/wip/carlosg/x11-devices-config: 2/2] backends/x11: Emit CLUTTER_DEVICE_ADDED events for initial devices
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/x11-devices-config: 2/2] backends/x11: Emit CLUTTER_DEVICE_ADDED events for initial devices
- Date: Fri, 6 Nov 2020 17:18:20 +0000 (UTC)
commit 46df98b3412f5fac61c891ce80c048ed5b2eb76b
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Nov 6 18:00:55 2020 +0100
backends/x11: Emit CLUTTER_DEVICE_ADDED events for initial devices
This is similar to commit b9e5a2d6e23, but for the X11 backend.
src/backends/x11/meta-seat-x11.c | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
---
diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c
index de775e1f91..ddf81082fe 100644
--- a/src/backends/x11/meta-seat-x11.c
+++ b/src/backends/x11/meta-seat-x11.c
@@ -54,6 +54,9 @@ struct _MetaSeatX11
GHashTable *tools_by_serial;
MetaKeymapX11 *keymap;
+ ClutterStageManager *stage_manager;
+ gulong stage_added_handler;
+
int pointer_id;
int keyboard_id;
int opcode;
@@ -1383,6 +1386,32 @@ meta_seat_x11_get_property (GObject *object,
}
}
+static void
+meta_seat_x11_stage_added_cb (ClutterStageManager *manager,
+ ClutterStage *stage,
+ MetaSeatX11 *seat_x11)
+{
+ GHashTableIter iter;
+ ClutterInputDevice *device;
+
+ g_hash_table_iter_init (&iter, seat_x11->devices_by_id);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &device))
+ {
+ ClutterEvent *event;
+
+ event = clutter_event_new (CLUTTER_DEVICE_ADDED);
+ clutter_event_set_device (event, device);
+ clutter_event_set_stage (event, stage);
+ clutter_do_event (event);
+ }
+
+ /* We only want to do this once so we can catch the default
+ stage. If the application has multiple stages then it will need
+ to manage the stage of the input devices itself */
+ g_clear_signal_handler (&seat_x11->stage_added_handler,
+ seat_x11->stage_manager);
+}
+
static void
meta_seat_x11_constructed (GObject *object)
{
@@ -1395,6 +1424,13 @@ meta_seat_x11_constructed (GObject *object)
int n_devices, i;
Display *xdisplay;
+ seat_x11->stage_manager = clutter_stage_manager_get_default ();
+ seat_x11->stage_added_handler =
+ g_signal_connect (seat_x11->stage_manager,
+ "stage-added",
+ G_CALLBACK (meta_seat_x11_stage_added_cb),
+ seat_x11);
+
xdisplay = clutter_x11_get_default_display ();
logical_devices = g_hash_table_new (NULL, NULL);
physical_devices = g_hash_table_new (NULL, NULL);
@@ -1479,6 +1515,8 @@ meta_seat_x11_finalize (GObject *object)
{
MetaSeatX11 *seat_x11 = META_SEAT_X11 (object);
+ g_clear_signal_handler (&seat_x11->stage_added_handler,
+ seat_x11->stage_manager);
g_hash_table_unref (seat_x11->devices_by_id);
g_hash_table_unref (seat_x11->tools_by_serial);
g_list_free (seat_x11->devices);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]