diff options
Diffstat (limited to 'sway/commands/workspace.c')
-rw-r--r-- | sway/commands/workspace.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/sway/commands/workspace.c b/sway/commands/workspace.c index 9ff1c97d..79f3667a 100644 --- a/sway/commands/workspace.c +++ b/sway/commands/workspace.c | |||
@@ -182,21 +182,16 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { | |||
182 | "Can't switch workspaces while fullscreen global"); | 182 | "Can't switch workspaces while fullscreen global"); |
183 | } | 183 | } |
184 | 184 | ||
185 | bool no_auto_back_and_forth = false; | 185 | bool auto_back_and_forth = true; |
186 | while (strcasecmp(argv[0], "--no-auto-back-and-forth") == 0) { | 186 | while (strcasecmp(argv[0], "--no-auto-back-and-forth") == 0) { |
187 | no_auto_back_and_forth = true; | 187 | auto_back_and_forth = false; |
188 | if ((error = checkarg(--argc, "workspace", EXPECTED_AT_LEAST, 1))) { | 188 | if ((error = checkarg(--argc, "workspace", EXPECTED_AT_LEAST, 1))) { |
189 | return error; | 189 | return error; |
190 | } | 190 | } |
191 | ++argv; | 191 | ++argv; |
192 | } | 192 | } |
193 | 193 | ||
194 | bool create = argc > 1 && strcasecmp(argv[1], "--create") == 0; | ||
195 | struct sway_seat *seat = config->handler_context.seat; | 194 | struct sway_seat *seat = config->handler_context.seat; |
196 | struct sway_workspace *current = seat_get_focused_workspace(seat); | ||
197 | if (!current) { | ||
198 | return cmd_results_new(CMD_FAILURE, "No workspace to switch from"); | ||
199 | } | ||
200 | 195 | ||
201 | struct sway_workspace *ws = NULL; | 196 | struct sway_workspace *ws = NULL; |
202 | if (strcasecmp(argv[0], "number") == 0) { | 197 | if (strcasecmp(argv[0], "number") == 0) { |
@@ -213,14 +208,15 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { | |||
213 | ws = workspace_create(NULL, name); | 208 | ws = workspace_create(NULL, name); |
214 | free(name); | 209 | free(name); |
215 | } | 210 | } |
211 | if (ws && auto_back_and_forth) { | ||
212 | ws = workspace_auto_back_and_forth(ws); | ||
213 | } | ||
216 | } else if (strcasecmp(argv[0], "next") == 0 || | 214 | } else if (strcasecmp(argv[0], "next") == 0 || |
217 | strcasecmp(argv[0], "prev") == 0 || | 215 | strcasecmp(argv[0], "prev") == 0 || |
216 | strcasecmp(argv[0], "next_on_output") == 0 || | ||
217 | strcasecmp(argv[0], "prev_on_output") == 0 || | ||
218 | strcasecmp(argv[0], "current") == 0) { | 218 | strcasecmp(argv[0], "current") == 0) { |
219 | ws = workspace_by_name(argv[0]); | 219 | ws = workspace_by_name(argv[0]); |
220 | } else if (strcasecmp(argv[0], "next_on_output") == 0) { | ||
221 | ws = workspace_output_next(current, create); | ||
222 | } else if (strcasecmp(argv[0], "prev_on_output") == 0) { | ||
223 | ws = workspace_output_prev(current, create); | ||
224 | } else if (strcasecmp(argv[0], "back_and_forth") == 0) { | 220 | } else if (strcasecmp(argv[0], "back_and_forth") == 0) { |
225 | if (!seat->prev_workspace_name) { | 221 | if (!seat->prev_workspace_name) { |
226 | return cmd_results_new(CMD_INVALID, | 222 | return cmd_results_new(CMD_INVALID, |
@@ -235,11 +231,14 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { | |||
235 | ws = workspace_create(NULL, name); | 231 | ws = workspace_create(NULL, name); |
236 | } | 232 | } |
237 | free(name); | 233 | free(name); |
234 | if (ws && auto_back_and_forth) { | ||
235 | ws = workspace_auto_back_and_forth(ws); | ||
236 | } | ||
238 | } | 237 | } |
239 | if (!ws) { | 238 | if (!ws) { |
240 | return cmd_results_new(CMD_FAILURE, "No workspace to switch to"); | 239 | return cmd_results_new(CMD_FAILURE, "No workspace to switch to"); |
241 | } | 240 | } |
242 | workspace_switch(ws, no_auto_back_and_forth); | 241 | workspace_switch(ws); |
243 | seat_consider_warp_to_focus(seat); | 242 | seat_consider_warp_to_focus(seat); |
244 | } | 243 | } |
245 | return cmd_results_new(CMD_SUCCESS, NULL); | 244 | return cmd_results_new(CMD_SUCCESS, NULL); |