summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2020-05-05 16:07:31 +0200
committerBastien Nocera <hadess@hadess.net>2020-05-05 16:11:42 +0200
commite0b8354e9cf53a271e66a7ba44fd567daeac2416 (patch)
treef3dc2d4a1f7a66f63d44399265861983e1c1dad1
parent85cd95ae53499788a0df86af28876ec27074caa2 (diff)
downloadupower-e0b8354e9cf53a271e66a7ba44fd567daeac2416.tar.gz
linux: Identify keyboard/pointing device combos as keyboards
Rather than using the type of the first sibling device we find, which is usually the pointing device portion, make sure that keyboard/pointing device combo devices are identified as keyboards.
-rw-r--r--src/linux/up-device-supply.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
index d7e4423..9302119 100644
--- a/src/linux/up-device-supply.c
+++ b/src/linux/up-device-supply.c
@@ -888,7 +888,7 @@ up_device_supply_get_sibling_with_subsystem (GUdevDevice *device,
class[0] = subsystem;
client = g_udev_client_new (class);
devices = g_udev_client_query_by_subsystem (client, subsystem);
- for (l = devices; l != NULL && sibling == NULL; l = l->next) {
+ for (l = devices; l != NULL; l = l->next) {
GUdevDevice *d = l->data;
GUdevDevice *p;
const char *p_path;
@@ -897,8 +897,14 @@ up_device_supply_get_sibling_with_subsystem (GUdevDevice *device,
if (!p)
continue;
p_path = g_udev_device_get_sysfs_path (p);
- if (g_strcmp0 (p_path, parent_path) == 0)
- sibling = g_object_ref (d);
+ if (g_strcmp0 (p_path, parent_path) == 0) {
+ if (sibling != NULL &&
+ g_udev_device_get_property_as_boolean (d, "ID_INPUT_KEYBOARD")) {
+ g_clear_object (&sibling);
+ }
+ if (sibling == NULL)
+ sibling = g_object_ref (d);
+ }
g_object_unref (p);
}