* Tue Aug 05 2008 Peter Hutterer <peter.hutterer@redhat.com> 1.4.99.906-5

- 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.
This commit is contained in:
Peter Hutterer 2008-08-05 05:10:31 +00:00
parent b1cd19cffe
commit 3262bac3e6
4 changed files with 2328 additions and 63 deletions

View File

@ -19,7 +19,7 @@
Summary: X.Org X11 X server
Name: xorg-x11-server
Version: 1.4.99.906
Release: 4%{?dist}
Release: 5%{?dist}
URL: http://www.x.org
License: MIT
Group: User Interface/X
@ -63,7 +63,8 @@ Patch5007: xserver-1.5.0-bad-fbdev-thats-mine.patch
Patch5011: xserver-1.4.99-endian.patch
# evdev keyboard map fix
# Patch5012: xserver-1.5.0-call-SwitchCoreKeyboard-for-first-device.patch
Patch5013: xserver-1.5.0-xkb-fix-ProcXkbSetXYZ-to-work-on-all.patch
Patch5014: xserver-1.5.0-force-SwitchCoreKeyboard-for-evdev.patch
%define moduledir %{_libdir}/xorg/modules
%define drimoduledir %{_libdir}/dri
@ -488,10 +489,21 @@ rm -rf $RPM_BUILD_ROOT
%changelog
* Tue Aug 05 2008 Peter Hutterer <peter.hutterer@redhat.com> 1.4.99.906-5
- 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.
* Mon Aug 04 2008 Adam Jackson <ajax@redhat.com> 1.4.99.906-4
- 10-x11-keymap.fdi, fedora-setup-keyboard: Attempt to read keyboard settings
from /etc/sysconfig/keyboard and stuff them into hal.
* Mon Aug 04 2008 Peter Hutterer <peter.hutterer@redhat.com> 1.4.99.906-3
- xserver-1.5.0-call-SwitchCoreKeyboard-for-first-device.patch: force a keymap
switch to push the device keymap into the core device.
* Thu Jul 31 2008 Adam Jackson <ajax@redhat.com> 1.4.99.906-2
- Drop the evdev keyboarding patch.

View File

@ -1,61 +0,0 @@
From b2943b507261d1c68a6266b090ec44495d7796a1 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Mon, 28 Jul 2008 12:17:17 +0930
Subject: [PATCH] xfree86: call SwitchCoreKeyboard for first physical device.
The VCK's keymap is different to the (evdev) keyboard's keymap. Any changes to
the VCK are lost when the first key is pressed (see X.Org Bug 16364). By
calling SwitchCoreKeyboard for the first hotplugged keyboard, the keymap is
toggled already when the first apps start.
This fixes GNOME, which stores the keycode instead of the keysym.
Fixes xmodmap, etc. settings in xinitrc or otherwise set before the first key
press.
This breaks if the first hotplugged keyboard is not the actual keyboard the
user wants to use.
---
hw/xfree86/common/xf86Xinput.c | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 710e787..fe08626 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -423,6 +423,33 @@ 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.
+ *
+ * If this is the first real keyboard to activate, 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)
+ {
+ DeviceIntPtr it;
+
+ for (it = inputInfo.keyboard->next; it; it = it->next)
+ {
+ if (it->key && it != dev)
+ break;
+ }
+
+ if (!it) /* no other keyboard found */
+ SwitchCoreKeyboard(dev);
+ }
+
*pdev = dev;
return Success;
--
1.5.5.1

View File

@ -0,0 +1,69 @@
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

File diff suppressed because it is too large Load Diff