From 9077831ed386c541a5d1bed84e128316517b719f Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Thu, 26 Mar 2009 23:00:26 +0100 Subject: [PATCH] Bugfix: When entering a stack window with the mouse, set the focus to the active client Fixes ticket #17 --- src/handlers.c | 11 +++++++++++ src/util.c | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/handlers.c b/src/handlers.c index 6ce736cc..c06f4853 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -154,6 +154,17 @@ int handle_enter_notify(void *ignored, xcb_connection_t *conn, xcb_enter_notify_ if (client == NULL) client = table_get(byChild, event->event); + /* Check for stack windows */ + if (client == NULL) { + struct Stack_Window *stack_win; + SLIST_FOREACH(stack_win, &stack_wins, stack_windows) + if (stack_win->window == event->event) { + client = stack_win->container->currently_focused; + break; + } + } + + /* If not, then the user moved his cursor to the root window. In that case, we adjust c_ws */ if (client == NULL) { LOG("Getting screen at %d x %d\n", event->root_x, event->root_y); diff --git a/src/util.c b/src/util.c index e8440b67..23bdc70c 100644 --- a/src/util.c +++ b/src/util.c @@ -298,7 +298,8 @@ void switch_layout_mode(xcb_connection_t *conn, Container *container, int mode) /* We want to know when… */ mask |= XCB_CW_EVENT_MASK; - values[1] = XCB_EVENT_MASK_BUTTON_PRESS | /* …mouse is pressed */ + values[1] = XCB_EVENT_MASK_ENTER_WINDOW | /* …mouse is moved into our window */ + XCB_EVENT_MASK_BUTTON_PRESS | /* …mouse is pressed */ XCB_EVENT_MASK_EXPOSURE; /* …our window needs to be redrawn */ struct Stack_Window *stack_win = &(container->stack_win);