---
 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

Reply via email to