]> git.sur5r.net Git - i3/i3/commitdiff
Don't call con_focus in tree_move 2975/head
authorOrestis Floros <orestisf1993@gmail.com>
Fri, 22 Sep 2017 01:48:32 +0000 (04:48 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Thu, 15 Mar 2018 17:57:30 +0000 (19:57 +0200)
Fixes:
- Issue where moving an urgent (unfocused) window resets it's urgency
hint.
- Moving an unfocused container to a new parent should not move it to
the top of the focus stack.

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

index 72cf9d6190645ca9c19b58265f34922ebf26affe..a60a27caae947e9c97a92b6135e686aaf807752b 100644 (file)
@@ -374,11 +374,6 @@ void tree_move(Con *con, int direction) {
     }
 
 end:
-    /* We need to call con_focus() to fix the focus stack "above" the container
-     * we just inserted the focused container into (otherwise, the parent
-     * container(s) would still point to the old container(s)). */
-    con_focus(con);
-
     /* force re-painting the indicators */
     FREE(con->deco_render_params);
 
index 1e2644ad96ed334437042825293b50df54660753..0de90193c60cb0ae1935a342e940b88bc172d456 100644 (file)
@@ -332,6 +332,34 @@ for ($type = 1; $type <= 2; $type++) {
     ok(!$source_ws->{urgent}, 'Source workspace is no longer marked urgent');
     is($target_ws->{urgent}, 1, 'Target workspace is now marked urgent');
 
+##############################################################################
+# Test that moving an unfocused container doesn't reset its urgency hint.
+##############################################################################
+    $tmp = fresh_workspace;
+    $win1 = open_window;
+    $win2 = open_window;
+    cmd 'split v';
+    $win3 = open_window;
+    set_urgency($win1, 1, $type);
+    sync_with_i3;
+
+    my $win1_info;
+
+    @content = @{get_ws_content($tmp)};
+    $win1_info = first { $_->{window} == $win1->id } @content;
+    ok($win1_info->{urgent}, 'win1 window is marked urgent');
+
+    cmd '[id="' . $win1->id . '"] move right';
+    cmd '[id="' . $win1->id . '"] move right';
+    @content = @{get_ws_content($tmp)};
+    $win1_info = first { $_->{window} == $win1->id } @content;
+    ok($win1_info->{urgent}, 'win1 window is still marked urgent after moving');
+
+    cmd '[id="' . $win1->id . '"] focus';
+    @content = @{get_ws_content($tmp)};
+    $win1_info = first { $_->{window} == $win1->id } @content;
+    ok(!$win1_info->{urgent}, 'win1 window is not marked urgent after focusing');
+
 ##############################################################################
 
     exit_gracefully($pid);
index 41c0bf07009f43ed073a9b466b28526503110e0c..0f11624134eda4f77aca53e729e6b2211885f5ab 100644 (file)
@@ -106,4 +106,20 @@ $windows[0] = open_window;
 cmd 'move left';
 confirm_focus('split-v + move');
 
+######################################################################
+# Test that moving an unfocused container maintains the correct focus
+# order.
+# Layout: H [ A V1 [ B C D ] ]
+######################################################################
+
+fresh_workspace;
+$windows[3] = open_window;
+$windows[2] = open_window;
+cmd 'split v';
+$windows[1] = open_window;
+$windows[0] = open_window;
+
+cmd '[id=' . $windows[3]->id . '] move right';
+confirm_focus('split-v + unfocused move');
+
 done_testing;