diff --git a/config/hal.c b/config/hal.c index ea574ca52..c76eced4c 100644 --- a/config/hal.c +++ b/config/hal.c @@ -170,7 +170,7 @@ device_added(LibHalContext * hal_ctx, const char *udi) free(hal_tags); if (libhal_device_query_capability(hal_ctx, udi, "input.keys", NULL)) - attrs.flags |= ATTR_KEYBOARD; + attrs.flags |= ATTR_KEY | ATTR_KEYBOARD; if (libhal_device_query_capability(hal_ctx, udi, "input.mouse", NULL)) attrs.flags |= ATTR_POINTER; if (libhal_device_query_capability(hal_ctx, udi, "input.joystick", NULL)) diff --git a/config/udev.c b/config/udev.c index 08a954bd0..1a6e82a3c 100644 --- a/config/udev.c +++ b/config/udev.c @@ -239,6 +239,10 @@ device_added(struct udev_device *udev_device) attrs.vendor = strdup(value); } else if (!strcmp(key, "ID_INPUT_KEY")) { + LOG_PROPERTY(path, key, value); + attrs.flags |= ATTR_KEY; + } + else if (!strcmp(key, "ID_INPUT_KEYBOARD")) { LOG_PROPERTY(path, key, value); attrs.flags |= ATTR_KEYBOARD; } diff --git a/config/wscons.c b/config/wscons.c index fb114bd71..ee4567590 100644 --- a/config/wscons.c +++ b/config/wscons.c @@ -163,7 +163,7 @@ wscons_add_keyboard(void) } kbd_config_done: - attrs.flags |= ATTR_KEYBOARD; + attrs.flags |= ATTR_KEY | ATTR_KEYBOARD; rc = NewInputDeviceRequest(input_options, &attrs, &dev); if (rc != Success) goto unwind; diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c index 836db7916..ae19a9def 100644 --- a/hw/kdrive/src/kinput.c +++ b/hw/kdrive/src/kinput.c @@ -2343,7 +2343,9 @@ NewInputDeviceRequest(InputOption *options, InputAttributes * attrs, *pdev = ki->dixdev; } else { - ErrorF("unrecognised device identifier!\n"); + ErrorF("unrecognised device identifier: %s\n", + input_option_get_value(input_option_find(optionsdup, + "device"))); input_option_free_list(&optionsdup); return BadValue; } diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index a9ce62a98..4f2e6c8c4 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -635,7 +635,7 @@ InputClassMatches(const XF86ConfInputClassPtr iclass, const InputInfoPtr idev, /* MatchIs* booleans */ if (iclass->is_keyboard.set && - iclass->is_keyboard.val != ! !(attrs->flags & ATTR_KEYBOARD)) + iclass->is_keyboard.val != ! !(attrs->flags & ATTR_KEY)) return FALSE; if (iclass->is_pointer.set && iclass->is_pointer.val != ! !(attrs->flags & ATTR_POINTER)) diff --git a/include/input.h b/include/input.h index d8bd9c602..966212305 100644 --- a/include/input.h +++ b/include/input.h @@ -236,6 +236,7 @@ typedef struct _InputAttributes { #define ATTR_TABLET (1<<3) #define ATTR_TOUCHPAD (1<<4) #define ATTR_TOUCHSCREEN (1<<5) +#define ATTR_KEY (1<<6) /* Key/Button has been run through all input processing and events sent to clients. */ #define KEY_PROCESSED 1