From 9978050d91f93f116427df3335afd49fd0637488 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ingo=20B=C3=BCrk?= Date: Sun, 27 Sep 2015 16:59:36 +0200 Subject: [PATCH] Migrate the move command to use typed numbers. --- include/commands.h | 4 ++-- parser-specs/commands.spec | 14 +++++++------- src/commands.c | 25 ++++++++++--------------- testcases/t/187-commands-parser.t | 2 +- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/include/commands.h b/include/commands.h index de6c499d..ec94d371 100644 --- a/include/commands.h +++ b/include/commands.h @@ -214,7 +214,7 @@ void cmd_sticky(I3_CMD, char *action); * Implementation of 'move [ [px]]'. * */ -void cmd_move_direction(I3_CMD, char *direction, char *move_px); +void cmd_move_direction(I3_CMD, char *direction, long move_px); /** * Implementation of 'layout default|stacked|stacking|tabbed|splitv|splith'. @@ -262,7 +262,7 @@ void cmd_focus_output(I3_CMD, char *name); * Implementation of 'move [window|container] [to] [absolute] position [px] [px] * */ -void cmd_move_window_to_position(I3_CMD, char *method, char *x, char *y); +void cmd_move_window_to_position(I3_CMD, char *method, long x, long y); /** * Implementation of 'move [window|container] [to] [absolute] position center diff --git a/parser-specs/commands.spec b/parser-specs/commands.spec index c7510914..b3b5e338 100644 --- a/parser-specs/commands.spec +++ b/parser-specs/commands.spec @@ -320,16 +320,16 @@ state MOVE: -> MOVE_TO_ABSOLUTE_POSITION state MOVE_DIRECTION: - pixels = word + pixels = number -> MOVE_DIRECTION_PX end - -> call cmd_move_direction($direction, "10") + -> call cmd_move_direction($direction, 10) state MOVE_DIRECTION_PX: 'px' - -> call cmd_move_direction($direction, $pixels) + -> call cmd_move_direction($direction, &pixels) end - -> call cmd_move_direction($direction, $pixels) + -> call cmd_move_direction($direction, &pixels) state MOVE_WORKSPACE: 'to ' @@ -370,18 +370,18 @@ state MOVE_TO_POSITION: -> call cmd_move_window_to_center($method) 'mouse', 'cursor', 'pointer' -> call cmd_move_window_to_mouse() - coord_x = word + coord_x = number -> MOVE_TO_POSITION_X state MOVE_TO_POSITION_X: 'px' -> - coord_y = word + coord_y = number -> MOVE_TO_POSITION_Y state MOVE_TO_POSITION_Y: 'px', end - -> call cmd_move_window_to_position($method, $coord_x, $coord_y) + -> call cmd_move_window_to_position($method, &coord_x, &coord_y) # mode state MODE: diff --git a/src/commands.c b/src/commands.c index ec657a64..be975f4c 100644 --- a/src/commands.c +++ b/src/commands.c @@ -1565,28 +1565,25 @@ void cmd_sticky(I3_CMD, char *action) { * Implementation of 'move [ [px]]'. * */ -void cmd_move_direction(I3_CMD, char *direction, char *move_px) { - // TODO: We could either handle this in the parser itself as a separate token (and make the stack typed) or we need a better way to convert a string to a number with error checking - int px = atoi(move_px); - +void cmd_move_direction(I3_CMD, char *direction, long move_px) { owindow *current; HANDLE_EMPTY_MATCH; Con *initially_focused = focused; TAILQ_FOREACH(current, &owindows, owindows) { - DLOG("moving in direction %s, px %s\n", direction, move_px); + DLOG("moving in direction %s, px %ld\n", direction, move_px); if (con_is_floating(current->con)) { - DLOG("floating move with %d pixels\n", px); + DLOG("floating move with %ld pixels\n", move_px); Rect newrect = current->con->parent->rect; if (strcmp(direction, "left") == 0) { - newrect.x -= px; + newrect.x -= move_px; } else if (strcmp(direction, "right") == 0) { - newrect.x += px; + newrect.x += move_px; } else if (strcmp(direction, "up") == 0) { - newrect.y -= px; + newrect.y -= move_px; } else if (strcmp(direction, "down") == 0) { - newrect.y += px; + newrect.y += move_px; } floating_reposition(current->con->parent, newrect); } else { @@ -1788,9 +1785,7 @@ void cmd_focus_output(I3_CMD, char *name) { * Implementation of 'move [window|container] [to] [absolute] position [px] [px] * */ -void cmd_move_window_to_position(I3_CMD, char *method, char *cx, char *cy) { - int x = atoi(cx); - int y = atoi(cy); +void cmd_move_window_to_position(I3_CMD, char *method, long x, long y) { bool has_error = false; owindow *current; @@ -1812,7 +1807,7 @@ void cmd_move_window_to_position(I3_CMD, char *method, char *cx, char *cy) { current->con->parent->rect.x = x; current->con->parent->rect.y = y; - DLOG("moving to absolute position %d %d\n", x, y); + DLOG("moving to absolute position %ld %ld\n", x, y); floating_maybe_reassign_ws(current->con->parent); cmd_output->needs_tree_render = true; } @@ -1820,7 +1815,7 @@ void cmd_move_window_to_position(I3_CMD, char *method, char *cx, char *cy) { if (strcmp(method, "position") == 0) { Rect newrect = current->con->parent->rect; - DLOG("moving to position %d %d\n", x, y); + DLOG("moving to position %ld %ld\n", x, y); newrect.x = x; newrect.y = y; diff --git a/testcases/t/187-commands-parser.t b/testcases/t/187-commands-parser.t index 4f555b29..a56d668e 100644 --- a/testcases/t/187-commands-parser.t +++ b/testcases/t/187-commands-parser.t @@ -216,7 +216,7 @@ is(parser_calls('workspace "foo\\\\\\"bar"'), ################################################################################ is(parser_calls("resize shrink width 10 px or"), - "ERROR: Expected one of these tokens: \n" . + "ERROR: Expected one of these tokens: \n" . "ERROR: Your command: resize shrink width 10 px or\n" . "ERROR: ", "error for resize command with incomplete 'or'-construction ok"); -- 2.39.2