]> git.sur5r.net Git - i3/i3/commitdiff
cmd_rename_workspace: correct order of events 3388/head
authorOrestis Floros <orestisf1993@gmail.com>
Thu, 6 Sep 2018 00:11:47 +0000 (03:11 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Thu, 6 Sep 2018 00:42:07 +0000 (03:42 +0300)
1. Rename happens
2. Workspace is moved because of assignments
3. Workspace closes because it is empty (#3248)

Fixes #3248.

src/commands.c
testcases/t/522-rename-assigned-workspace.t

index 0343f9dc3525f9a68366f1b0839fde9a764a48f5..33743848dc4d5f67e14228553d6c41c9194b86fd 100644 (file)
@@ -2002,6 +2002,7 @@ void cmd_rename_workspace(I3_CMD, const char *old_name, const char *new_name) {
     Con *parent = workspace->parent;
     con_detach(workspace);
     con_attach(workspace, parent, false);
+    ipc_send_workspace_event("rename", workspace, NULL);
 
     /* Move the workspace to the correct output if it has an assignment */
     struct Workspace_Assignment *assignment = NULL;
@@ -2046,7 +2047,6 @@ void cmd_rename_workspace(I3_CMD, const char *old_name, const char *new_name) {
     cmd_output->needs_tree_render = true;
     ysuccess(true);
 
-    ipc_send_workspace_event("rename", workspace, NULL);
     ewmh_update_desktop_names();
     ewmh_update_desktop_viewport();
     ewmh_update_current_desktop();
index af3b3262a4dad041accdf75b49d3bc478ee3a5af..9897e4ee263860be01b52f8f185496282e3228ed 100644 (file)
@@ -93,6 +93,21 @@ cmd 'rename workspace 5 to 2';
 is(get_output_for_workspace('2'), 'fake-1',
     'Renaming an unfocused workspace, triggering an assignment to the output which holds the currently focused empty workspace should result in the original workspace replacing the empty one');
 
+##########################################################################
+# Renaming an unfocused empty workspace, triggering an assignment to the
+# output which holds the currently focused non-empty workspace should
+# close the empty workspace and not crash i3.
+# See issue #3248.
+##########################################################################
+
+cmd 'workspace 1';
+cmd 'workspace 2';
+open_window;
+cmd 'rename workspace 1 to baz';
+is(get_output_for_workspace('baz'), '',
+    'Renaming an unfocused empty workspace, triggering an assignment to the output which holds the currently focused non-empty workspace should close the empty workspace and not crash i3');
+kill_all_windows;
+
 ##########################################################################
 # Renaming a workspace with multiple assignments, where the first output
 # doesn't exist.