XWayland: Use FocusIn events for keyboard enter
wl_keyboard::enter is the equivalent of FocusIn + KeymapNotify: it notifies us that the surface/window has now received the focus, and provides us a set of keys which are currently down. We should use these keys to update the current state, but not to send any events to clients. Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
816015648f
commit
fee0827a9a
|
@ -432,7 +432,7 @@ keyboard_handle_enter(void *data, struct wl_keyboard *keyboard,
|
|||
|
||||
wl_array_copy(&xwl_seat->keys, keys);
|
||||
wl_array_for_each(k, &xwl_seat->keys)
|
||||
QueueKeyboardEvents(xwl_seat->keyboard, KeyPress, *k + 8);
|
||||
QueueKeyboardEvents(xwl_seat->keyboard, KeymapNotify, *k + 8);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -444,6 +444,10 @@ keyboard_handle_leave(void *data, struct wl_keyboard *keyboard,
|
|||
|
||||
xwl_seat->xwl_screen->serial = serial;
|
||||
|
||||
/* Unlike keymap_handle_enter above, this time we _do_ want to trigger
|
||||
* full release, as we don't know how long we'll be out of focus for.
|
||||
* Notify clients that the keys have been released, disable autorepeat,
|
||||
* etc. */
|
||||
wl_array_for_each(k, &xwl_seat->keys)
|
||||
QueueKeyboardEvents(xwl_seat->keyboard, KeyRelease, *k + 8);
|
||||
|
||||
|
|
Loading…
Reference in New Issue