]> git.sur5r.net Git - i3/i3/commitdiff
Fix regression with moving floating windows 3486/head
authorOrestis Floros <orestisf1993@gmail.com>
Mon, 29 Oct 2018 13:46:28 +0000 (15:46 +0200)
committerOrestis Floros <orestisf1993@gmail.com>
Mon, 29 Oct 2018 13:46:28 +0000 (15:46 +0200)
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.

src/con.c

index c9ff44a2cd484913065b8993b105375de9125e6c..21d2f097af4d667c7ccd0b94afa7d25b209e1cb7 100644 (file)
--- 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));
         }
     }