Commit 5447ac45 authored by Andreas Wettstein's avatar Andreas Wettstein Committed by Adam Jackson

xkb: Suppress autorepeat for Set and Lock of Mods, Groups, and Controls

The autorepeat for these actions was not correctly implemented, as the key
repeat would be mistakenly interpreted as key releases.  Rather than fixing
this, this change simply disables autorepeat for Set/Lock actions, for two
reasons:

- Autorepeating Set/Lock keys make complicate the interactions of actions.

- Autorepeating Set/Lock keys have no apparent benefit, but hurt in the real
  world for layouts such as de(neo): Neo has a Level5 shift on the LSGT key,
  and a Level5 lock on Level5 of the same key.  This is unusable if LSGT
  autorepeats.  However, disabling autorepeat for key LSGT completely is not
  ideal for users that have a "usual" layout besides Neo, where LSGT carries
  symbols.
Signed-off-by: 's avatarAndreas Wettstein <wettstein509@solnet.ch>
Reviewed-by: 's avatarDaniel Stone <daniel@fooishbar.org>
parent fbac4517
......@@ -181,6 +181,7 @@ _XkbFilterSetState(XkbSrvInfoPtr xkbi,
XkbFilterPtr filter, unsigned keycode, XkbAction *pAction)
{
if (filter->keycode == 0) { /* initial press */
AccessXCancelRepeatKey(xkbi, keycode);
filter->keycode = keycode;
filter->active = 1;
filter->filterOthers = ((pAction->mods.mask & XkbSA_ClearLocks) != 0);
......@@ -354,6 +355,9 @@ static int
_XkbFilterLockState(XkbSrvInfoPtr xkbi,
XkbFilterPtr filter, unsigned keycode, XkbAction *pAction)
{
if (filter->keycode == 0) /* initial press */
AccessXCancelRepeatKey(xkbi, keycode);
if (pAction && (pAction->type == XkbSA_LockGroup)) {
if (pAction->group.flags & XkbSA_GroupAbsolute)
xkbi->state.locked_group = XkbSAGroup(&pAction->group);
......@@ -678,6 +682,7 @@ _XkbFilterControls(XkbSrvInfoPtr xkbi,
ctrls = xkbi->desc->ctrls;
old = *ctrls;
if (filter->keycode == 0) { /* initial press */
AccessXCancelRepeatKey(xkbi, keycode);
filter->keycode = keycode;
filter->active = 1;
filter->filterOthers = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment