Merge pull request #1597 from Airblader/bug-1187
Move urgency hint when moving container to another workspace
This commit is contained in:
commit
700dc4bfde
11
src/con.c
11
src/con.c
|
@ -736,6 +736,9 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
|
|||
}
|
||||
}
|
||||
|
||||
/* Save the urgency state so that we can restore it. */
|
||||
bool urgent = con->urgent;
|
||||
|
||||
/* Save the current workspace. So we can call workspace_show() by the end
|
||||
* of this function. */
|
||||
Con *current_ws = con_get_workspace(focused);
|
||||
|
@ -843,7 +846,7 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
|
|||
if (source_ws == current_ws)
|
||||
con_focus(con_descend_focused(focus_next));
|
||||
|
||||
/* If anything within the container is associated with a startup sequence,
|
||||
/* 9. If anything within the container is associated with a startup sequence,
|
||||
* delete it so child windows won't be created on the old workspace. */
|
||||
struct Startup_Sequence *sequence;
|
||||
xcb_get_property_cookie_t cookie;
|
||||
|
@ -877,6 +880,12 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
|
|||
|
||||
CALL(parent, on_remove_child);
|
||||
|
||||
/* 10. If the container was marked urgent, move the urgency hint. */
|
||||
if (urgent) {
|
||||
workspace_update_urgent_flag(source_ws);
|
||||
con_set_urgency(con, true);
|
||||
}
|
||||
|
||||
ipc_send_window_event("move", con);
|
||||
}
|
||||
|
||||
|
|
|
@ -307,6 +307,33 @@ for ($type = 1; $type <= 2; $type++) {
|
|||
my $ws = get_ws($tmp);
|
||||
ok(!$ws->{urgent}, 'urgent flag not set on workspace');
|
||||
|
||||
##############################################################################
|
||||
# Regression test for #1187: Urgency hint moves to new workspace when moving
|
||||
# a container to another workspace.
|
||||
##############################################################################
|
||||
|
||||
my $tmp_source = fresh_workspace;
|
||||
my $tmp_target = fresh_workspace;
|
||||
cmd 'workspace ' . $tmp_source;
|
||||
sync_with_i3;
|
||||
my $w1 = open_window;
|
||||
my $w2 = open_window;
|
||||
sync_with_i3;
|
||||
cmd '[id="' . $w1->id . '"] focus';
|
||||
sync_with_i3;
|
||||
cmd 'mark urgent_con';
|
||||
cmd '[id="' . $w2->id . '"] focus';
|
||||
set_urgency($w1, 1, $type);
|
||||
sync_with_i3;
|
||||
cmd '[con_mark="urgent_con"] move container to workspace ' . $tmp_target;
|
||||
sync_with_i3;
|
||||
my $source_ws = get_ws($tmp_source);
|
||||
my $target_ws = get_ws($tmp_target);
|
||||
ok(!$source_ws->{urgent}, 'Source workspace is no longer marked urgent');
|
||||
is($target_ws->{urgent}, 1, 'Target workspace is now marked urgent');
|
||||
|
||||
##############################################################################
|
||||
|
||||
exit_gracefully($pid);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue