Don't call con_focus in tree_move
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.
This commit is contained in:
parent
6222ab1084
commit
d66fa51f33
|
@ -374,11 +374,6 @@ void tree_move(Con *con, int direction) {
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
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 */
|
/* force re-painting the indicators */
|
||||||
FREE(con->deco_render_params);
|
FREE(con->deco_render_params);
|
||||||
|
|
||||||
|
|
|
@ -332,6 +332,34 @@ for ($type = 1; $type <= 2; $type++) {
|
||||||
ok(!$source_ws->{urgent}, 'Source workspace is no longer marked urgent');
|
ok(!$source_ws->{urgent}, 'Source workspace is no longer marked urgent');
|
||||||
is($target_ws->{urgent}, 1, 'Target workspace is now 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);
|
exit_gracefully($pid);
|
||||||
|
|
|
@ -106,4 +106,20 @@ $windows[0] = open_window;
|
||||||
cmd 'move left';
|
cmd 'move left';
|
||||||
confirm_focus('split-v + move');
|
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;
|
done_testing;
|
||||||
|
|
Loading…
Reference in New Issue