diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-08-06 12:46:28 +0100 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-08-06 14:17:58 +0100 |
commit | f7c21451dfa7c4ffdce1307b5856707a0ed40405 (patch) | |
tree | 3df803a95c0a13f4dc9b627db505ba50d5e6a6d2 | |
parent | commands: check for special workspaces in workspace & move commands (diff) | |
download | sway-f7c21451dfa7c4ffdce1307b5856707a0ed40405.tar.gz sway-f7c21451dfa7c4ffdce1307b5856707a0ed40405.tar.zst sway-f7c21451dfa7c4ffdce1307b5856707a0ed40405.zip |
commands: fix workspace edge cases
-rw-r--r-- | sway/commands/move.c | 9 | ||||
-rw-r--r-- | sway/commands/rename.c | 10 | ||||
-rw-r--r-- | sway/tree/view.c | 9 |
3 files changed, 25 insertions, 3 deletions
diff --git a/sway/commands/move.c b/sway/commands/move.c index 500151f7..af3dc538 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c | |||
@@ -107,8 +107,13 @@ static struct cmd_results *cmd_move_container(struct sway_container *current, | |||
107 | strcasecmp(argv[2], "current") == 0) { | 107 | strcasecmp(argv[2], "current") == 0) { |
108 | ws = workspace_by_name(argv[2]); | 108 | ws = workspace_by_name(argv[2]); |
109 | } else if (strcasecmp(argv[2], "back_and_forth") == 0) { | 109 | } else if (strcasecmp(argv[2], "back_and_forth") == 0) { |
110 | if (!(ws = workspace_by_name(argv[0])) && prev_workspace_name) { | 110 | if (!(ws = workspace_by_name(argv[2]))) { |
111 | ws = workspace_create(NULL, prev_workspace_name); | 111 | if (prev_workspace_name) { |
112 | ws = workspace_create(NULL, prev_workspace_name); | ||
113 | } else { | ||
114 | return cmd_results_new(CMD_FAILURE, "move", | ||
115 | "No workspace was previously active."); | ||
116 | } | ||
112 | } | 117 | } |
113 | } else { | 118 | } else { |
114 | char *ws_name = NULL; | 119 | char *ws_name = NULL; |
diff --git a/sway/commands/rename.c b/sway/commands/rename.c index a380ff9c..c6952bbb 100644 --- a/sway/commands/rename.c +++ b/sway/commands/rename.c | |||
@@ -61,6 +61,16 @@ struct cmd_results *cmd_rename(int argc, char **argv) { | |||
61 | } | 61 | } |
62 | 62 | ||
63 | char *new_name = join_args(argv + argn, argc - argn); | 63 | char *new_name = join_args(argv + argn, argc - argn); |
64 | if (strcasecmp(new_name, "next") == 0 || | ||
65 | strcasecmp(new_name, "prev") == 0 || | ||
66 | strcasecmp(new_name, "next_on_output") == 0 || | ||
67 | strcasecmp(new_name, "prev_on_output") == 0 || | ||
68 | strcasecmp(new_name, "back_and_forth") == 0 || | ||
69 | strcasecmp(new_name, "current") == 0) { | ||
70 | free(new_name); | ||
71 | return cmd_results_new(CMD_INVALID, "rename", | ||
72 | "Cannot use special workspace name '%s'", argv[argn]); | ||
73 | } | ||
64 | struct sway_container *tmp_workspace = workspace_by_name(new_name); | 74 | struct sway_container *tmp_workspace = workspace_by_name(new_name); |
65 | if (tmp_workspace) { | 75 | if (tmp_workspace) { |
66 | free(new_name); | 76 | free(new_name); |
diff --git a/sway/tree/view.c b/sway/tree/view.c index 48bd7ac0..faaa53a1 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c | |||
@@ -1,5 +1,6 @@ | |||
1 | #define _POSIX_C_SOURCE 200809L | 1 | #define _POSIX_C_SOURCE 200809L |
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | #include <strings.h> | ||
3 | #include <wayland-server.h> | 4 | #include <wayland-server.h> |
4 | #include <wlr/render/wlr_renderer.h> | 5 | #include <wlr/render/wlr_renderer.h> |
5 | #include <wlr/types/wlr_buffer.h> | 6 | #include <wlr/types/wlr_buffer.h> |
@@ -456,7 +457,13 @@ static struct sway_container *select_workspace(struct sway_view *view) { | |||
456 | if (criteria->type == CT_ASSIGN_WORKSPACE) { | 457 | if (criteria->type == CT_ASSIGN_WORKSPACE) { |
457 | ws = workspace_by_name(criteria->target); | 458 | ws = workspace_by_name(criteria->target); |
458 | if (!ws) { | 459 | if (!ws) { |
459 | ws = workspace_create(NULL, criteria->target); | 460 | if (strcasecmp(criteria->target, "back_and_forth") == 0) { |
461 | if (prev_workspace_name) { | ||
462 | ws = workspace_create(NULL, prev_workspace_name); | ||
463 | } | ||
464 | } else { | ||
465 | ws = workspace_create(NULL, criteria->target); | ||
466 | } | ||
460 | } | 467 | } |
461 | break; | 468 | break; |
462 | } else { | 469 | } else { |