diff options
author | Ryan Dwyer <RyanDwyer@users.noreply.github.com> | 2018-08-25 13:24:12 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-25 13:24:12 +1000 |
commit | 33d102265098f76517be7a6032d4f828c6bd32f4 (patch) | |
tree | f1ed7e866d4e34f5ef9b8f72ec8095369619aaa7 /sway/commands | |
parent | e86d99acd655815781cd2e23877ce58ab5b24826 (diff) | |
parent | 4b9ad9c2382db9b2a9a224e9ebc60b6298843aa9 (diff) | |
download | sway-33d102265098f76517be7a6032d4f828c6bd32f4.tar.xz |
Merge pull request #2495 from ianyfan/commands
commands: implement move absolute
Diffstat (limited to 'sway/commands')
-rw-r--r-- | sway/commands/move.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/sway/commands/move.c b/sway/commands/move.c index 4c0189ec..087423de 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c @@ -359,7 +359,8 @@ static struct cmd_results *move_in_direction(struct sway_container *container, static const char *expected_position_syntax = "Expected 'move [absolute] position <x> [px] <y> [px]' or " - "'move [absolute] position center|mouse'"; + "'move [absolute] position center' or " + "'move position cursor|mouse|pointer'"; static struct cmd_results *move_to_position(struct sway_container *container, int argc, char **argv) { @@ -371,7 +372,10 @@ static struct cmd_results *move_to_position(struct sway_container *container, if (!argc) { return cmd_results_new(CMD_FAILURE, "move", expected_position_syntax); } + + bool absolute = false; if (strcmp(argv[0], "absolute") == 0) { + absolute = true; --argc; ++argv; } @@ -385,7 +389,8 @@ static struct cmd_results *move_to_position(struct sway_container *container, if (!argc) { return cmd_results_new(CMD_FAILURE, "move", expected_position_syntax); } - if (strcmp(argv[0], "mouse") == 0) { + if (strcmp(argv[0], "cursor") == 0 || strcmp(argv[0], "mouse") == 0 || + strcmp(argv[0], "pointer") == 0) { struct sway_seat *seat = config->handler_context.seat; if (!seat->cursor) { return cmd_results_new(CMD_FAILURE, "move", "No cursor device"); @@ -395,9 +400,15 @@ static struct cmd_results *move_to_position(struct sway_container *container, container_floating_move_to(container, lx, ly); return cmd_results_new(CMD_SUCCESS, NULL, NULL); } else if (strcmp(argv[0], "center") == 0) { - struct sway_container *ws = container_parent(container, C_WORKSPACE); - double lx = ws->x + (ws->width - container->width) / 2; - double ly = ws->y + (ws->height - container->height) / 2; + double lx, ly; + if (absolute) { + lx = root_container.x + (root_container.width - container->width) / 2; + ly = root_container.y + (root_container.height - container->height) / 2; + } else { + struct sway_container *ws = container_parent(container, C_WORKSPACE); + lx = ws->x + (ws->width - container->width) / 2; + ly = ws->y + (ws->height - container->height) / 2; + } container_floating_move_to(container, lx, ly); return cmd_results_new(CMD_SUCCESS, NULL, NULL); } @@ -429,6 +440,11 @@ static struct cmd_results *move_to_position(struct sway_container *container, "Invalid position specified"); } + if (!absolute) { + struct sway_container *ws = container_parent(container, C_WORKSPACE); + lx += ws->x; + ly += ws->y; + } container_floating_move_to(container, lx, ly); return cmd_results_new(CMD_SUCCESS, NULL, NULL); } |