xkb: Factor out a function to copy a keymap's controls onto another
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
795066477e
commit
361f405d3c
|
@ -841,6 +841,9 @@ extern void XkbFakeDeviceButton(DeviceIntPtr /* dev */ ,
|
||||||
int /* press */ ,
|
int /* press */ ,
|
||||||
int /* button */ );
|
int /* button */ );
|
||||||
|
|
||||||
|
extern _X_EXPORT void XkbCopyControls(XkbDescPtr /* dst */ ,
|
||||||
|
XkbDescPtr /* src */ );
|
||||||
|
|
||||||
#include "xkbfile.h"
|
#include "xkbfile.h"
|
||||||
#include "xkbrules.h"
|
#include "xkbrules.h"
|
||||||
|
|
||||||
|
|
14
xkb/xkb.c
14
xkb/xkb.c
|
@ -5950,25 +5950,13 @@ ProcXkbGetKbdByName(ClientPtr client)
|
||||||
if (rep.loaded) {
|
if (rep.loaded) {
|
||||||
XkbDescPtr old_xkb;
|
XkbDescPtr old_xkb;
|
||||||
xkbNewKeyboardNotify nkn;
|
xkbNewKeyboardNotify nkn;
|
||||||
int i, nG, nTG;
|
|
||||||
|
|
||||||
old_xkb = xkb;
|
old_xkb = xkb;
|
||||||
xkb = new;
|
xkb = new;
|
||||||
dev->key->xkbInfo->desc = xkb;
|
dev->key->xkbInfo->desc = xkb;
|
||||||
new = old_xkb; /* so it'll get freed automatically */
|
new = old_xkb; /* so it'll get freed automatically */
|
||||||
|
|
||||||
*xkb->ctrls = *old_xkb->ctrls;
|
XkbCopyControls(xkb, old_xkb);
|
||||||
for (nG = nTG = 0, i = xkb->min_key_code; i <= xkb->max_key_code; i++) {
|
|
||||||
nG = XkbKeyNumGroups(xkb, i);
|
|
||||||
if (nG >= XkbNumKbdGroups) {
|
|
||||||
nTG = XkbNumKbdGroups;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (nG > nTG) {
|
|
||||||
nTG = nG;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xkb->ctrls->num_groups = nTG;
|
|
||||||
|
|
||||||
nkn.deviceID = nkn.oldDeviceID = dev->id;
|
nkn.deviceID = nkn.oldDeviceID = dev->id;
|
||||||
nkn.minKeyCode = new->min_key_code;
|
nkn.minKeyCode = new->min_key_code;
|
||||||
|
|
|
@ -2090,3 +2090,26 @@ XkbMergeLockedPtrBtns(DeviceIntPtr master)
|
||||||
xkbi->lockedPtrButtons |= d->key->xkbInfo->lockedPtrButtons;
|
xkbi->lockedPtrButtons |= d->key->xkbInfo->lockedPtrButtons;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
XkbCopyControls(XkbDescPtr dst, XkbDescPtr src)
|
||||||
|
{
|
||||||
|
int i, nG, nTG;
|
||||||
|
|
||||||
|
if (!dst || !src)
|
||||||
|
return;
|
||||||
|
|
||||||
|
*dst->ctrls = *src->ctrls;
|
||||||
|
|
||||||
|
for (nG = nTG = 0, i = dst->min_key_code; i <= dst->max_key_code; i++) {
|
||||||
|
nG = XkbKeyNumGroups(dst, i);
|
||||||
|
if (nG >= XkbNumKbdGroups) {
|
||||||
|
nTG = XkbNumKbdGroups;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (nG > nTG) {
|
||||||
|
nTG = nG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dst->ctrls->num_groups = nTG;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue