[PATCH weston] input: don't send to clients key events eaten by bindings

Bill Spitzak spitzak at gmail.com
Fri Nov 21 12:10:46 PST 2014

On 11/21/2014 10:30 AM, Daniel Stone wrote:

> As in the first quoted section, I think it's not really reasonable to
> guard against the possibility of Mod+S taking a screenshot in the
> compositor, but the client having a shortcut for Mod+S+X. So I think we
> can take the easy way out of saying:
>    - for any hotkeys which are _solely_ combinations of modifiers and
> _not_ non-modifier keys (e.g. Exposay as it is today), then we only take
> action on release

I did think of one annoying conflict. My initial worry seems to be ok 
provided clients are well-behaved, but a more obscure problem with key 
release order does exist. I will try to describe it:

Imagine the server has Shift+Alt as a shortcut, and a client just has 
Shift as a shortcut. Both of these adhere to convention and do not 
trigger the event unless they see the *up* event.

Then the following happens:

1. Shift down -> sent to client
2. Alt down -> sent to client
3. Alt up -> triggers shortcut, send updated keymap to client
4. Shift up -> ??? this should not trigger event in client

At first I thought this might be a big problem, but I now think it is ok 
if the shift-up is sent to the client. This should not trigger the shift 
event because the Alt key was pressed and the client saw that. If the 
client did respond to the shift-up then it can be considered a client bug.

Then I realized that steps 3 and 4 above (the release events) could be 
swapped. This should still trigger the server shortcut and avoid 
triggering the client shortcut. This is only going to happen if 
everybody agrees on which up event is the triggering one. Unfortunately 
there are different implementations:

1. The first up is the trigger
2. The up corresponding to the last down is the trigger
3. The last up (ie when all modifiers are released) is the trigger
4. others I did not think of...

It looks like all wayland clients are going to have to agree on the 
rules. Otherwise the compositor will not "eat" the event that the client 
uses as the trigger. I get the impression that #2 is the only scheme 
that will work, but I have not been able to convince myself of this yet. 
It may also be useful to try existing software, especially on Windows 
where this use of modifiers as triggers is more common, to see if there 
is any standard.

More information about the wayland-devel mailing list