From ef17267d38d3b944c4647d44a5a2d5a346db27b5 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Fri, 22 Jun 2012 13:21:32 +0100 Subject: [PATCH] Run key bindings on keyboard focus in This is mainly for X11's benefit; the common case is using Logo+S to take a screenshot, where GNOME Shell has grabbed Logo, and replays the event down to the nested compositor after S is pressed. This means we get an enter event with both Logo and S down, and even if Shell delivers the key press event for S (which isn't mandatory, and not all window managers do), then we never run the binding since notify_key realises that S is already down and exits early. Signed-off-by: Daniel Stone --- src/compositor.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/compositor.c b/src/compositor.c index 52ef89ea..17e6735f 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -1937,6 +1937,12 @@ notify_keyboard_focus_in(struct wl_seat *seat, struct wl_array *keys, WL_KEYBOARD_KEY_STATE_PRESSED); } + /* Run key bindings after we've updated the state. */ + wl_array_for_each(k, &seat->keyboard->keys) { + weston_compositor_run_key_binding(compositor, ws, 0, *k, + WL_KEYBOARD_KEY_STATE_PRESSED); + } + surface = ws->saved_kbd_focus; if (surface) {