diff options
-rw-r--r-- | src/evdev.c | 40 | ||||
-rw-r--r-- | src/evdev.h | 20 |
2 files changed, 38 insertions, 22 deletions
diff --git a/src/evdev.c b/src/evdev.c index dc5f055..7506d86 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -839,27 +839,33 @@ EvdevAddKeyClass(DeviceIntPtr device) /* sorry, no rules change allowed for you */ xf86ReplaceStrOption(pInfo->options, "xkb_rules", "evdev"); - SetXkbOption(pInfo, "xkb_rules", &pEvdev->xkb_rules); - SetXkbOption(pInfo, "xkb_model", &pEvdev->xkb_model); - if (!pEvdev->xkb_model) - SetXkbOption(pInfo, "XkbModel", &pEvdev->xkb_model); - SetXkbOption(pInfo, "xkb_layout", &pEvdev->xkb_layout); - if (!pEvdev->xkb_layout) - SetXkbOption(pInfo, "XkbLayout", &pEvdev->xkb_layout); - SetXkbOption(pInfo, "xkb_variant", &pEvdev->xkb_variant); - if (!pEvdev->xkb_variant) - SetXkbOption(pInfo, "XkbVariant", &pEvdev->xkb_variant); - SetXkbOption(pInfo, "xkb_options", &pEvdev->xkb_options); - if (!pEvdev->xkb_options) - SetXkbOption(pInfo, "XkbOptions", &pEvdev->xkb_options); - - XkbSetRulesDflts(pEvdev->xkb_rules, pEvdev->xkb_model, - pEvdev->xkb_layout, pEvdev->xkb_variant, - pEvdev->xkb_options); + SetXkbOption(pInfo, "xkb_rules", &pEvdev->rmlvo.rules); + SetXkbOption(pInfo, "xkb_model", &pEvdev->rmlvo.model); + if (!pEvdev->rmlvo.model) + SetXkbOption(pInfo, "XkbModel", &pEvdev->rmlvo.model); + SetXkbOption(pInfo, "xkb_layout", &pEvdev->rmlvo.layout); + if (!pEvdev->rmlvo.layout) + SetXkbOption(pInfo, "XkbLayout", &pEvdev->rmlvo.layout); + SetXkbOption(pInfo, "xkb_variant", &pEvdev->rmlvo.variant); + if (!pEvdev->rmlvo.variant) + SetXkbOption(pInfo, "XkbVariant", &pEvdev->rmlvo.variant); + SetXkbOption(pInfo, "xkb_options", &pEvdev->rmlvo.options); + if (!pEvdev->rmlvo.options) + SetXkbOption(pInfo, "XkbOptions", &pEvdev->rmlvo.options); + +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 5 + XkbSetRulesDflts(&pEvdev->rmlvo); + if (!InitKeyboardDeviceStruct(device, &pEvdev->rmlvo, NULL, EvdevKbdCtrl)) + return !Success; +#else + XkbSetRulesDflts(pEvdev->rmlvo.rules, pEvdev->rmlvo.model, + pEvdev->rmlvo.layout, pEvdev->rmlvo.variant, + pEvdev->rmlvo.options); if (!XkbInitKeyboardDeviceStruct(device, &pEvdev->xkbnames, &keySyms, modMap, NULL, EvdevKbdCtrl)) return !Success; +#endif pInfo->flags |= XI86_KEYBOARD_CAPABLE; diff --git a/src/evdev.h b/src/evdev.h index 67fee1d..68ee073 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -62,6 +62,17 @@ #define HAVE_PROPERTIES 1 #endif +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 5 +typedef struct { + char *rules; + char *model; + char *layout; + char *variant; + char *options; +} XkbRMLVOSet; +#endif + + #define LONG_BITS (sizeof(long) * 8) /* Number of longs needed to hold the given number of bits */ @@ -89,12 +100,11 @@ typedef struct { BOOL has_pressure; /* XKB stuff has to be per-device rather than per-driver */ - char *xkb_rules; - char *xkb_model; - char *xkb_layout; - char *xkb_variant; - char *xkb_options; +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 5 XkbComponentNamesRec xkbnames; +#endif + XkbRMLVOSet rmlvo; + /* Middle mouse button emulation */ struct { BOOL enabled; |