diff options
author | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-05-24 17:38:31 +1000 |
---|---|---|
committer | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-05-24 17:38:31 +1000 |
commit | cdbae9a5e978b1e9d8c2f6f566e70102d3acb015 (patch) | |
tree | bab0763c04928aade918611b99bc01ea2f192481 | |
parent | Merge pull request #2003 from emersion/fix-swaylock-hotplugging (diff) | |
download | sway-cdbae9a5e978b1e9d8c2f6f566e70102d3acb015.tar.gz sway-cdbae9a5e978b1e9d8c2f6f566e70102d3acb015.tar.zst sway-cdbae9a5e978b1e9d8c2f6f566e70102d3acb015.zip |
Fix nested tabs
Fixes #2023.
-rw-r--r-- | sway/tree/arrange.c | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/sway/tree/arrange.c b/sway/tree/arrange.c index 37f4a066..bdef56ea 100644 --- a/sway/tree/arrange.c +++ b/sway/tree/arrange.c | |||
@@ -177,29 +177,24 @@ static void apply_vert_layout(struct sway_container *parent) { | |||
177 | child->height = parent->y + parent_offset + parent_height - child->y; | 177 | child->height = parent->y + parent_offset + parent_height - child->y; |
178 | } | 178 | } |
179 | 179 | ||
180 | static void apply_tabbed_layout(struct sway_container *parent) { | 180 | static void apply_tabbed_or_stacked_layout(struct sway_container *parent) { |
181 | if (!parent->children->length) { | 181 | if (!parent->children->length) { |
182 | return; | 182 | return; |
183 | } | 183 | } |
184 | for (int i = 0; i < parent->children->length; ++i) { | 184 | size_t parent_offset = 0; |
185 | struct sway_container *child = parent->children->items[i]; | 185 | if (parent->parent->layout == L_TABBED) { |
186 | child->x = parent->x; | 186 | parent_offset = container_titlebar_height(); |
187 | child->y = parent->y; | 187 | } else if (parent->parent->layout == L_STACKED) { |
188 | child->width = parent->width; | 188 | parent_offset = |
189 | child->height = parent->height; | 189 | container_titlebar_height() * parent->parent->children->length; |
190 | } | ||
191 | } | ||
192 | |||
193 | static void apply_stacked_layout(struct sway_container *parent) { | ||
194 | if (!parent->children->length) { | ||
195 | return; | ||
196 | } | 190 | } |
191 | size_t parent_height = parent->height - parent_offset; | ||
197 | for (int i = 0; i < parent->children->length; ++i) { | 192 | for (int i = 0; i < parent->children->length; ++i) { |
198 | struct sway_container *child = parent->children->items[i]; | 193 | struct sway_container *child = parent->children->items[i]; |
199 | child->x = parent->x; | 194 | child->x = parent->x; |
200 | child->y = parent->y; | 195 | child->y = parent->y + parent_offset; |
201 | child->width = parent->width; | 196 | child->width = parent->width; |
202 | child->height = parent->height; | 197 | child->height = parent_height; |
203 | } | 198 | } |
204 | } | 199 | } |
205 | 200 | ||
@@ -234,10 +229,8 @@ void arrange_children_of(struct sway_container *parent) { | |||
234 | apply_vert_layout(parent); | 229 | apply_vert_layout(parent); |
235 | break; | 230 | break; |
236 | case L_TABBED: | 231 | case L_TABBED: |
237 | apply_tabbed_layout(parent); | ||
238 | break; | ||
239 | case L_STACKED: | 232 | case L_STACKED: |
240 | apply_stacked_layout(parent); | 233 | apply_tabbed_or_stacked_layout(parent); |
241 | break; | 234 | break; |
242 | default: | 235 | default: |
243 | wlr_log(L_DEBUG, "TODO: arrange layout type %d", parent->layout); | 236 | wlr_log(L_DEBUG, "TODO: arrange layout type %d", parent->layout); |