xkb: add KeymapOrDefault
Helper function to return a default map if the keymap compilation failed. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
parent
cb9a1d0146
commit
8b6c79e19c
|
@ -444,6 +444,29 @@ XkbCompileKeymapForDevice(DeviceIntPtr dev, XkbRMLVOSet * rmlvo, int need)
|
|||
return xkb;
|
||||
}
|
||||
|
||||
static XkbDescPtr
|
||||
KeymapOrDefaults(DeviceIntPtr dev, XkbDescPtr xkb)
|
||||
{
|
||||
XkbRMLVOSet dflts;
|
||||
|
||||
if (xkb)
|
||||
return xkb;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
|
||||
XkbDescPtr
|
||||
XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet * rmlvo)
|
||||
{
|
||||
|
@ -461,20 +484,5 @@ XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet * rmlvo)
|
|||
|
||||
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;
|
||||
return KeymapOrDefaults(dev, xkb);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user