summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2008-03-04 03:47:36 +0200
committerDaniel Stone <daniel@fooishbar.org>2008-03-04 03:50:25 +0200
commit0bd0f90d7c7928052197da7119177e5a1c9eee2c (patch)
tree94a3b62ea89c0bb1a65616baaa820ff2cf92c8a8
parent613852ce6a821ce6f6382fc14629f517776a3701 (diff)
XKB: Fix initial map setting on startup
Due to an unwitting sense inversion when eliminating XkbFileInfo, we were setting the complete wrong keymap on startup (non-XKB map if we had an XKB map available, or the XKB map if we didn't have any available). Invert the sense properly, and add two small bits that also went missing in that commit.
-rw-r--r--xkb/xkbInit.c7
-rw-r--r--xkb/xkbfmisc.c24
2 files changed, 25 insertions, 6 deletions
diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index c0afad026..3b47396e5 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -375,7 +375,8 @@ Atom unknown;
names->vmods[vmod_AltGr]= CREATE_ATOM("ModeSwitch");
}
- if (!(xkb->defined & XkmIndicatorsMask)) {
+ if (!(xkb->defined & XkmIndicatorsMask) ||
+ !(xkb->defined & XkmGeometryMask)) {
initIndicatorNames(NULL,xkb);
if (names->indicators[LED_CAPS-1]==None)
names->indicators[LED_CAPS-1] = CREATE_ATOM("Caps Lock");
@@ -531,10 +532,10 @@ XkbEventCauseRec cause;
XkbDDXInitDevice(pXDev);
if (xkb->defined & XkmSymbolsMask)
+ XkbUpdateCoreDescription(pXDev, True);
+ else
XkbUpdateKeyTypesFromCore(pXDev, xkb->min_key_code,
XkbNumKeys(xkb), &changes);
- else
- XkbUpdateCoreDescription(pXDev, True);
XkbSetCauseUnknown(&cause);
XkbUpdateActions(pXDev,xkb->min_key_code, XkbNumKeys(xkb),&changes,
diff --git a/xkb/xkbfmisc.c b/xkb/xkbfmisc.c
index 866b4b154..ae752e945 100644
--- a/xkb/xkbfmisc.c
+++ b/xkb/xkbfmisc.c
@@ -184,9 +184,27 @@ unsigned wantNames,wantConfig,wantDflts;
if (want==0)
return False;
- if (xkb!=NULL)
- old_names= xkb->names;
- else old_names= NULL;
+ if (xkb) {
+ old_names = xkb->names;
+
+ xkb->defined = 0;
+ /* Wow would it ever be neat if we didn't need this noise. */
+ if (xkb->names && xkb->names->keys)
+ xkb->defined |= XkmKeyNamesMask;
+ if (xkb->map && xkb->map->types)
+ xkb->defined |= XkmTypesMask;
+ if (xkb->compat)
+ xkb->defined |= XkmCompatMapMask;
+ if (xkb->map && xkb->map->num_syms)
+ xkb->defined |= XkmSymbolsMask;
+ if (xkb->indicators)
+ xkb->defined |= XkmIndicatorsMask;
+ if (xkb->geom)
+ xkb->defined |= XkmGeometryMask;
+ }
+ else {
+ old_names= NULL;
+ }
wantConfig= want&(~complete);
if (xkb!=NULL) {