From c75eac27a82ad50e4f71efb18421b4923b0690a9 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 7 Feb 2018 13:17:16 +0100 Subject: [PATCH] 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 | 13 ++++++++++--- 2 files changed, 15 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..5c3560294 100644 --- a/src/wayland/meta-wayland-tablet.c +++ b/src/wayland/meta-wayland-tablet.c @@ -85,13 +85,20 @@ 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 && sscanf (vendor, "%x", &vid) == 1 && + product && sscanf (product, "%x", &pid) == 1) zwp_tablet_v2_send_id (resource, vid, pid); zwp_tablet_v2_send_done (resource);