]> git.sur5r.net Git - i3/i3/blobdiff - src/floating.c
Added config key for default orientation of containers (new_container_orientation...
[i3/i3] / src / floating.c
index 4a2e904fd436c64c51f5db2b2dc2b9aed4478142..ef500bf6d2e7f902134cded7990ff1e7e2115cd7 100644 (file)
@@ -94,11 +94,22 @@ void floating_enable(Con *con, bool automatic) {
     free(name);
 
     /* find the height for the decorations */
-    i3Font *font = load_font(conn, config.font);
-    int deco_height = font->height + 5;
+    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);
+    Rect zero = { 0, 0, 0, 0 };
     nc->rect = con->geometry;
+    /* If the geometry was not set (split containers), we need to determine a
+     * sensible one by combining the geometry of all children */
+    if (memcmp(&(nc->rect), &zero, sizeof(Rect)) == 0) {
+        DLOG("Geometry not set, combining children\n");
+        Con *child;
+        TAILQ_FOREACH(child, &(con->nodes_head), nodes) {
+            DLOG("child geometry: %d x %d\n", child->geometry.width, child->geometry.height);
+            nc->rect.width += child->geometry.width;
+            nc->rect.height = max(nc->rect.height, child->geometry.height);
+        }
+    }
     /* Raise the width/height to at least 75x50 (minimum size for windows) */
     nc->rect.width = max(nc->rect.width, 75);
     nc->rect.height = max(nc->rect.height, 50);
@@ -164,7 +175,8 @@ void floating_disable(Con *con, bool automatic) {
 
     /* 3: re-attach to the parent of the currently focused con on the workspace
      * this floating con was on */
-    Con *focused = con_descend_focused(con_get_workspace(con));
+    Con *focused = con_descend_tiling_focused(con_get_workspace(con));
+
     /* if there is no other container on this workspace, focused will be the
      * workspace itself */
     if (focused->type == CT_WORKSPACE)
@@ -272,12 +284,10 @@ DRAGGING_CB(resize_window_callback) {
         dest_height = old_rect->height - (new_y - event->root_y);
     else dest_height = old_rect->height + (new_y - event->root_y);
 
-    /* TODO: minimum window size */
-#if 0
     /* Obey minimum window size */
-    dest_width = max(dest_width, client_min_width(client));
-    dest_height = max(dest_height, client_min_height(client));
-#endif
+    Rect minimum = con_minimum_size(con);
+    dest_width = max(dest_width, minimum.width);
+    dest_height = max(dest_height, minimum.height);
 
     /* User wants to keep proportions, so we may have to adjust our values */
     if (params->proportional) {