From: Orestis Floros Date: Mon, 29 Oct 2018 13:46:28 +0000 (+0200) Subject: Fix regression with moving floating windows X-Git-Tag: 4.16~3^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=64c493ef1fb10a42652a836122e1a34ade17bc02;p=i3%2Fi3 Fix regression with moving floating windows This fixes a regression introduced in 6d983b5. Consider 2 outputs: fake-0: workspace '1' fake-1: workspaces '2','3' Workspace 1 focused, workspace 2 visible. Open a floating window in 1 and move it to 3. Now, the floating window appears in workspace 2 and disappears once focus is switched to that workspace. Instead of focusing 'old_focus' which might refer to a container in a different output, we should restore focus by focusing the previously focused workspace of the output. --- diff --git a/src/con.c b/src/con.c index c9ff44a2..21d2f097 100644 --- a/src/con.c +++ b/src/con.c @@ -1234,14 +1234,12 @@ static bool _con_move_to_con(Con *con, Con *target, bool behind_focused, bool fi Con *old_focus = focused; con_activate(con_descend_focused(con)); - /* Restore focus if the output's focused workspace has changed. */ - if (con_get_workspace(focused) != old_focus_ws) { - con_focus(old_focus); - } - - /* Restore focus to the currently focused container. */ if (old_focus_ws == current_ws && old_focus->type != CT_WORKSPACE) { + /* Restore focus to the currently focused container. */ con_activate(old_focus); + } else if (con_get_workspace(focused) != old_focus_ws) { + /* Restore focus if the output's focused workspace has changed. */ + con_focus(con_descend_focused(old_focus_ws)); } }