summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlbonn <bonnans.l@gmail.com>2019-08-20 00:01:17 +0200
committerDrew DeVault <sir@cmpwn.com>2019-08-27 09:37:10 +0900
commit2c2d6018bbee5d935889673c4cd84737b741807e (patch)
treee4a737d22ea5bfe48eaf7cae94ed4f620bf80aa6
parenta08081a4055d1487d4f60803b99b73cae234e9a2 (diff)
Allow moving a container hidden in scratchpad
(as i3 allows it) Just update the container's coordinates so that they will be applied at the next show.
-rw-r--r--sway/commands/move.c21
-rw-r--r--sway/tree/container.c3
2 files changed, 14 insertions, 10 deletions
diff --git a/sway/commands/move.c b/sway/commands/move.c
index 5779b431b..99215ffc3 100644
--- a/sway/commands/move.c
+++ b/sway/commands/move.c
@@ -675,10 +675,6 @@ static struct cmd_results *cmd_move_in_direction(
return cmd_results_new(CMD_FAILURE,
"Cannot move workspaces in a direction");
}
- if (container_is_scratchpad_hidden(container)) {
- return cmd_results_new(CMD_FAILURE,
- "Cannot move a hidden scratchpad container");
- }
if (container_is_floating(container)) {
if (container->fullscreen_mode) {
return cmd_results_new(CMD_FAILURE,
@@ -750,10 +746,6 @@ 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_is_scratchpad_hidden(container)) {
- return cmd_results_new(CMD_FAILURE,
- "Cannot move a hidden scratchpad container");
- }
if (!argc) {
return cmd_results_new(CMD_INVALID, expected_position_syntax);
@@ -795,6 +787,10 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) {
ly = root->y + (root->height - container->height) / 2;
} else {
struct sway_workspace *ws = container->workspace;
+ if (!ws) {
+ struct sway_seat *seat = config->handler_context.seat;
+ ws = seat_get_focused_workspace(seat);
+ }
lx = ws->x + (ws->width - container->width) / 2;
ly = ws->y + (ws->height - container->height) / 2;
}
@@ -828,8 +824,13 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) {
}
if (!absolute) {
- lx += container->workspace->x;
- ly += container->workspace->y;
+ struct sway_workspace *ws = container->workspace;
+ if (!ws) {
+ struct sway_seat *seat = config->handler_context.seat;
+ ws = seat_get_focused_workspace(seat);
+ }
+ lx += ws->x;
+ ly += ws->y;
}
container_floating_move_to(container, lx, ly);
return cmd_results_new(CMD_SUCCESS, NULL);
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 7068e166d..df0a3fea1 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -900,6 +900,9 @@ void container_floating_move_to(struct sway_container *con,
return;
}
container_floating_translate(con, lx - con->x, ly - con->y);
+ if (container_is_scratchpad_hidden(con)) {
+ return;
+ }
struct sway_workspace *old_workspace = con->workspace;
struct sway_output *new_output = container_floating_find_output(con);
if (!sway_assert(new_output, "Unable to find any output")) {