]> git.sur5r.net Git - i3/i3/blobdiff - src/floating.c
Merge branch 'master' into next
[i3/i3] / src / floating.c
index c0154acac47cf673810a4765459a48f9b8a69a6c..0bc5f6d65aac466814b08c62350c5c4d6fe18d3b 100644 (file)
@@ -40,7 +40,7 @@ void floating_enable(Con *con, bool automatic) {
     }
 
     /* 1: If the container is a workspace container, we need to create a new
-     * split-container with the same orientation and make that one floating. We
+     * split-container with the same layout and make that one floating. We
      * cannot touch the workspace container itself because floating containers
      * are children of the workspace. */
     if (con->type == CT_WORKSPACE) {
@@ -52,7 +52,7 @@ void floating_enable(Con *con, bool automatic) {
         /* TODO: refactor this with src/con.c:con_set_layout */
         Con *new = con_new(NULL, NULL);
         new->parent = con;
-        new->orientation = con->orientation;
+        new->layout = con->layout;
 
         /* since the new container will be set into floating mode directly
          * afterwards, we need to copy the workspace rect. */
@@ -97,8 +97,9 @@ void floating_enable(Con *con, bool automatic) {
      * otherwise. */
     Con *ws = con_get_workspace(con);
     nc->parent = ws;
-    nc->orientation = NO_ORIENTATION;
+    nc->split = true;
     nc->type = CT_FLOATING_CON;
+    nc->layout = L_SPLITH;
     /* We insert nc already, even though its rect is not yet calculated. This
      * is necessary because otherwise the workspace might be empty (and get
      * closed in tree_close()) even though it’s not. */
@@ -607,19 +608,24 @@ void floating_reposition(Con *con, Rect newrect) {
  *
  */
 void floating_fix_coordinates(Con *con, Rect *old_rect, Rect *new_rect) {
-    DLOG("Fixing coordinates of floating window %p\n", con);
+    DLOG("Fixing coordinates of floating window %p (rect (%d, %d), %d x %d)\n",
+         con, con->rect.x, con->rect.y, con->rect.width, con->rect.height);
+    DLOG("old_rect = (%d, %d), %d x %d\n",
+         old_rect->x, old_rect->y, old_rect->width, old_rect->height);
+    DLOG("new_rect = (%d, %d), %d x %d\n",
+         new_rect->x, new_rect->y, new_rect->width, new_rect->height);
     /* First we get the x/y coordinates relative to the x/y coordinates
      * of the output on which the window is on */
-    uint32_t rel_x = (con->rect.x - old_rect->x);
-    uint32_t rel_y = (con->rect.y - old_rect->y);
+    int32_t rel_x = (con->rect.x - old_rect->x);
+    int32_t rel_y = (con->rect.y - old_rect->y);
     /* Then we calculate a fraction, for example 0.63 for a window
      * which is at y = 1212 of a 1920 px high output */
     DLOG("rel_x = %d, rel_y = %d, fraction_x = %f, fraction_y = %f, output->w = %d, output->h = %d\n",
           rel_x, rel_y, (double)rel_x / old_rect->width, (double)rel_y / old_rect->height,
           old_rect->width, old_rect->height);
     /* Here we have to multiply at first. Or we will lose precision when not compiled with -msse2 */
-    con->rect.x = new_rect->x + (double)(rel_x * new_rect->width)  / old_rect->width;
-    con->rect.y = new_rect->y + (double)(rel_y * new_rect->height) / old_rect->height;
+    con->rect.x = (int32_t)new_rect->x + (double)(rel_x * (int32_t)new_rect->width)  / (int32_t)old_rect->width;
+    con->rect.y = (int32_t)new_rect->y + (double)(rel_y * (int32_t)new_rect->height) / (int32_t)old_rect->height;
     DLOG("Resulting coordinates: x = %d, y = %d\n", con->rect.x, con->rect.y);
 }