SOURCES: xorg-xserver-server-force-SwitchCoreKeyboard-for-evdev.patch (NEW)...

baggins baggins at pld-linux.org
Fri Feb 13 19:56:49 CET 2009


Author: baggins                      Date: Fri Feb 13 18:56:49 2009 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- force SwitchCoreKeyboard for evdev devices to push device keymap into core device
  (fixes "Up" key invoking gnome-screenshot problem)

---- Files affected:
SOURCES:
   xorg-xserver-server-force-SwitchCoreKeyboard-for-evdev.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/xorg-xserver-server-force-SwitchCoreKeyboard-for-evdev.patch
diff -u /dev/null SOURCES/xorg-xserver-server-force-SwitchCoreKeyboard-for-evdev.patch:1.1
--- /dev/null	Fri Feb 13 19:56:50 2009
+++ SOURCES/xorg-xserver-server-force-SwitchCoreKeyboard-for-evdev.patch	Fri Feb 13 19:56:43 2009
@@ -0,0 +1,69 @@
+From 638cab7e1dc3711f7fb04155bcdabf4b8895cc5e Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at 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
+
================================================================


More information about the pld-cvs-commit mailing list