X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Ffloating.c;h=ef500bf6d2e7f902134cded7990ff1e7e2115cd7;hb=2f992f5c0ed75452a61b19d6c118e5f5f3ba67e9;hp=4a2e904fd436c64c51f5db2b2dc2b9aed4478142;hpb=caa1ac1a9f6b99eb6a8fd303cf446fae8c9f7725;p=i3%2Fi3 diff --git a/src/floating.c b/src/floating.c index 4a2e904f..ef500bf6 100644 --- a/src/floating.c +++ b/src/floating.c @@ -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) {