[gnome-settings-daemon] common: Ignore (pure) keyboard devices on GsdDeviceManager
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] common: Ignore (pure) keyboard devices on GsdDeviceManager
- Date: Tue, 3 Oct 2017 13:30:53 +0000 (UTC)
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]