diff options
Diffstat (limited to 'sway/tree/arrange.c')
-rw-r--r-- | sway/tree/arrange.c | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/sway/tree/arrange.c b/sway/tree/arrange.c index 8aebc0cc..bdef56ea 100644 --- a/sway/tree/arrange.c +++ b/sway/tree/arrange.c @@ -86,12 +86,14 @@ static void apply_horiz_layout(struct sway_container *parent) { if (!num_children) { return; } - size_t parent_height = parent->height; size_t parent_offset = 0; if (parent->parent->layout == L_TABBED) { - parent_offset = config->border_thickness * 2 + config->font_height; - parent_height -= parent_offset; + parent_offset = container_titlebar_height(); + } else if (parent->parent->layout == L_STACKED) { + parent_offset = + container_titlebar_height() * parent->parent->children->length; } + size_t parent_height = parent->height - parent_offset; // Calculate total width of children double total_width = 0; @@ -132,12 +134,14 @@ static void apply_vert_layout(struct sway_container *parent) { if (!num_children) { return; } - size_t parent_height = parent->height; size_t parent_offset = 0; if (parent->parent->layout == L_TABBED) { - parent_offset = config->border_thickness * 2 + config->font_height; - parent_height -= parent_offset; + parent_offset = container_titlebar_height(); + } else if (parent->parent->layout == L_STACKED) { + parent_offset = + container_titlebar_height() * parent->parent->children->length; } + size_t parent_height = parent->height - parent_offset; // Calculate total height of children double total_height = 0; @@ -173,16 +177,24 @@ static void apply_vert_layout(struct sway_container *parent) { child->height = parent->y + parent_offset + parent_height - child->y; } -static void apply_tabbed_layout(struct sway_container *parent) { +static void apply_tabbed_or_stacked_layout(struct sway_container *parent) { if (!parent->children->length) { return; } + size_t parent_offset = 0; + if (parent->parent->layout == L_TABBED) { + parent_offset = container_titlebar_height(); + } else if (parent->parent->layout == L_STACKED) { + parent_offset = + container_titlebar_height() * parent->parent->children->length; + } + size_t parent_height = parent->height - parent_offset; for (int i = 0; i < parent->children->length; ++i) { struct sway_container *child = parent->children->items[i]; child->x = parent->x; - child->y = parent->y; + child->y = parent->y + parent_offset; child->width = parent->width; - child->height = parent->height; + child->height = parent_height; } } @@ -217,7 +229,8 @@ void arrange_children_of(struct sway_container *parent) { apply_vert_layout(parent); break; case L_TABBED: - apply_tabbed_layout(parent); + case L_STACKED: + apply_tabbed_or_stacked_layout(parent); break; default: wlr_log(L_DEBUG, "TODO: arrange layout type %d", parent->layout); |