diff options
-rw-r--r-- | sway/commands/floating.c | 5 | ||||
-rw-r--r-- | sway/commands/move.c | 9 | ||||
-rw-r--r-- | sway/commands/resize.c | 5 | ||||
-rw-r--r-- | sway/commands/split.c | 4 | ||||
-rw-r--r-- | sway/commands/sticky.c | 3 | ||||
-rw-r--r-- | sway/tree/root.c | 3 |
6 files changed, 28 insertions, 1 deletions
diff --git a/sway/commands/floating.c b/sway/commands/floating.c index e95f3185..57bf0017 100644 --- a/sway/commands/floating.c +++ b/sway/commands/floating.c @@ -40,6 +40,11 @@ struct cmd_results *cmd_floating(int argc, char **argv) { } } + if (container->scratchpad && !container->workspace) { + return cmd_results_new(CMD_FAILURE, + "Cannot set floating status on a hidden scratchpad container"); + } + bool wants_floating = parse_boolean(argv[0], container_is_floating(container)); diff --git a/sway/commands/move.c b/sway/commands/move.c index d4fe2f01..d4b55922 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c @@ -653,6 +653,10 @@ static struct cmd_results *cmd_move_in_direction( return cmd_results_new(CMD_FAILURE, "Cannot move workspaces in a direction"); } + if (container->scratchpad && !container->workspace) { + return cmd_results_new(CMD_FAILURE, + "Cannot move a hidden scratchpad container"); + } if (container_is_floating(container)) { if (container->is_fullscreen) { return cmd_results_new(CMD_FAILURE, @@ -720,6 +724,11 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) { return cmd_results_new(CMD_FAILURE, "Only floating containers " "can be moved to an absolute position"); } + if (container->scratchpad && !container->workspace) { + return cmd_results_new(CMD_FAILURE, + "Cannot move a hidden scratchpad container"); + } + if (!argc) { return cmd_results_new(CMD_FAILURE, expected_position_syntax); } diff --git a/sway/commands/resize.c b/sway/commands/resize.c index 6cdeb90c..d840f26c 100644 --- a/sway/commands/resize.c +++ b/sway/commands/resize.c @@ -589,6 +589,11 @@ struct cmd_results *cmd_resize(int argc, char **argv) { if (!current) { return cmd_results_new(CMD_INVALID, "Cannot resize nothing"); } + if (current->scratchpad && !current->workspace) { + return cmd_results_new(CMD_FAILURE, + "Cannot resize a hidden scratchpad container"); + } + struct cmd_results *error; if ((error = checkarg(argc, "resize", EXPECTED_AT_LEAST, 2))) { diff --git a/sway/commands/split.c b/sway/commands/split.c index ed370d26..06b7df5e 100644 --- a/sway/commands/split.c +++ b/sway/commands/split.c @@ -13,6 +13,10 @@ static struct cmd_results *do_split(int layout) { struct sway_container *con = config->handler_context.container; struct sway_workspace *ws = config->handler_context.workspace; if (con) { + if (con->scratchpad && !con->workspace) { + return cmd_results_new(CMD_FAILURE, + "Cannot split a hidden scratchpad container"); + } container_split(con, layout); } else { workspace_split(ws, layout); diff --git a/sway/commands/sticky.c b/sway/commands/sticky.c index 6cac8a45..15b726cc 100644 --- a/sway/commands/sticky.c +++ b/sway/commands/sticky.c @@ -29,7 +29,8 @@ struct cmd_results *cmd_sticky(int argc, char **argv) { container->is_sticky = parse_boolean(argv[0], container->is_sticky); - if (container->is_sticky) { + if (container->is_sticky && + (!container->scratchpad || container->workspace)) { // move container to active workspace struct sway_workspace *active_workspace = output_get_active_workspace(container->workspace->output); diff --git a/sway/tree/root.c b/sway/tree/root.c index e1624863..e5df8dd1 100644 --- a/sway/tree/root.c +++ b/sway/tree/root.c @@ -87,6 +87,9 @@ void root_scratchpad_remove_container(struct sway_container *con) { if (!sway_assert(con->scratchpad, "Container is not in scratchpad")) { return; } + if (!con->workspace) { + root_scratchpad_show(con); + } con->scratchpad = false; int index = list_find(root->scratchpad, con); if (index != -1) { |