]> git.sur5r.net Git - i3/i3/commitdiff
tree_move: Don't change focus order when swapping containers 3444/head
authorOrestis Floros <orestisf1993@gmail.com>
Tue, 9 Oct 2018 19:39:38 +0000 (22:39 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Tue, 9 Oct 2018 19:39:38 +0000 (22:39 +0300)
The call to ewmh_update_wm_desktop is removed since the change happens
under the same parent.

src/move.c
testcases/t/294-focus-order.t

index 58ce488d9d29e6a9f1b0541f6744f68e77150f9c..545a910af24b48188685ccaef23dda50eb0d2642 100644 (file)
@@ -298,9 +298,10 @@ void tree_move(Con *con, int direction) {
 
         /* easy case: the move is within this container */
         if (same_orientation == con->parent) {
-            DLOG("We are in the same container\n");
-            Con *swap;
-            if ((swap = (direction == D_LEFT || direction == D_UP ? TAILQ_PREV(con, nodes_head, nodes) : TAILQ_NEXT(con, nodes)))) {
+            Con *swap = (direction == D_LEFT || direction == D_UP)
+                            ? TAILQ_PREV(con, nodes_head, nodes)
+                            : TAILQ_NEXT(con, nodes);
+            if (swap) {
                 if (!con_is_leaf(swap)) {
                     DLOG("Moving into our bordering branch\n");
                     target = con_descend_direction(swap, direction);
@@ -312,17 +313,15 @@ void tree_move(Con *con, int direction) {
                     insert_con_into(con, target, position);
                     goto end;
                 }
-                if (direction == D_LEFT || direction == D_UP)
+
+                DLOG("Swapping with sibling.\n");
+                if (direction == D_LEFT || direction == D_UP) {
                     TAILQ_SWAP(swap, con, &(swap->parent->nodes_head), nodes);
-                else
+                } else {
                     TAILQ_SWAP(con, swap, &(swap->parent->nodes_head), nodes);
+                }
 
-                TAILQ_REMOVE(&(con->parent->focus_head), con, focused);
-                TAILQ_INSERT_HEAD(&(swap->parent->focus_head), con, focused);
-
-                DLOG("Swapped.\n");
                 ipc_send_window_event("move", con);
-                ewmh_update_wm_desktop();
                 return;
             }
 
index b5d3514abbfbdd7d2eb8ba0bb92cc7fa81489695..6b16540c85d68e17285969962687ac6ea17e8867 100644 (file)
@@ -125,6 +125,22 @@ $windows[0] = open_window;
 cmd '[id=' . $windows[3]->id . '] move right';
 confirm_focus('unfocused move from other output');
 
+#####################################################################
+# Test that moving an unfocused container inside its original parent
+# maintains the correct focus order.
+#####################################################################
+
+fresh_workspace;
+$windows[0] = open_window;
+$windows[1] = open_window;
+cmd 'split v';
+$windows[2] = open_window;
+$windows[3] = open_window;
+focus_windows;
+
+cmd '[id=' . $windows[2]->id . '] move up';
+confirm_focus('split-v + unfocused move inside parent');
+
 ######################################################################
 # Test that moving an unfocused container maintains the correct focus
 # order.