[gtk+] wayland: Create/expose pad devices



commit cca51b71cbc68707797ee3a616cb8a0357a84e22
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Aug 4 19:42:23 2016 +0200

    wayland: Create/expose pad devices
    
    These devices are kind of an strange case. Their "master" device is
    the keyboard, because they share toplevel focus with it, regardless
    of stylus focus. Nonetheless, they are only expected to send the
    GdkEventPad* set of events.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=770026

 gdk/wayland/gdkdevice-wayland.c |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 627f649..84c39ec 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -2766,6 +2766,14 @@ _gdk_wayland_seat_remove_tablet_pad (GdkWaylandSeat          *seat,
     GDK_WAYLAND_DEVICE_MANAGER (seat->device_manager);
 
   seat->tablet_pads = g_list_remove (seat->tablet_pads, pad);
+
+  device_manager->devices =
+    g_list_remove (device_manager->devices, pad->device);
+  g_signal_emit_by_name (device_manager, "device-removed", pad->device);
+
+  _gdk_device_set_associated_device (pad->device, NULL);
+
+  g_object_unref (pad->device);
   g_free (pad);
 }
 
@@ -4089,7 +4097,26 @@ static void
 tablet_pad_handle_done (void                     *data,
                         struct zwp_tablet_pad_v2 *wp_tablet_pad)
 {
+  GdkWaylandTabletPadData *pad = data;
+  GdkWaylandSeat *seat = GDK_WAYLAND_SEAT (pad->seat);
+  GdkWaylandDeviceManager *device_manager =
+    GDK_WAYLAND_DEVICE_MANAGER (seat->device_manager);
+
   g_debug (G_STRLOC ": %s pad = %p", G_STRFUNC, wp_tablet_pad);
+
+  pad->device =
+    g_object_new (GDK_TYPE_WAYLAND_DEVICE_PAD,
+                  "name", "Pad device",
+                  "type", GDK_DEVICE_TYPE_SLAVE,
+                  "input-source", GDK_SOURCE_TABLET_PAD,
+                  "input-mode", GDK_MODE_SCREEN,
+                  "display", gdk_seat_get_display (pad->seat),
+                  "device-manager", device_manager,
+                  "seat", seat,
+                  NULL);
+
+  _gdk_device_set_associated_device (pad->device, seat->master_keyboard);
+  g_signal_emit_by_name (device_manager, "device-added", pad->device);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]