[mutter/wip/carlosg/fix-tablets-on-nested: 2/2] wayland: Handle NULL event node/vendor/product on tablet methods



commit 355afa7feb5d746cadbac1371cf660bea9c80e51
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Feb 7 13:17:16 2018 +0100

    wayland: Handle NULL event node/vendor/product on tablet methods
    
    We currently don't handle NULLs on these correctly, yet they can be
    so when running nested. Just refrain from sending those wp_tablet(_pad)
    events in that case.

 src/wayland/meta-wayland-tablet-pad.c |  6 +++++-
 src/wayland/meta-wayland-tablet.c     | 14 +++++++++++---
 2 files changed, 16 insertions(+), 4 deletions(-)
---
diff --git a/src/wayland/meta-wayland-tablet-pad.c b/src/wayland/meta-wayland-tablet-pad.c
index 21841127e..5c0b80966 100644
--- a/src/wayland/meta-wayland-tablet-pad.c
+++ b/src/wayland/meta-wayland-tablet-pad.c
@@ -277,9 +277,13 @@ meta_wayland_tablet_pad_notify (MetaWaylandTabletPad  *pad,
                                 struct wl_resource    *resource)
 {
   struct wl_client *client = wl_resource_get_client (resource);
+  const gchar *node_path;
   GList *l;
 
-  zwp_tablet_pad_v2_send_path (resource, clutter_input_device_get_device_node (pad->device));
+  node_path = clutter_input_device_get_device_node (pad->device);
+  if (node_path)
+    zwp_tablet_pad_v2_send_path (resource, node_path);
+
   zwp_tablet_pad_v2_send_buttons (resource, pad->n_buttons);
 
   for (l = pad->groups; l; l = l->next)
diff --git a/src/wayland/meta-wayland-tablet.c b/src/wayland/meta-wayland-tablet.c
index 013d00f21..02c89cab5 100644
--- a/src/wayland/meta-wayland-tablet.c
+++ b/src/wayland/meta-wayland-tablet.c
@@ -85,13 +85,21 @@ meta_wayland_tablet_notify (MetaWaylandTablet  *tablet,
                             struct wl_resource *resource)
 {
   ClutterInputDevice *device = tablet->device;
+  const gchar *node_path, *vendor, *product;
   guint vid, pid;
 
   zwp_tablet_v2_send_name (resource, clutter_input_device_get_device_name (device));
-  zwp_tablet_v2_send_path (resource, clutter_input_device_get_device_node (device));
 
-  if (sscanf (clutter_input_device_get_vendor_id (device), "%x", &vid) == 1 &&
-      sscanf (clutter_input_device_get_product_id (device), "%x", &pid) == 1)
+  node_path = clutter_input_device_get_device_node (device);
+  if (node_path)
+    zwp_tablet_v2_send_path (resource, node_path);
+
+  vendor = clutter_input_device_get_vendor_id (device);
+  product = clutter_input_device_get_product_id (device);
+
+  if (vendor && product &&
+      sscanf (vendor, "%x", &vid) == 1 &&
+      sscanf (product, "%x", &pid) == 1)
     zwp_tablet_v2_send_id (resource, vid, pid);
 
   zwp_tablet_v2_send_done (resource);


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