diff options
author | Ragnar Groot Koerkamp <ragnar.grootkoerkamp@gmail.com> | 2021-06-18 13:13:21 +0200 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2021-06-18 16:15:02 +0200 |
commit | d5c71231e5d17db9f33284f6c4f16aeb2e3ec2a6 (patch) | |
tree | 090844544be2b9e8cc0c1b918db04d1529ced4cb | |
parent | Move auto_back_and_forth logic out of workspace_switch (diff) | |
download | sway-d5c71231e5d17db9f33284f6c4f16aeb2e3ec2a6.tar.gz sway-d5c71231e5d17db9f33284f6c4f16aeb2e3ec2a6.tar.zst sway-d5c71231e5d17db9f33284f6c4f16aeb2e3ec2a6.zip |
Only call workspace_auto_back_and_forth when needed
Instead of disabling it for some workspace subcommands, this explicitly
calls it only in the 2 places it's actually needed: for switching to a
named or numbered workspace.
-rw-r--r-- | sway/commands/workspace.c | 12 | ||||
-rw-r--r-- | sway/tree/workspace.c | 11 |
2 files changed, 12 insertions, 11 deletions
diff --git a/sway/commands/workspace.c b/sway/commands/workspace.c index c253c75d..67db08ff 100644 --- a/sway/commands/workspace.c +++ b/sway/commands/workspace.c | |||
@@ -209,16 +209,17 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { | |||
209 | ws = workspace_create(NULL, name); | 209 | ws = workspace_create(NULL, name); |
210 | free(name); | 210 | free(name); |
211 | } | 211 | } |
212 | if (ws && auto_back_and_forth) { | ||
213 | ws = workspace_auto_back_and_forth(ws); | ||
214 | } | ||
212 | } else if (strcasecmp(argv[0], "next") == 0 || | 215 | } else if (strcasecmp(argv[0], "next") == 0 || |
213 | strcasecmp(argv[0], "prev") == 0 || | 216 | strcasecmp(argv[0], "prev") == 0 || |
214 | strcasecmp(argv[0], "current") == 0) { | 217 | strcasecmp(argv[0], "current") == 0) { |
215 | ws = workspace_by_name(argv[0]); | 218 | ws = workspace_by_name(argv[0]); |
216 | } else if (strcasecmp(argv[0], "next_on_output") == 0) { | 219 | } else if (strcasecmp(argv[0], "next_on_output") == 0) { |
217 | ws = workspace_output_next(current, create); | 220 | ws = workspace_output_next(current, create); |
218 | auto_back_and_forth = false; | ||
219 | } else if (strcasecmp(argv[0], "prev_on_output") == 0) { | 221 | } else if (strcasecmp(argv[0], "prev_on_output") == 0) { |
220 | ws = workspace_output_prev(current, create); | 222 | ws = workspace_output_prev(current, create); |
221 | auto_back_and_forth = false; | ||
222 | } else if (strcasecmp(argv[0], "back_and_forth") == 0) { | 223 | } else if (strcasecmp(argv[0], "back_and_forth") == 0) { |
223 | if (!seat->prev_workspace_name) { | 224 | if (!seat->prev_workspace_name) { |
224 | return cmd_results_new(CMD_INVALID, | 225 | return cmd_results_new(CMD_INVALID, |
@@ -227,20 +228,19 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { | |||
227 | if (!(ws = workspace_by_name(argv[0]))) { | 228 | if (!(ws = workspace_by_name(argv[0]))) { |
228 | ws = workspace_create(NULL, seat->prev_workspace_name); | 229 | ws = workspace_create(NULL, seat->prev_workspace_name); |
229 | } | 230 | } |
230 | auto_back_and_forth = false; | ||
231 | } else { | 231 | } else { |
232 | char *name = join_args(argv, argc); | 232 | char *name = join_args(argv, argc); |
233 | if (!(ws = workspace_by_name(name))) { | 233 | if (!(ws = workspace_by_name(name))) { |
234 | ws = workspace_create(NULL, name); | 234 | ws = workspace_create(NULL, name); |
235 | } | 235 | } |
236 | free(name); | 236 | free(name); |
237 | if (ws && auto_back_and_forth) { | ||
238 | ws = workspace_auto_back_and_forth(ws); | ||
239 | } | ||
237 | } | 240 | } |
238 | if (!ws) { | 241 | if (!ws) { |
239 | return cmd_results_new(CMD_FAILURE, "No workspace to switch to"); | 242 | return cmd_results_new(CMD_FAILURE, "No workspace to switch to"); |
240 | } | 243 | } |
241 | if(auto_back_and_forth){ | ||
242 | ws = workspace_auto_back_and_forth(ws); | ||
243 | } | ||
244 | workspace_switch(ws); | 244 | workspace_switch(ws); |
245 | seat_consider_warp_to_focus(seat); | 245 | seat_consider_warp_to_focus(seat); |
246 | } | 246 | } |
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c index 2dbd6346..7e98dc92 100644 --- a/sway/tree/workspace.c +++ b/sway/tree/workspace.c | |||
@@ -572,12 +572,13 @@ struct sway_workspace *workspace_auto_back_and_forth( | |||
572 | active_ws = focus->sway_container->pending.workspace; | 572 | active_ws = focus->sway_container->pending.workspace; |
573 | } | 573 | } |
574 | 574 | ||
575 | if (config->auto_back_and_forth && active_ws && | 575 | if (config->auto_back_and_forth && active_ws && active_ws == workspace && |
576 | active_ws == workspace && seat->prev_workspace_name) { | 576 | seat->prev_workspace_name) { |
577 | struct sway_workspace *new_ws = | 577 | struct sway_workspace *new_ws = |
578 | workspace_by_name(seat->prev_workspace_name); | 578 | workspace_by_name(seat->prev_workspace_name); |
579 | workspace = new_ws ? new_ws | 579 | workspace = new_ws ? |
580 | : workspace_create(NULL, seat->prev_workspace_name); | 580 | new_ws : |
581 | workspace_create(NULL, seat->prev_workspace_name); | ||
581 | } | 582 | } |
582 | return workspace; | 583 | return workspace; |
583 | } | 584 | } |