summaryrefslogtreecommitdiff
path: root/xkb
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-01-20 21:16:24 -0800
committerKeith Packard <keithp@keithp.com>2011-01-20 21:16:24 -0800
commit57a1d9b85331f6fe19d5111f5163139572ffbf02 (patch)
tree63a2e42309afdaec073a00b01118363ec2fb8caa /xkb
parent24ce650cf4f0c6fa72faecd38c53d40703e6c959 (diff)
parent64237697994871adfcf4905b5784e75cd7281579 (diff)
Merge remote branch 'whot/for-keith'
Diffstat (limited to 'xkb')
-rw-r--r--xkb/XKBMisc.c15
-rw-r--r--xkb/xkbUtils.c9
2 files changed, 14 insertions, 10 deletions
diff --git a/xkb/XKBMisc.c b/xkb/XKBMisc.c
index efe291103..96688be18 100644
--- a/xkb/XKBMisc.c
+++ b/xkb/XKBMisc.c
@@ -454,11 +454,12 @@ unsigned changed,tmp;
}
if (((explicit&XkbExplicitAutoRepeatMask)==0)&&(xkb->ctrls)) {
CARD8 old;
- old= xkb->ctrls->per_key_repeat[key/8];
+ old= BitIsOn(xkb->ctrls->per_key_repeat, key);
if (interps[0]->flags&XkbSI_AutoRepeat)
- xkb->ctrls->per_key_repeat[key/8]|= (1<<(key%8));
- else xkb->ctrls->per_key_repeat[key/8]&= ~(1<<(key%8));
- if (changes && (old!=xkb->ctrls->per_key_repeat[key/8]))
+ SetBit(xkb->ctrls->per_key_repeat, key);
+ else
+ ClearBit(xkb->ctrls->per_key_repeat, key);
+ if (changes && old != BitIsOn(xkb->ctrls->per_key_repeat, key))
changes->ctrls.changed_ctrls|= XkbPerKeyRepeatMask;
}
}
@@ -466,9 +467,9 @@ unsigned changed,tmp;
if ((!found)||(interps[0]==NULL)) {
if (((explicit&XkbExplicitAutoRepeatMask)==0)&&(xkb->ctrls)) {
CARD8 old;
- old= xkb->ctrls->per_key_repeat[key/8];
- xkb->ctrls->per_key_repeat[key/8]|= (1<<(key%8));
- if (changes && (old!=xkb->ctrls->per_key_repeat[key/8]))
+ old = BitIsOn(xkb->ctrls->per_key_repeat, key);
+ SetBit(xkb->ctrls->per_key_repeat, key);
+ if (changes && (old != BitIsOn(xkb->ctrls->per_key_repeat, key)))
changes->ctrls.changed_ctrls|= XkbPerKeyRepeatMask;
}
if (((explicit&XkbExplicitBehaviorMask)==0)&&
diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index 14dc784b8..3a56bea4c 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -342,15 +342,18 @@ CARD8 * repeat;
xkb= xkbi->desc;
repeat= xkb->ctrls->per_key_repeat;
+ /* before letting XKB do any changes, copy the current core values */
if (pXDev->kbdfeed)
memcpy(repeat,pXDev->kbdfeed->ctrl.autoRepeats,XkbPerKeyBitArraySize);
XkbUpdateDescActions(xkb,first,num,changes);
if ((pXDev->kbdfeed)&&
- (changes->ctrls.enabled_ctrls_changes&XkbPerKeyRepeatMask)) {
- memcpy(pXDev->kbdfeed->ctrl.autoRepeats,repeat, XkbPerKeyBitArraySize);
- (*pXDev->kbdfeed->CtrlProc)(pXDev, &pXDev->kbdfeed->ctrl);
+ (changes->ctrls.changed_ctrls&XkbPerKeyRepeatMask)) {
+ /* now copy the modified changes back to core */
+ memcpy(pXDev->kbdfeed->ctrl.autoRepeats,repeat, XkbPerKeyBitArraySize);
+ if (pXDev->kbdfeed->CtrlProc)
+ (*pXDev->kbdfeed->CtrlProc)(pXDev, &pXDev->kbdfeed->ctrl);
}
return;
}