Xi: fix up modifierKeyMap copying.
Setting it to NULL isn't correct either. The correct behaviour is to realloc it to the size necessary (or newly alloc it/free it). Otherwise we have a memleak.
This commit is contained in:
parent
3106ba1116
commit
6faf5b97b9
|
@ -176,11 +176,16 @@ CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master)
|
||||||
|
|
||||||
if (dk->maxKeysPerModifier)
|
if (dk->maxKeysPerModifier)
|
||||||
{
|
{
|
||||||
mk->modifierKeyMap = xcalloc(8, dk->maxKeysPerModifier);
|
mk->modifierKeyMap = xrealloc(mk->modifierKeyMap,
|
||||||
|
8 * dk->maxKeysPerModifier);
|
||||||
if (!mk->modifierKeyMap)
|
if (!mk->modifierKeyMap)
|
||||||
FatalError("[Xi] no memory for class shift.\n");
|
FatalError("[Xi] no memory for class shift.\n");
|
||||||
memcpy(mk->modifierKeyMap, dk->modifierKeyMap,
|
memcpy(mk->modifierKeyMap, dk->modifierKeyMap,
|
||||||
(8 * dk->maxKeysPerModifier));
|
(8 * dk->maxKeysPerModifier));
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
xfree(mk->modifierKeyMap);
|
||||||
|
mk->modifierKeyMap = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
mk->maxKeysPerModifier = dk->maxKeysPerModifier;
|
mk->maxKeysPerModifier = dk->maxKeysPerModifier;
|
||||||
|
@ -439,7 +444,6 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to)
|
||||||
#ifdef XKB
|
#ifdef XKB
|
||||||
to->key->xkbInfo = NULL;
|
to->key->xkbInfo = NULL;
|
||||||
#endif
|
#endif
|
||||||
to->key->modifierKeyMap = NULL;
|
|
||||||
to->key->curKeySyms.map = NULL;
|
to->key->curKeySyms.map = NULL;
|
||||||
CopyKeyClass(from, to);
|
CopyKeyClass(from, to);
|
||||||
} else if (to->key && !from->key)
|
} else if (to->key && !from->key)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user