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

Ran Benita ran234 at gmail.com
Mon Feb 17 12:37:34 PST 2014


On Sat, Feb 15, 2014 at 05:36:51PM +0100, Andreas Wettstein wrote:
> 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.

I'm not too familiar with this and the other unreviewed patches, since
the stuff they touch were either removed or non-relevant for
libxkbcommon. So I'd need to find some time to figure them out.

In the mean time I hope someone will apply the rest. I've stolen some of
them for libxkbcommon, btw.

[also if you don't mind some more procedural comments: it helps if you
number the patches in the series, i.e. 1/5 v10 etc. That way we can refer
to them by number. Also a cover letter (PATCH 0) with some general blurb
is sometimes nice for comments on the entire series].

Thanks,
Ran

> Signed-off-by: Andreas Wettstein <wettstein509 at solnet.ch>
> ---
>  xkb/xkbActions.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
> index 1443498..da2e242 100644
> --- a/xkb/xkbActions.c
> +++ b/xkb/xkbActions.c
> @@ -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;
> -- 
> 1.8.3.1
> 


More information about the xorg-devel mailing list