From cb9a1d01468732196fd25c6422991e784639ffce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Wed, 12 Mar 2014 17:18:22 +1000 Subject: [PATCH] xkb: factor out xkb loading to LoadXkm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Hutterer Reviewed-by: Kristian Høgsberg --- xkb/ddxLoad.c | 60 +++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c index 33247cf66..0361b9be5 100644 --- a/xkb/ddxLoad.c +++ b/xkb/ddxLoad.c @@ -291,37 +291,14 @@ XkbDDXOpenConfigFile(const char *mapName, char *fileNameRtrn, int fileNameRtrnLe return file; } -unsigned -XkbDDXLoadKeymapByNames(DeviceIntPtr keybd, - XkbComponentNamesPtr names, - unsigned want, - unsigned need, - XkbDescPtr *xkbRtrn, char *nameRtrn, int nameRtrnLen) +static unsigned +LoadXKM(unsigned want, unsigned need, const char *keymap, XkbDescPtr *xkbRtrn) { - XkbDescPtr xkb; FILE *file; char fileName[PATH_MAX]; unsigned missing; - *xkbRtrn = NULL; - if ((keybd == NULL) || (keybd->key == NULL) || - (keybd->key->xkbInfo == NULL)) - xkb = NULL; - else - xkb = keybd->key->xkbInfo->desc; - if ((names->keycodes == NULL) && (names->types == NULL) && - (names->compat == NULL) && (names->symbols == NULL) && - (names->geometry == NULL)) { - LogMessage(X_ERROR, "XKB: No components provided for device %s\n", - keybd->name ? keybd->name : "(unnamed keyboard)"); - return 0; - } - else if (!XkbDDXCompileKeymapByNames(xkb, names, want, need, - nameRtrn, nameRtrnLen)) { - LogMessage(X_ERROR, "XKB: Couldn't compile keymap\n"); - return 0; - } - file = XkbDDXOpenConfigFile(nameRtrn, fileName, PATH_MAX); + file = XkbDDXOpenConfigFile(keymap, fileName, PATH_MAX); if (file == NULL) { LogMessage(X_ERROR, "Couldn't open compiled keymap file %s\n", fileName); @@ -343,6 +320,37 @@ XkbDDXLoadKeymapByNames(DeviceIntPtr keybd, return (need | want) & (~missing); } +unsigned +XkbDDXLoadKeymapByNames(DeviceIntPtr keybd, + XkbComponentNamesPtr names, + unsigned want, + unsigned need, + XkbDescPtr *xkbRtrn, char *nameRtrn, int nameRtrnLen) +{ + XkbDescPtr xkb; + + *xkbRtrn = NULL; + if ((keybd == NULL) || (keybd->key == NULL) || + (keybd->key->xkbInfo == NULL)) + xkb = NULL; + else + xkb = keybd->key->xkbInfo->desc; + if ((names->keycodes == NULL) && (names->types == NULL) && + (names->compat == NULL) && (names->symbols == NULL) && + (names->geometry == NULL)) { + LogMessage(X_ERROR, "XKB: No components provided for device %s\n", + keybd->name ? keybd->name : "(unnamed keyboard)"); + return 0; + } + else if (!XkbDDXCompileKeymapByNames(xkb, names, want, need, + nameRtrn, nameRtrnLen)) { + LogMessage(X_ERROR, "XKB: Couldn't compile keymap\n"); + return 0; + } + + return LoadXKM(want, need, nameRtrn, xkbRtrn); +} + Bool XkbDDXNamesFromRules(DeviceIntPtr keybd, const char *rules_name,