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;
|
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
|
XkbDescPtr
|
||||||
XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet * rmlvo)
|
XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet * rmlvo)
|
||||||
{
|
{
|
||||||
|
@ -461,20 +484,5 @@ XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet * rmlvo)
|
||||||
|
|
||||||
xkb = XkbCompileKeymapForDevice(dev, rmlvo, need);
|
xkb = XkbCompileKeymapForDevice(dev, rmlvo, need);
|
||||||
|
|
||||||
if (!xkb) {
|
return KeymapOrDefaults(dev, 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;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue