diff --git a/src/con.c b/src/con.c index 4d0c43e3..985d07da 100644 --- a/src/con.c +++ b/src/con.c @@ -243,13 +243,6 @@ void con_focus(Con *con) { workspace_update_urgent_flag(con_get_workspace(con)); ipc_send_window_event("urgent", con); } - - /* Focusing a container with a floating parent should raise it to the top. Since - * con_focus is called recursively for each parent we don't need to use - * con_inside_floating(). */ - if (con->type == CT_FLOATING_CON) { - floating_raise_con(con); - } } /* diff --git a/src/handlers.c b/src/handlers.c index e1671c3b..50fd8566 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -1207,6 +1207,14 @@ static bool handle_clientleader_change(void *data, xcb_connection_t *conn, uint8 */ static void handle_focus_in(xcb_focus_in_event_t *event) { DLOG("focus change in, for window 0x%08x\n", event->event); + + if (event->event == root) { + DLOG("Received focus in for root window, refocusing the focused window.\n"); + con_focus(focused); + focused_id = XCB_NONE; + x_push_changes(croot); + } + Con *con; if ((con = con_by_window_id(event->event)) == NULL || con->window == NULL) return;