From d5c71231e5d17db9f33284f6c4f16aeb2e3ec2a6 Mon Sep 17 00:00:00 2001 From: Ragnar Groot Koerkamp Date: Fri, 18 Jun 2021 13:13:21 +0200 Subject: [PATCH] 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. --- sway/commands/workspace.c | 12 ++++++------ 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) { ws = workspace_create(NULL, name); free(name); } + if (ws && auto_back_and_forth) { + ws = workspace_auto_back_and_forth(ws); + } } else if (strcasecmp(argv[0], "next") == 0 || strcasecmp(argv[0], "prev") == 0 || strcasecmp(argv[0], "current") == 0) { ws = workspace_by_name(argv[0]); } else if (strcasecmp(argv[0], "next_on_output") == 0) { ws = workspace_output_next(current, create); - auto_back_and_forth = false; } else if (strcasecmp(argv[0], "prev_on_output") == 0) { ws = workspace_output_prev(current, create); - auto_back_and_forth = false; } else if (strcasecmp(argv[0], "back_and_forth") == 0) { if (!seat->prev_workspace_name) { return cmd_results_new(CMD_INVALID, @@ -227,20 +228,19 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { if (!(ws = workspace_by_name(argv[0]))) { ws = workspace_create(NULL, seat->prev_workspace_name); } - auto_back_and_forth = false; } else { char *name = join_args(argv, argc); if (!(ws = workspace_by_name(name))) { ws = workspace_create(NULL, name); } free(name); + if (ws && auto_back_and_forth) { + ws = workspace_auto_back_and_forth(ws); + } } if (!ws) { return cmd_results_new(CMD_FAILURE, "No workspace to switch to"); } - if(auto_back_and_forth){ - ws = workspace_auto_back_and_forth(ws); - } workspace_switch(ws); seat_consider_warp_to_focus(seat); } 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( active_ws = focus->sway_container->pending.workspace; } - if (config->auto_back_and_forth && active_ws && - active_ws == workspace && seat->prev_workspace_name) { + if (config->auto_back_and_forth && active_ws && active_ws == workspace && + seat->prev_workspace_name) { struct sway_workspace *new_ws = - workspace_by_name(seat->prev_workspace_name); - workspace = new_ws ? new_ws - : workspace_create(NULL, seat->prev_workspace_name); + workspace_by_name(seat->prev_workspace_name); + workspace = new_ws ? + new_ws : + workspace_create(NULL, seat->prev_workspace_name); } return workspace; }