|
Peter Hutterer |
c2c05e9 |
From d3499556d8d83396fa2585bd00371a81e086be36 Mon Sep 17 00:00:00 2001
|
|
Peter Hutterer |
c2c05e9 |
From: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Peter Hutterer |
c2c05e9 |
Date: Thu, 10 Feb 2011 15:12:14 +1000
|
|
Peter Hutterer |
c2c05e9 |
Subject: [PATCH] xkb: if the keymap failed to compile, load the default keymap instead.
|
|
Peter Hutterer |
c2c05e9 |
|
|
Peter Hutterer |
c2c05e9 |
We really need symbols, compat, keynames, vmods and types for a sensible keymap.
|
|
Peter Hutterer |
c2c05e9 |
|
|
Peter Hutterer |
c2c05e9 |
Try this in your xorg.conf.d snippets for all keyboards:
|
|
Peter Hutterer |
c2c05e9 |
Option "XkbLayout" "us"
|
|
Peter Hutterer |
c2c05e9 |
Option "XkbVariant" "nodeadkeys"
|
|
Peter Hutterer |
c2c05e9 |
|
|
Peter Hutterer |
c2c05e9 |
us(nodeadkeys) doesn't exist so xkbcomp provides everything but the symbols
|
|
Peter Hutterer |
c2c05e9 |
map. We say we want everything but don't _need_ anything, the server happily
|
|
Peter Hutterer |
c2c05e9 |
gives us a keymap with every key mapped to NoSymbol. This in turn isn't what
|
|
Peter Hutterer |
c2c05e9 |
we want after all.
|
|
Peter Hutterer |
c2c05e9 |
|
|
Peter Hutterer |
c2c05e9 |
So instead, require symbols, compat, keynames, vmods and types from the
|
|
Peter Hutterer |
c2c05e9 |
keymap and if that fails, load the default keymap instead. If that fails
|
|
Peter Hutterer |
c2c05e9 |
too, all bets are off.
|
|
Peter Hutterer |
c2c05e9 |
|
|
Peter Hutterer |
c2c05e9 |
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Peter Hutterer |
c2c05e9 |
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
|
|
Peter Hutterer |
c2c05e9 |
---
|
|
Peter Hutterer |
c2c05e9 |
xkb/ddxLoad.c | 23 ++++++++++++++++++++++-
|
|
Peter Hutterer |
c2c05e9 |
1 files changed, 22 insertions(+), 1 deletions(-)
|
|
Peter Hutterer |
c2c05e9 |
|
|
Peter Hutterer |
c2c05e9 |
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
|
|
Peter Hutterer |
c2c05e9 |
index b968c43..ac587fc 100644
|
|
Peter Hutterer |
c2c05e9 |
--- a/xkb/ddxLoad.c
|
|
Peter Hutterer |
c2c05e9 |
+++ b/xkb/ddxLoad.c
|
|
Peter Hutterer |
c2c05e9 |
@@ -470,13 +470,34 @@ XkbDescPtr
|
|
Peter Hutterer |
c2c05e9 |
XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
|
|
Peter Hutterer |
c2c05e9 |
{
|
|
Peter Hutterer |
c2c05e9 |
XkbDescPtr xkb;
|
|
Peter Hutterer |
c2c05e9 |
+ unsigned int need;
|
|
Peter Hutterer |
c2c05e9 |
|
|
Peter Hutterer |
c2c05e9 |
if (!dev || !rmlvo) {
|
|
Peter Hutterer |
c2c05e9 |
LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
|
|
Peter Hutterer |
c2c05e9 |
return NULL;
|
|
Peter Hutterer |
c2c05e9 |
}
|
|
Peter Hutterer |
c2c05e9 |
|
|
Peter Hutterer |
c2c05e9 |
- xkb = XkbCompileKeymapForDevice(dev, rmlvo, 0);
|
|
Peter Hutterer |
c2c05e9 |
+ /* These are the components we really really need */
|
|
Peter Hutterer |
c2c05e9 |
+ need = XkmSymbolsMask | XkmCompatMapMask | XkmTypesMask |
|
|
Peter Hutterer |
c2c05e9 |
+ XkmKeyNamesMask | XkmVirtualModsMask;
|
|
Peter Hutterer |
c2c05e9 |
+
|
|
Peter Hutterer |
c2c05e9 |
+
|
|
Peter Hutterer |
c2c05e9 |
+ xkb = XkbCompileKeymapForDevice(dev, rmlvo, need);
|
|
Peter Hutterer |
c2c05e9 |
+
|
|
Peter Hutterer |
c2c05e9 |
+ if (!xkb) {
|
|
Peter Hutterer |
c2c05e9 |
+ XkbRMLVOSet dflts;
|
|
Peter Hutterer |
c2c05e9 |
+
|
|
Peter Hutterer |
c2c05e9 |
+ /* we didn't get what we really needed. And that will likely leave
|
|
Peter Hutterer |
c2c05e9 |
+ * us with a keyboard that doesn't work. Use the defaults instead */
|
|
Peter Hutterer |
c2c05e9 |
+ LogMessage(X_ERROR, "XKB: Failed to load keymap. Loading default "
|
|
Peter Hutterer |
c2c05e9 |
+ "keymap instead.\n");
|
|
Peter Hutterer |
c2c05e9 |
+
|
|
Peter Hutterer |
c2c05e9 |
+ XkbGetRulesDflts(&dflts);
|
|
Peter Hutterer |
c2c05e9 |
+
|
|
Peter Hutterer |
c2c05e9 |
+ xkb = XkbCompileKeymapForDevice(dev, &dflts, 0);
|
|
Peter Hutterer |
c2c05e9 |
+
|
|
Peter Hutterer |
c2c05e9 |
+ XkbFreeRMLVOSet(&dflts, FALSE);
|
|
Peter Hutterer |
c2c05e9 |
+ }
|
|
Peter Hutterer |
c2c05e9 |
|
|
Peter Hutterer |
c2c05e9 |
return xkb;
|
|
Peter Hutterer |
c2c05e9 |
}
|
|
Peter Hutterer |
c2c05e9 |
--
|
|
Peter Hutterer |
c2c05e9 |
1.7.4
|
|
Peter Hutterer |
c2c05e9 |
|