]> git.sur5r.net Git - i3/i3/commitdiff
Merge branch 'master' into next
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 14 Sep 2011 22:00:02 +0000 (23:00 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 14 Sep 2011 22:00:02 +0000 (23:00 +0100)
1  2 
src/cmdparse.y
src/floating.c

diff --combined src/cmdparse.y
index 83abbbf21cec3546dd5f091f5add7d3518028c15,9ea82efd68c5f8e6a77a4998831b8a8b1a116213..174b5e05c7842490c2624588812ef049562eba96
@@@ -149,7 -149,6 +149,7 @@@ bool definitelyGreaterThan(float a, flo
  %token              TOK_ENABLE          "enable"
  %token              TOK_DISABLE         "disable"
  %token              TOK_WORKSPACE       "workspace"
 +%token              TOK_OUTPUT          "output"
  %token              TOK_TOGGLE          "toggle"
  %token              TOK_FOCUS           "focus"
  %token              TOK_MOVE            "move"
@@@ -267,9 -266,10 +267,9 @@@ matchend
  
                  }
              } else if (current_match.mark != NULL && current->con->mark != NULL &&
 -                    strcasecmp(current_match.mark, current->con->mark) == 0) {
 +                       regex_matches(current_match.mark, current->con->mark)) {
                  printf("match by mark\n");
 -                    TAILQ_INSERT_TAIL(&owindows, current, owindows);
 -
 +                TAILQ_INSERT_TAIL(&owindows, current, owindows);
              } else {
                  if (current->con->window == NULL)
                      continue;
@@@ -299,14 -299,12 +299,14 @@@ criterion
      TOK_CLASS '=' STR
      {
          printf("criteria: class = %s\n", $3);
 -        current_match.class = $3;
 +        current_match.class = regex_new($3);
 +        free($3);
      }
      | TOK_INSTANCE '=' STR
      {
          printf("criteria: instance = %s\n", $3);
 -        current_match.instance = $3;
 +        current_match.instance = regex_new($3);
 +        free($3);
      }
      | TOK_CON_ID '=' STR
      {
      | TOK_MARK '=' STR
      {
          printf("criteria: mark = %s\n", $3);
 -        current_match.mark = $3;
 +        current_match.mark = regex_new($3);
 +        free($3);
      }
      | TOK_TITLE '=' STR
      {
          printf("criteria: title = %s\n", $3);
 -        current_match.title = $3;
 +        current_match.title = regex_new($3);
 +        free($3);
      }
      ;
  
@@@ -703,56 -699,11 +703,56 @@@ move
  
          TAILQ_FOREACH(current, &owindows, owindows) {
              printf("matching: %p / %s\n", current->con, current->con->name);
-             con_move_to_workspace(current->con, ws, false);
+             con_move_to_workspace(current->con, ws, true, false);
          }
  
          tree_render();
      }
 +    | TOK_MOVE TOK_OUTPUT STR
 +    {
 +        owindow *current;
 +
 +        printf("should move window to output %s", $3);
 +
 +        HANDLE_EMPTY_MATCH;
 +
 +        /* get the output */
 +        Output *current_output = NULL;
 +        Output *output;
 +
 +        TAILQ_FOREACH(current, &owindows, owindows)
 +            current_output = get_output_containing(current->con->rect.x, current->con->rect.y);
 +
 +        assert(current_output != NULL);
 +
 +        if (strcasecmp($3, "up") == 0)
 +            output = get_output_next(D_UP, current_output);
 +        else if (strcasecmp($3, "down") == 0)
 +            output = get_output_next(D_DOWN, current_output);
 +        else if (strcasecmp($3, "left") == 0)
 +            output = get_output_next(D_LEFT, current_output);
 +        else if (strcasecmp($3, "right") == 0)
 +            output = get_output_next(D_RIGHT, current_output);
 +        else
 +            output = get_output_by_name($3);
 +        free($3);
 +
 +        if (!output)
 +            break;
 +
 +        /* get visible workspace on output */
 +        Con *ws = NULL;
 +        GREP_FIRST(ws, output_get_content(output->con), workspace_is_visible(child));
 +        if (!ws)
 +            break;
 +
 +        TAILQ_FOREACH(current, &owindows, owindows) {
 +            printf("matching: %p / %s\n", current->con, current->con->name);
 +            con_move_to_workspace(current->con, ws, false);
 +        }
 +
 +        tree_render();
 +    }
      ;
  
  append_layout:
@@@ -860,17 -811,6 +860,17 @@@ resize
              double percentage = 1.0 / children;
              LOG("default percentage = %f\n", percentage);
  
 +            orientation_t orientation = current->parent->orientation;
 +
 +            if ((orientation == HORIZ &&
 +                 (direction == TOK_UP || direction == TOK_DOWN)) ||
 +                (orientation == VERT &&
 +                 (direction == TOK_LEFT || direction == TOK_RIGHT))) {
 +                LOG("You cannot resize in that direction. Your focus is in a %s split container currently.\n",
 +                    (orientation == HORIZ ? "horizontal" : "vertical"));
 +                break;
 +            }
 +
              if (direction == TOK_UP || direction == TOK_LEFT) {
                  other = TAILQ_PREV(current, nodes_head, nodes);
              } else {
              }
              if (other == TAILQ_END(workspaces)) {
                  LOG("No other container in this direction found, cannot resize.\n");
 -                return 0;
 +                break;
              }
              LOG("other->percent = %f\n", other->percent);
              LOG("current->percent before = %f\n", current->percent);
diff --combined src/floating.c
index 7bbe93e44f32b01716e990be346b8875dbb19c69,0266dfa2d5438921fcc6f39d8910d226b44292c1..13c84e47890116a3749d0d5046403757c50bf117
@@@ -168,10 -168,6 +168,10 @@@ void floating_enable(Con *con, bool aut
      con->percent = 1.0;
      con->floating = FLOATING_USER_ON;
  
 +    /* 4: set the border style as specified with new_float */
 +    if (automatic)
 +        con->border_style = config.default_floating_border;
 +
      TAILQ_INSERT_TAIL(&(nc->nodes_head), con, nodes);
      TAILQ_INSERT_TAIL(&(nc->focus_head), con, focused);
  
@@@ -290,7 -286,7 +290,7 @@@ bool floating_maybe_reassign_ws(Con *co
      Con *content = output_get_content(output->con);
      Con *ws = TAILQ_FIRST(&(content->focus_head));
      DLOG("Moving con %p / %s to workspace %p / %s\n", con, con->name, ws, ws->name);
-     con_move_to_workspace(con, ws, true);
+     con_move_to_workspace(con, ws, false, true);
      con_focus(con_descend_focused(con));
      return true;
  }