aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/arrange.c
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-05-24 17:38:31 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-05-24 17:38:31 +1000
commitcdbae9a5e978b1e9d8c2f6f566e70102d3acb015 (patch)
treebab0763c04928aade918611b99bc01ea2f192481 /sway/tree/arrange.c
parentMerge pull request #2003 from emersion/fix-swaylock-hotplugging (diff)
downloadsway-cdbae9a5e978b1e9d8c2f6f566e70102d3acb015.tar.gz
sway-cdbae9a5e978b1e9d8c2f6f566e70102d3acb015.tar.zst
sway-cdbae9a5e978b1e9d8c2f6f566e70102d3acb015.zip
Fix nested tabs
Fixes #2023.
Diffstat (limited to 'sway/tree/arrange.c')
-rw-r--r--sway/tree/arrange.c29
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
180static void apply_tabbed_layout(struct sway_container *parent) { 180static 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
193static 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);