protocol: add wl_keyboard.frame event
When a client loses keyboard focus, it might make fundamental changes to its state. For example:
- It might re-render its interface to indicate that it is inactive.
- It might disable text-input.
However, sometimes the compositor might want to remove and restore the keyboard focus atomically. For example, when moving the keyboard focus between different surfaces of a client or when changing the keyboard layout or when changing the set of pressed keys.
Some compositors work around this by sending keymap events while the wl_keyboard has an active surface. But it is unspecified how this affects the logical wl_keyboard state.
This MR adds a new wl_keyboard.frame event that allows the compositor to group events that are logically part of a single user interaction. For example
- leave followed by modifiers
- leave followed by enter