[gnome-settings-daemon] common: Ignore (pure) keyboard devices on GsdDeviceManager



commit 36ed91847fdfeb5064813b51d4576916f47e25c6
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Sep 24 13:22:07 2017 +0200

    common: Ignore (pure) keyboard devices on GsdDeviceManager
    
    They are not needed for GsdDeviceMapper purposes, and can cause misbehavior
    if the keyboard device "shares" the input node with a device we do need
    mapping.
    
    Fixes spotty touchscreen detection with those touchscreens that have a
    capacitive menu/windows button.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=787884

 plugins/common/gsd-device-manager-udev.c |   13 ++++++++++++-
 plugins/common/gsd-device-manager-x11.c  |    2 ++
 2 files changed, 14 insertions(+), 1 deletions(-)
---
diff --git a/plugins/common/gsd-device-manager-udev.c b/plugins/common/gsd-device-manager-udev.c
index aa93042..37581aa 100644
--- a/plugins/common/gsd-device-manager-udev.c
+++ b/plugins/common/gsd-device-manager-udev.c
@@ -85,6 +85,14 @@ create_device (GUdevDevice *udev_device)
        guint width, height;
        GUdevDevice *parent;
        GsdDevice *device;
+       GsdDeviceType device_type;
+
+       /* Ignore pure keyboard devices, if the device type mask
+        * contains anything else, we still do need to handle it.
+        */
+       device_type = udev_device_get_device_type (udev_device);
+       if (device_type == GSD_DEVICE_TYPE_KEYBOARD)
+               return NULL;
 
        parent = g_udev_device_get_parent (udev_device);
        g_assert (parent != NULL);
@@ -104,7 +112,7 @@ create_device (GUdevDevice *udev_device)
        device = g_object_new (GSD_TYPE_DEVICE,
                               "name", name,
                               "device-file", g_udev_device_get_device_file (udev_device),
-                              "type", udev_device_get_device_type (udev_device),
+                              "type", device_type,
                               "vendor-id", vendor,
                               "product-id", product,
                               "width", width,
@@ -129,6 +137,9 @@ add_device (GsdUdevDeviceManager *manager,
                return;
 
        device = create_device (udev_device);
+       if (!device)
+               return;
+
        g_hash_table_insert (manager->devices, g_object_ref (udev_device), device);
        g_signal_emit_by_name (manager, "device-added", device);
 }
diff --git a/plugins/common/gsd-device-manager-x11.c b/plugins/common/gsd-device-manager-x11.c
index a2704d1..d02e286 100644
--- a/plugins/common/gsd-device-manager-x11.c
+++ b/plugins/common/gsd-device-manager-x11.c
@@ -110,6 +110,8 @@ add_device (GsdX11DeviceManager *manager,
 
        if (gdk_device_get_device_type (gdk_device) == GDK_DEVICE_TYPE_MASTER)
                return;
+       if (gdk_device_get_source (gdk_device) == GDK_SOURCE_KEYBOARD)
+               return;
 
        id = gdk_x11_device_get_id (gdk_device);
        device_file = xdevice_get_device_node (id);


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