}
}
+ /* 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);
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;
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);
}
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);
}