xserver-1.9.99.1-xkb-split-out-keymap-compilation.patch (#676827 prep work)
xserver-1.9.99.1-xkb-if-the-keymap-failed-to-compile-load-the-default.patch (#676827 fix)
This commit is contained in:
parent
92cc1c1392
commit
c2c05e9e2f
@ -30,7 +30,7 @@
|
|||||||
Summary: X.Org X11 X server
|
Summary: X.Org X11 X server
|
||||||
Name: xorg-x11-server
|
Name: xorg-x11-server
|
||||||
Version: 1.9.99.1
|
Version: 1.9.99.1
|
||||||
Release: 4%{?gitdate:.%{gitdate}}%{dist}
|
Release: 5%{?gitdate:.%{gitdate}}%{dist}
|
||||||
URL: http://www.x.org
|
URL: http://www.x.org
|
||||||
License: MIT
|
License: MIT
|
||||||
Group: User Interface/X
|
Group: User Interface/X
|
||||||
@ -93,6 +93,13 @@ Patch7005: xserver-1.9.0-qxl-fallback.patch
|
|||||||
# http://patchwork.freedesktop.org/patch/3653/
|
# http://patchwork.freedesktop.org/patch/3653/
|
||||||
Patch7006: xserver-1.9.99.901-xkb-repeat-issues.patch
|
Patch7006: xserver-1.9.99.901-xkb-repeat-issues.patch
|
||||||
|
|
||||||
|
# 676827 keyboard with german layout doesn't work in gdm
|
||||||
|
# 47d1d2fed656c3a3b2600491078da90962c46934
|
||||||
|
Patch7007: xserver-1.9.99.1-xkb-split-out-keymap-compilation.patch
|
||||||
|
# d3499556d8d83396fa2585bd00371a81e086be36
|
||||||
|
Patch7008: xserver-1.9.99.1-xkb-if-the-keymap-failed-to-compile-load-the-default.patch
|
||||||
|
|
||||||
|
|
||||||
%define moduledir %{_libdir}/xorg/modules
|
%define moduledir %{_libdir}/xorg/modules
|
||||||
%define drimoduledir %{_libdir}/dri
|
%define drimoduledir %{_libdir}/dri
|
||||||
%define sdkdir %{_includedir}/xorg
|
%define sdkdir %{_includedir}/xorg
|
||||||
@ -552,6 +559,11 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%{xserver_source_dir}
|
%{xserver_source_dir}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Feb 24 2011 Peter Hutterer <peter.hutterer@redhat.com> 1.9.99.1-5.20101201
|
||||||
|
- xserver-1.9.99.1-xkb-split-out-keymap-compilation.patch (#676827 prep work)
|
||||||
|
- xserver-1.9.99.1-xkb-if-the-keymap-failed-to-compile-load-the-default.patch
|
||||||
|
(#676827 fix)
|
||||||
|
|
||||||
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.9.99.1-4.20101201
|
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.9.99.1-4.20101201
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
||||||
|
|
||||||
|
@ -0,0 +1,69 @@
|
|||||||
|
From d3499556d8d83396fa2585bd00371a81e086be36 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Date: Thu, 10 Feb 2011 15:12:14 +1000
|
||||||
|
Subject: [PATCH] xkb: if the keymap failed to compile, load the default keymap instead.
|
||||||
|
|
||||||
|
We really need symbols, compat, keynames, vmods and types for a sensible keymap.
|
||||||
|
|
||||||
|
Try this in your xorg.conf.d snippets for all keyboards:
|
||||||
|
Option "XkbLayout" "us"
|
||||||
|
Option "XkbVariant" "nodeadkeys"
|
||||||
|
|
||||||
|
us(nodeadkeys) doesn't exist so xkbcomp provides everything but the symbols
|
||||||
|
map. We say we want everything but don't _need_ anything, the server happily
|
||||||
|
gives us a keymap with every key mapped to NoSymbol. This in turn isn't what
|
||||||
|
we want after all.
|
||||||
|
|
||||||
|
So instead, require symbols, compat, keynames, vmods and types from the
|
||||||
|
keymap and if that fails, load the default keymap instead. If that fails
|
||||||
|
too, all bets are off.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
|
||||||
|
---
|
||||||
|
xkb/ddxLoad.c | 23 ++++++++++++++++++++++-
|
||||||
|
1 files changed, 22 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
|
||||||
|
index b968c43..ac587fc 100644
|
||||||
|
--- a/xkb/ddxLoad.c
|
||||||
|
+++ b/xkb/ddxLoad.c
|
||||||
|
@@ -470,13 +470,34 @@ XkbDescPtr
|
||||||
|
XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
|
||||||
|
{
|
||||||
|
XkbDescPtr xkb;
|
||||||
|
+ unsigned int need;
|
||||||
|
|
||||||
|
if (!dev || !rmlvo) {
|
||||||
|
LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- xkb = XkbCompileKeymapForDevice(dev, rmlvo, 0);
|
||||||
|
+ /* These are the components we really really need */
|
||||||
|
+ need = XkmSymbolsMask | XkmCompatMapMask | XkmTypesMask |
|
||||||
|
+ XkmKeyNamesMask | XkmVirtualModsMask;
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ xkb = XkbCompileKeymapForDevice(dev, rmlvo, need);
|
||||||
|
+
|
||||||
|
+ if (!xkb) {
|
||||||
|
+ XkbRMLVOSet dflts;
|
||||||
|
+
|
||||||
|
+ /* we didn't get what we really needed. And that will likely leave
|
||||||
|
+ * us with a keyboard that doesn't work. Use the defaults instead */
|
||||||
|
+ LogMessage(X_ERROR, "XKB: Failed to load keymap. Loading default "
|
||||||
|
+ "keymap instead.\n");
|
||||||
|
+
|
||||||
|
+ XkbGetRulesDflts(&dflts);
|
||||||
|
+
|
||||||
|
+ xkb = XkbCompileKeymapForDevice(dev, &dflts, 0);
|
||||||
|
+
|
||||||
|
+ XkbFreeRMLVOSet(&dflts, FALSE);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return xkb;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.7.4
|
||||||
|
|
95
xserver-1.9.99.1-xkb-split-out-keymap-compilation.patch
Normal file
95
xserver-1.9.99.1-xkb-split-out-keymap-compilation.patch
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
From 47d1d2fed656c3a3b2600491078da90962c46934 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Date: Thu, 10 Feb 2011 15:11:34 +1000
|
||||||
|
Subject: [PATCH] xkb: split out keymap compilation.
|
||||||
|
|
||||||
|
Refactoring for simpler double-use in the next patch. No functional changes.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
|
||||||
|
---
|
||||||
|
xkb/ddxLoad.c | 55 +++++++++++++++++++++++++++++++++++++++----------------
|
||||||
|
1 files changed, 39 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
|
||||||
|
index 51b5777..b968c43 100644
|
||||||
|
--- a/xkb/ddxLoad.c
|
||||||
|
+++ b/xkb/ddxLoad.c
|
||||||
|
@@ -425,35 +425,58 @@ XkbRF_RulesPtr rules;
|
||||||
|
return complete;
|
||||||
|
}
|
||||||
|
|
||||||
|
-XkbDescPtr
|
||||||
|
-XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
|
||||||
|
+static Bool
|
||||||
|
+XkbRMLVOtoKcCGST(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, XkbComponentNamesPtr kccgst)
|
||||||
|
{
|
||||||
|
- XkbComponentNamesRec kccgst;
|
||||||
|
XkbRF_VarDefsRec mlvo;
|
||||||
|
- XkbDescPtr xkb;
|
||||||
|
- char name[PATH_MAX];
|
||||||
|
-
|
||||||
|
- if (!dev || !rmlvo) {
|
||||||
|
- LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
|
||||||
|
- return NULL;
|
||||||
|
- }
|
||||||
|
|
||||||
|
mlvo.model = rmlvo->model;
|
||||||
|
mlvo.layout = rmlvo->layout;
|
||||||
|
mlvo.variant = rmlvo->variant;
|
||||||
|
mlvo.options = rmlvo->options;
|
||||||
|
|
||||||
|
- /* XDNFR already logs for us. */
|
||||||
|
- if (!XkbDDXNamesFromRules(dev, rmlvo->rules, &mlvo, &kccgst))
|
||||||
|
+ return XkbDDXNamesFromRules(dev, rmlvo->rules, &mlvo, kccgst);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Compile the given RMLVO keymap and return it. Returns the XkbDescPtr on
|
||||||
|
+ * success or NULL on failure. If the components compiled are not a superset
|
||||||
|
+ * or equal to need, the compiliation is treated as failure.
|
||||||
|
+ */
|
||||||
|
+static XkbDescPtr
|
||||||
|
+XkbCompileKeymapForDevice(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, int need)
|
||||||
|
+{
|
||||||
|
+ XkbDescPtr xkb;
|
||||||
|
+ unsigned int provided;
|
||||||
|
+ XkbComponentNamesRec kccgst;
|
||||||
|
+ char name[PATH_MAX];
|
||||||
|
+
|
||||||
|
+ if (!XkbRMLVOtoKcCGST(dev, rmlvo, &kccgst))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
- /* XDLKBN too, but it might return 0 as well as allocating. */
|
||||||
|
- if (!XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, 0, &xkb, name,
|
||||||
|
- PATH_MAX)) {
|
||||||
|
- if (xkb)
|
||||||
|
+ provided = XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, need,
|
||||||
|
+ &xkb, name, PATH_MAX);
|
||||||
|
+ if ((need & provided) != need) {
|
||||||
|
+ if (xkb) {
|
||||||
|
XkbFreeKeyboard(xkb, 0, TRUE);
|
||||||
|
+ xkb = NULL;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return xkb;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+XkbDescPtr
|
||||||
|
+XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
|
||||||
|
+{
|
||||||
|
+ XkbDescPtr xkb;
|
||||||
|
+
|
||||||
|
+ if (!dev || !rmlvo) {
|
||||||
|
+ LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ xkb = XkbCompileKeymapForDevice(dev, rmlvo, 0);
|
||||||
|
+
|
||||||
|
return xkb;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.7.4
|
||||||
|
|
Loading…
Reference in New Issue
Block a user