diff options
author | taiyu <taiyu.len@gmail.com> | 2015-09-01 09:02:26 -0700 |
---|---|---|
committer | taiyu <taiyu.len@gmail.com> | 2015-09-01 09:02:26 -0700 |
commit | 972748e674918dea00533ef895748577dfb7759b (patch) | |
tree | 810e78292b6bf80337af70200f6ae55a2579e80d /sway | |
parent | Merge pull request #159 from minus7/patch-1 (diff) | |
download | sway-972748e674918dea00533ef895748577dfb7759b.tar.gz sway-972748e674918dea00533ef895748577dfb7759b.tar.zst sway-972748e674918dea00533ef895748577dfb7759b.zip |
cleaned up leaky prev_workspace_name
Diffstat (limited to 'sway')
-rw-r--r-- | sway/commands.c | 7 | ||||
-rw-r--r-- | sway/workspace.c | 21 |
2 files changed, 15 insertions, 13 deletions
diff --git a/sway/commands.c b/sway/commands.c index 177c54ab..6e74a442 100644 --- a/sway/commands.c +++ b/sway/commands.c | |||
@@ -822,11 +822,8 @@ static bool cmd_workspace(struct sway_config *config, int argc, char **argv) { | |||
822 | } | 822 | } |
823 | if (strcasecmp(argv[0], "back_and_forth") == 0) { | 823 | if (strcasecmp(argv[0], "back_and_forth") == 0) { |
824 | if (prev_workspace_name) { | 824 | if (prev_workspace_name) { |
825 | if (workspace_by_name(prev_workspace_name)) { | 825 | swayc_t *ws = workspace_by_name(prev_workspace_name); |
826 | workspace_switch(workspace_by_name(prev_workspace_name)); | 826 | workspace_switch(ws ? ws : workspace_create(prev_workspace_name)); |
827 | } else { | ||
828 | workspace_switch(workspace_create(prev_workspace_name)); | ||
829 | } | ||
830 | } | 827 | } |
831 | return true; | 828 | return true; |
832 | } | 829 | } |
diff --git a/sway/workspace.c b/sway/workspace.c index 866276d8..7eb422c4 100644 --- a/sway/workspace.c +++ b/sway/workspace.c | |||
@@ -13,7 +13,7 @@ | |||
13 | #include "focus.h" | 13 | #include "focus.h" |
14 | #include "util.h" | 14 | #include "util.h" |
15 | 15 | ||
16 | char *prev_workspace_name = ""; | 16 | char *prev_workspace_name = NULL; |
17 | 17 | ||
18 | char *workspace_next_name(void) { | 18 | char *workspace_next_name(void) { |
19 | sway_log(L_DEBUG, "Workspace: Generating new name"); | 19 | sway_log(L_DEBUG, "Workspace: Generating new name"); |
@@ -182,13 +182,18 @@ void workspace_switch(swayc_t *workspace) { | |||
182 | if (!workspace) { | 182 | if (!workspace) { |
183 | return; | 183 | return; |
184 | } | 184 | } |
185 | if (strcmp(prev_workspace_name, swayc_active_workspace()->name) != 0 && swayc_active_workspace() != workspace) { | 185 | swayc_t *active_ws = swayc_active_workspace(); |
186 | prev_workspace_name = malloc(strlen(swayc_active_workspace()->name) + 1); | 186 | if (config->auto_back_and_forth && active_ws == workspace && prev_workspace_name) { |
187 | strcpy(prev_workspace_name, swayc_active_workspace()->name); | 187 | swayc_t *new_ws = workspace_by_name(prev_workspace_name); |
188 | } else if (config->auto_back_and_forth && swayc_active_workspace() == workspace && strlen(prev_workspace_name) != 0) { | 188 | workspace = new_ws ? new_ws : workspace_create(prev_workspace_name); |
189 | workspace = workspace_by_name(prev_workspace_name) ? workspace_by_name(prev_workspace_name) : workspace_create(prev_workspace_name); | 189 | } |
190 | prev_workspace_name = malloc(strlen(swayc_active_workspace()->name) + 1); | 190 | |
191 | strcpy(prev_workspace_name, swayc_active_workspace()->name); | 191 | if (!prev_workspace_name |
192 | || (strcmp(prev_workspace_name, active_ws->name) | ||
193 | && active_ws != workspace)) { | ||
194 | free(prev_workspace_name); | ||
195 | prev_workspace_name = malloc(strlen(active_ws->name)+1); | ||
196 | strcpy(prev_workspace_name, active_ws->name); | ||
192 | } | 197 | } |
193 | 198 | ||
194 | sway_log(L_DEBUG, "Switching to workspace %p:%s", workspace, workspace->name); | 199 | sway_log(L_DEBUG, "Switching to workspace %p:%s", workspace, workspace->name); |