3262bac3e6
- xserver-1.5.0-xkb-fix-ProcXkbSetXYZ-to-work-on-all.patch: force xkb requests to apply to all extension devices. - drop call-SwitchCoreKeyboard.patch - xserver-1.5.0-force-SwitchCoreKeyboard-for-evdev.patch: force SwitchCoreKeyboard for evdev devices to push device keymap into core device.
70 lines
2.5 KiB
Diff
70 lines
2.5 KiB
Diff
From 638cab7e1dc3711f7fb04155bcdabf4b8895cc5e Mon Sep 17 00:00:00 2001
|
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Date: Mon, 4 Aug 2008 17:08:36 +0930
|
|
Subject: [PATCH] xfree86: force SwitchCoreKeyboard for evdev devices (updated).
|
|
|
|
If an evdev keyboard device is added through the HAL mechanism, force a
|
|
SwitchCoreKeyboard to load the evdev map into the VCK. This way, by the time a
|
|
client starts the evdev keymap is already there, leading to less pain lateron.
|
|
|
|
Works if:
|
|
- all keyboards are hotplugged through HAL, and/or
|
|
- the xorg.conf keyboard uses the kbd driver.
|
|
|
|
Has no effect (i.e. busted keymaps) if:
|
|
- an evdev keyboard device has been specified in the xorg.conf.
|
|
- we don't have a device at startup and plug a device in after starting the
|
|
desktop environment.
|
|
- if the device we use isn't the first one reported by HAL.
|
|
|
|
If HAL isn't set up, this patch is a noop.
|
|
---
|
|
hw/xfree86/common/xf86Xinput.c | 31 +++++++++++++++++++++++++++++++
|
|
1 files changed, 31 insertions(+), 0 deletions(-)
|
|
|
|
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
|
|
index 710e787..dacc3dc 100644
|
|
--- a/hw/xfree86/common/xf86Xinput.c
|
|
+++ b/hw/xfree86/common/xf86Xinput.c
|
|
@@ -423,6 +423,37 @@ NewInputDeviceRequest (InputOption *options, DeviceIntPtr *pdev)
|
|
(!is_auto || xf86Info.autoEnableDevices))
|
|
EnableDevice(dev);
|
|
|
|
+ /* XXX: The VCK always starts with built-in defaults for keymap. These
|
|
+ * defaults are different to the evdev ones. When the first key is hit on
|
|
+ * an extension device, the keymap is copied into the VCK's and any
|
|
+ * changes made at runtime to the VCK map are lost.
|
|
+ *
|
|
+ * Assumption: if we have at least one evdev keyboard device, we can
|
|
+ * ignore kbd devices. Force a SwitchCoreKeyboard so the VCK has the same
|
|
+ * keymap as we do.
|
|
+ *
|
|
+ * Next time we hit a key, we don't change the map over anymore (see
|
|
+ * SwitchCoreKeyboard), and live happily ever after.
|
|
+ * Until we have 2 physical keyboards. Or the first real keyboard isn't
|
|
+ * actually the one we use. Oh well.
|
|
+ *
|
|
+ */
|
|
+ if (dev->key)
|
|
+ {
|
|
+ InputInfoPtr info;
|
|
+
|
|
+ /* Search if there is one other keyboard that uses evdev. */
|
|
+ for (info = xf86InputDevs; info; info = info->next)
|
|
+ {
|
|
+ if (info != pInfo && info->dev && info->dev->key &&
|
|
+ (strcmp(info->drv->driverName, "evdev") == 0))
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (!info)
|
|
+ SwitchCoreKeyboard(dev);
|
|
+ }
|
|
+
|
|
*pdev = dev;
|
|
return Success;
|
|
|
|
--
|
|
1.5.5.1
|
|
|