]> git.sur5r.net Git - i3/i3/commitdiff
Migrate the move command to use typed numbers.
authorIngo Bürk <ingo.buerk@tngtech.com>
Sun, 27 Sep 2015 14:59:36 +0000 (16:59 +0200)
committerIngo Bürk <ingo.buerk@tngtech.com>
Mon, 28 Sep 2015 12:21:44 +0000 (14:21 +0200)
include/commands.h
parser-specs/commands.spec
src/commands.c
testcases/t/187-commands-parser.t

index de6c499d3ef0d1edd2700fe7ae85cf3852a95159..ec94d37124df37317e097c8f5ad79460f058b346 100644 (file)
@@ -214,7 +214,7 @@ void cmd_sticky(I3_CMD, char *action);
  * Implementation of 'move <direction> [<pixels> [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] <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
index c751091430ef7ff81aa54346a3a32af99afe963d..b3b5e3385fafc09259463d85367a8d404dc0b10a 100644 (file)
@@ -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 <string>
 state MODE:
index ec657a645e6bbb0a4320c02f1de2c6f105c1ca33..be975f4cec5a6e2c7d2505f406148808fa312b7a 100644 (file)
@@ -1565,28 +1565,25 @@ void cmd_sticky(I3_CMD, char *action) {
  * Implementation of 'move <direction> [<pixels> [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] <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;
 
index 4f555b29d4a42c3d5fe3824abdb51ec8bd0f368b..a56d668ea56bca6c8ba51b668196bc05da9eb2dd 100644 (file)
@@ -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: <word>\n" .
+   "ERROR: Expected one of these tokens: <number>\n" .
    "ERROR: Your command: resize shrink width 10 px or\n" .
    "ERROR:                                           ",
    "error for resize command with incomplete 'or'-construction ok");