]> git.sur5r.net Git - i3/i3/blobdiff - src/floating.c
Merge branch 'master' into next
[i3/i3] / src / floating.c
index c69a51bd4ae248afa2bd3c1ef151ac7442109af6..2fbf66bcfb275dc4a7f1a030e1e5d71589ea6fef 100644 (file)
@@ -19,6 +19,11 @@ extern xcb_connection_t *conn;
 void floating_enable(Con *con, bool automatic) {
     bool set_focus = (con == focused);
 
+    if (con->parent && con->parent->type == CT_DOCKAREA) {
+        LOG("Container is a dock window, not enabling floating mode.\n");
+        return;
+    }
+
     if (con_is_floating(con)) {
         LOG("Container is already in floating mode, not doing anything.\n");
         return;
@@ -98,6 +103,7 @@ void floating_enable(Con *con, bool automatic) {
     int deco_height = config.font.height + 5;
 
     DLOG("Original rect: (%d, %d) with %d x %d\n", con->rect.x, con->rect.y, con->rect.width, con->rect.height);
+    DLOG("Geometry = (%d, %d) with %d x %d\n", con->geometry.x, con->geometry.y, con->geometry.width, con->geometry.height);
     Rect zero = { 0, 0, 0, 0 };
     nc->rect = con->geometry;
     /* If the geometry was not set (split containers), we need to determine a
@@ -117,9 +123,13 @@ void floating_enable(Con *con, bool automatic) {
     /* add pixels for the decoration */
     /* TODO: don’t add them when the user automatically puts new windows into
      * 1pixel/borderless mode */
-    nc->rect.height += deco_height + 4;
+    nc->rect.height += deco_height + 2;
     nc->rect.width += 4;
 
+    /* Honor the X11 border */
+    nc->rect.height += con->border_width * 2;
+    nc->rect.width += con->border_width * 2;
+
     /* Some clients (like GIMP’s color picker window) get mapped
      * to (0, 0), so we push them to a reasonable position
      * (centered over their leader) */
@@ -285,7 +295,7 @@ bool floating_maybe_reassign_ws(Con *con) {
     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;
 }