diff options
Diffstat (limited to 'sway/commands/move.c')
-rw-r--r-- | sway/commands/move.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/sway/commands/move.c b/sway/commands/move.c index a38687c1..8d89f2ef 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c @@ -7,6 +7,7 @@ #include "sway/output.h" #include "sway/workspace.h" #include "list.h" +#include "stringop.h" struct cmd_results *cmd_move(int argc, char **argv) { struct cmd_results *error = NULL; @@ -59,18 +60,23 @@ struct cmd_results *cmd_move(int argc, char **argv) { return cmd_results_new(CMD_FAILURE, "move", "Can only move containers and views."); } - const char *ws_name = argv[3]; swayc_t *ws; - if (argc == 5 && strcasecmp(ws_name, "number") == 0) { + const char *num_name = NULL; + char *ws_name = NULL; + if (argc == 5 && strcasecmp(argv[3], "number") == 0) { // move "container to workspace number x" - ws_name = argv[4]; - ws = workspace_by_number(ws_name); + num_name = argv[4]; + ws = workspace_by_number(num_name); } else { + ws_name = join_args(argv + 3, argc - 3); ws = workspace_by_name(ws_name); } if (ws == NULL) { - ws = workspace_create(ws_name); + ws = workspace_create(ws_name ? ws_name : num_name); + } + if (ws_name) { + free(ws_name); } move_container_to(view, get_focused_container(ws)); } else if (strcasecmp(argv[1], "to") == 0 && strcasecmp(argv[2], "output") == 0) { @@ -161,11 +167,11 @@ struct cmd_results *cmd_move(int argc, char **argv) { wlc_view_get_visible_geometry(view->handle, &g); const struct wlc_size *size = wlc_output_get_resolution(output->handle); - struct wlc_point origin; - wlc_pointer_get_position(&origin); + double x_pos, y_pos; + wlc_pointer_get_position_v2(&x_pos, &y_pos); - int32_t x = origin.x - g.size.w / 2; - int32_t y = origin.y - g.size.h / 2; + int32_t x = x_pos - g.size.w / 2; + int32_t y = y_pos - g.size.h / 2; uint32_t w = size->w - g.size.w; uint32_t h = size->h - g.size.h; |