--- src/bindings.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/bindings.c b/src/bindings.c index 5e24725..0beca6d 100644 --- a/src/bindings.c +++ b/src/bindings.c @@ -262,6 +262,7 @@ weston_compositor_run_key_binding(struct weston_compositor *compositor, enum wl_keyboard_key_state state) { struct weston_binding *b, *tmp; + struct weston_surface *focus; if (state == WL_KEYBOARD_KEY_STATE_RELEASED) return; @@ -273,8 +274,17 @@ weston_compositor_run_key_binding(struct weston_compositor *compositor, wl_list_for_each_safe(b, tmp, &compositor->key_binding_list, link) { if (b->key == key && b->modifier == seat->modifier_state) { weston_key_binding_handler_t handler = b->handler; + focus = seat->keyboard->focus; handler(seat, time, key, b->data); + /* If the focus didn't change, and hence it didn't receive + * a wl_keyboard.enter event with the pressed keys, + * send a wl_keyboard.leave/enter pair */ + if (focus && seat->keyboard->focus == focus) { + weston_keyboard_set_focus(seat->keyboard, NULL); + weston_keyboard_set_focus(seat->keyboard, focus); + } + /* If this was a key binding and it didn't * install a keyboard grab, install one now to * swallow the key release. */ -- 2.1.3
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel