Merge pull request #1597 from Airblader/bug-1187

Move urgency hint when moving container to another workspace
This commit is contained in:
Michael Stapelberg 2015-03-29 19:50:03 +02:00
commit 700dc4bfde
2 changed files with 37 additions and 1 deletions

View File

@ -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);
}

View File

@ -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);
}