summaryrefslogtreecommitdiffstats
path: root/sway/workspace.c
diff options
context:
space:
mode:
authorLibravatar taiyu <taiyu.len@gmail.com>2015-09-01 09:02:26 -0700
committerLibravatar taiyu <taiyu.len@gmail.com>2015-09-01 09:02:26 -0700
commit972748e674918dea00533ef895748577dfb7759b (patch)
tree810e78292b6bf80337af70200f6ae55a2579e80d /sway/workspace.c
parentMerge pull request #159 from minus7/patch-1 (diff)
downloadsway-972748e674918dea00533ef895748577dfb7759b.tar.gz
sway-972748e674918dea00533ef895748577dfb7759b.tar.zst
sway-972748e674918dea00533ef895748577dfb7759b.zip
cleaned up leaky prev_workspace_name
Diffstat (limited to 'sway/workspace.c')
-rw-r--r--sway/workspace.c21
1 files changed, 13 insertions, 8 deletions
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
16char *prev_workspace_name = ""; 16char *prev_workspace_name = NULL;
17 17
18char *workspace_next_name(void) { 18char *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);