xkb: Release XKB component names when compiling keymap.
Reviewed-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Rami Ylimäki <rami.ylimaki@vincit.fi> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
6f46ae3c69
commit
5c47f8beac
|
@ -447,6 +447,11 @@ extern _X_EXPORT void XkbFreeKeyboard(
|
||||||
Bool /* freeDesc */
|
Bool /* freeDesc */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
extern _X_EXPORT void XkbFreeComponentNames(
|
||||||
|
XkbComponentNamesPtr /* names */,
|
||||||
|
Bool /* freeNames */
|
||||||
|
);
|
||||||
|
|
||||||
extern _X_EXPORT void XkbSetActionKeyMods(
|
extern _X_EXPORT void XkbSetActionKeyMods(
|
||||||
XkbDescPtr /* xkb */,
|
XkbDescPtr /* xkb */,
|
||||||
XkbAction * /* act */,
|
XkbAction * /* act */,
|
||||||
|
|
|
@ -333,3 +333,22 @@ XkbFreeKeyboard(XkbDescPtr xkb,unsigned which,Bool freeAll)
|
||||||
free(xkb);
|
free(xkb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***====================================================================***/
|
||||||
|
|
||||||
|
void
|
||||||
|
XkbFreeComponentNames(XkbComponentNamesPtr names, Bool freeNames)
|
||||||
|
{
|
||||||
|
if (names)
|
||||||
|
{
|
||||||
|
free(names->keycodes);
|
||||||
|
free(names->types);
|
||||||
|
free(names->compat);
|
||||||
|
free(names->symbols);
|
||||||
|
free(names->geometry);
|
||||||
|
memset(names, 0, sizeof(XkbComponentNamesRec));
|
||||||
|
}
|
||||||
|
if (freeNames)
|
||||||
|
free(names);
|
||||||
|
}
|
||||||
|
|
|
@ -447,14 +447,12 @@ XkbRMLVOtoKcCGST(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, XkbComponentNamesPtr kccg
|
||||||
static XkbDescPtr
|
static XkbDescPtr
|
||||||
XkbCompileKeymapForDevice(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, int need)
|
XkbCompileKeymapForDevice(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, int need)
|
||||||
{
|
{
|
||||||
XkbDescPtr xkb;
|
XkbDescPtr xkb = NULL;
|
||||||
unsigned int provided;
|
unsigned int provided;
|
||||||
XkbComponentNamesRec kccgst;
|
XkbComponentNamesRec kccgst = {0};
|
||||||
char name[PATH_MAX];
|
char name[PATH_MAX];
|
||||||
|
|
||||||
if (!XkbRMLVOtoKcCGST(dev, rmlvo, &kccgst))
|
if (XkbRMLVOtoKcCGST(dev, rmlvo, &kccgst)) {
|
||||||
return NULL;
|
|
||||||
|
|
||||||
provided = XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, need,
|
provided = XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, need,
|
||||||
&xkb, name, PATH_MAX);
|
&xkb, name, PATH_MAX);
|
||||||
if ((need & provided) != need) {
|
if ((need & provided) != need) {
|
||||||
|
@ -463,7 +461,9 @@ XkbCompileKeymapForDevice(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, int need)
|
||||||
xkb = NULL;
|
xkb = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XkbFreeComponentNames(&kccgst, FALSE);
|
||||||
return xkb;
|
return xkb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
11
xkb/xkb.c
11
xkb/xkb.c
|
@ -5895,16 +5895,7 @@ ProcXkbGetKbdByName(ClientPtr client)
|
||||||
XkbFreeKeyboard(new,XkbAllComponentsMask,TRUE);
|
XkbFreeKeyboard(new,XkbAllComponentsMask,TRUE);
|
||||||
new= NULL;
|
new= NULL;
|
||||||
}
|
}
|
||||||
free(names.keycodes);
|
XkbFreeComponentNames(&names, FALSE);
|
||||||
names.keycodes = NULL;
|
|
||||||
free(names.types);
|
|
||||||
names.types = NULL;
|
|
||||||
free(names.compat);
|
|
||||||
names.compat = NULL;
|
|
||||||
free(names.symbols);
|
|
||||||
names.symbols = NULL;
|
|
||||||
free(names.geometry);
|
|
||||||
names.geometry = NULL;
|
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue