diff options
author | Keith Packard <keithp@keithp.com> | 2011-01-20 21:16:24 -0800 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2011-01-20 21:16:24 -0800 |
commit | 57a1d9b85331f6fe19d5111f5163139572ffbf02 (patch) | |
tree | 63a2e42309afdaec073a00b01118363ec2fb8caa /xkb | |
parent | 24ce650cf4f0c6fa72faecd38c53d40703e6c959 (diff) | |
parent | 64237697994871adfcf4905b5784e75cd7281579 (diff) |
Merge remote branch 'whot/for-keith'
Diffstat (limited to 'xkb')
-rw-r--r-- | xkb/XKBMisc.c | 15 | ||||
-rw-r--r-- | xkb/xkbUtils.c | 9 |
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; } |