]> git.sur5r.net Git - i3/i3/commitdiff
Merge pull request #3184 from orestisf1993/issue-1341
authorIngo Bürk <admin@airblader.de>
Fri, 23 Mar 2018 18:17:12 +0000 (19:17 +0100)
committerGitHub <noreply@github.com>
Fri, 23 Mar 2018 18:17:12 +0000 (19:17 +0100)
floating_enable & floating_maybe_reassign_ws changes

1  2 
src/floating.c

diff --combined src/floating.c
index 2130d6732278fbea5e8570a465d101939ed65b14,13b30f162656d544878ead234af51b7199b2cde4..fc68df8e6b587482ab5043751a56bc711c23db85
@@@ -284,10 -284,7 +284,7 @@@ void floating_enable(Con *con, bool aut
  
      /* Sanity check: Are the coordinates on the appropriate output? If not, we
       * need to change them */
-     Output *current_output = get_output_containing(nc->rect.x +
-                                                        (nc->rect.width / 2),
-                                                    nc->rect.y + (nc->rect.height / 2));
+     Output *current_output = get_output_from_rect(nc->rect);
      Con *correct_output = con_get_output(ws);
      if (!current_output || current_output->con != correct_output) {
          DLOG("This floating window is on the wrong output, fixing coordinates (currently (%d, %d))\n",
  
          /* If moving from one output to another, keep the relative position
           * consistent (e.g. a centered dialog will remain centered). */
-         if (current_output)
+         if (current_output) {
              floating_fix_coordinates(nc, &current_output->con->rect, &correct_output->rect);
-         else {
-             nc->rect.x = correct_output->rect.x;
-             nc->rect.y = correct_output->rect.y;
+             /* Make sure that the result is in the correct output. */
+             current_output = get_output_from_rect(nc->rect);
+         }
+         if (!current_output || current_output->con != correct_output) {
+             floating_center(nc, ws->rect);
          }
      }
  
      if (set_focus)
          con_activate(con);
  
-     /* Check if we need to re-assign it to a different workspace because of its
-      * coordinates and exit if that was done successfully. */
-     if (floating_maybe_reassign_ws(nc)) {
-         goto done;
-     }
-     /* Sanitize coordinates: Check if they are on any output */
-     if (get_output_containing(nc->rect.x, nc->rect.y) != NULL) {
-         goto done;
-     }
-     ELOG("No output found at destination coordinates, centering floating window on current ws\n");
-     floating_center(nc, ws->rect);
- done:
      floating_set_hint_atom(nc, true);
      ipc_send_window_event("floating", con);
  }
@@@ -429,9 -413,7 +413,7 @@@ void floating_raise_con(Con *con) 
   *
   */
  bool floating_maybe_reassign_ws(Con *con) {
-     Output *output = get_output_containing(
-         con->rect.x + (con->rect.width / 2),
-         con->rect.y + (con->rect.height / 2));
+     Output *output = get_output_from_rect(con->rect);
  
      if (!output) {
          ELOG("No output found at destination coordinates?\n");
@@@ -864,12 -846,12 +846,12 @@@ drag_result_t drag_pointer(Con *con, co
   * outputs.
   *
   */
 -void floating_reposition(Con *con, Rect newrect) {
 +bool floating_reposition(Con *con, Rect newrect) {
      /* Sanity check: Are the new coordinates on any output? If not, we
       * ignore that request. */
-     if (!contained_by_output(newrect)) {
+     if (!output_containing_rect(newrect)) {
          ELOG("No output found at destination coordinates. Not repositioning.\n");
 -        return;
 +        return false;
      }
  
      con->rect = newrect;
          con->scratchpad_state = SCRATCHPAD_CHANGED;
  
      tree_render();
 +    return true;
  }
  
  /*