From 5776edcc84d15a9a6dbdafc7fe7f3177004fee86 Mon Sep 17 00:00:00 2001 From: Michael Hofmann Date: Sat, 7 Mar 2015 00:14:47 +0100 Subject: [PATCH 1/2] Test: startup workspaces updating on rename. --- testcases/t/175-startup-notification.t | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/testcases/t/175-startup-notification.t b/testcases/t/175-startup-notification.t index 9f0c046a..4ca41799 100644 --- a/testcases/t/175-startup-notification.t +++ b/testcases/t/175-startup-notification.t @@ -142,12 +142,17 @@ is_num_children($first_ws, 2, 'two containers on the first workspace'); complete_startup(); sync_with_i3; +# even when renaming the workspace, windows should end up on the correct one +cmd "rename workspace $first_ws to temp"; + # Startup has completed but the 30-second deletion time hasn't elapsed, # so this window should still go on the leader's initial workspace. $win = open_window({ dont_map => 1, client_leader => $leader }); $win->map; sync_with_i3; +cmd "rename workspace temp to $first_ws"; + is_num_children($first_ws, 3, 'three containers on the first workspace'); # Switch to the first workspace and move the focused window to the From 44f748a663fc0ae96b2a750a804cf470dcad1675 Mon Sep 17 00:00:00 2001 From: Michael Hofmann Date: Sat, 7 Mar 2015 00:13:54 +0100 Subject: [PATCH 2/2] Rename workspaces in startup sequences. When renaming workspaces, any workspace names in pending startup sequences also need to be renamed. --- include/startup.h | 6 ++++++ src/commands.c | 2 ++ src/startup.c | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/include/startup.h b/include/startup.h index 2f28baa7..cb784913 100644 --- a/include/startup.h +++ b/include/startup.h @@ -44,6 +44,12 @@ void startup_sequence_delete(struct Startup_Sequence *sequence); */ void startup_monitor_event(SnMonitorEvent *event, void *userdata); +/** + * Renames workspaces that are mentioned in the startup sequences. + * + */ +void startup_sequence_rename_workspace(char *old_name, char *new_name); + /** * Gets the stored startup sequence for the _NET_STARTUP_ID of a given window. * diff --git a/src/commands.c b/src/commands.c index 92203e39..d3e2a6e3 100644 --- a/src/commands.c +++ b/src/commands.c @@ -2044,6 +2044,8 @@ void cmd_rename_workspace(I3_CMD, char *old_name, char *new_name) { ewmh_update_desktop_names(); ewmh_update_desktop_viewport(); ewmh_update_current_desktop(); + + startup_sequence_rename_workspace(old_name, new_name); } /* diff --git a/src/startup.c b/src/startup.c index ebe8c1d9..aa347bd7 100644 --- a/src/startup.c +++ b/src/startup.c @@ -257,6 +257,22 @@ void startup_monitor_event(SnMonitorEvent *event, void *userdata) { } } +/** + * Renames workspaces that are mentioned in the startup sequences. + * + */ +void startup_sequence_rename_workspace(char *old_name, char *new_name) { + struct Startup_Sequence *current; + TAILQ_FOREACH(current, &startup_sequences, sequences) { + if (strcmp(current->workspace, old_name) != 0) + continue; + DLOG("Renaming workspace \"%s\" to \"%s\" in startup sequence %s.\n", + old_name, new_name, current->id); + free(current->workspace); + current->workspace = sstrdup(new_name); + } +} + /** * Gets the stored startup sequence for the _NET_STARTUP_ID of a given window. *