aboutsummaryrefslogtreecommitdiff
path: root/sway/tree/container.c
diff options
context:
space:
mode:
authorTudor Brindus <me@tbrindus.ca>2020-06-04 14:28:43 -0400
committerSimon Ser <contact@emersion.fr>2020-06-07 10:46:14 +0200
commit53dc83fb68d2da079f2595994af41cc6b9acbeea (patch)
tree7532ea7ae132fcb592779b69606a54c6205dbbd9 /sway/tree/container.c
parentd7900c6e5e82406c1ed6a6df2ff3d1896149deff (diff)
tree/container: introduce `container_toplevel_ancestor` helper
This allows us to not have to explicitly write the same while loop everywhere.
Diffstat (limited to 'sway/tree/container.c')
-rw-r--r--sway/tree/container.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 3e99aa75..2fbd0d38 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -1108,11 +1108,17 @@ void container_set_fullscreen(struct sway_container *con,
}
}
-bool container_is_floating_or_child(struct sway_container *container) {
+struct sway_container *container_toplevel_ancestor(
+ struct sway_container *container) {
while (container->parent) {
container = container->parent;
}
- return container_is_floating(container);
+
+ return container;
+}
+
+bool container_is_floating_or_child(struct sway_container *container) {
+ return container_is_floating(container_toplevel_ancestor(container));
}
bool container_is_fullscreen_or_child(struct sway_container *container) {
@@ -1537,10 +1543,7 @@ void container_update_marks_textures(struct sway_container *con) {
void container_raise_floating(struct sway_container *con) {
// Bring container to front by putting it at the end of the floating list.
- struct sway_container *floater = con;
- while (floater->parent) {
- floater = floater->parent;
- }
+ struct sway_container *floater = container_toplevel_ancestor(con);
if (container_is_floating(floater) && floater->workspace) {
list_move_to_end(floater->workspace->floating, floater);
node_set_dirty(&floater->workspace->node);
@@ -1552,8 +1555,6 @@ bool container_is_scratchpad_hidden(struct sway_container *con) {
}
bool container_is_scratchpad_hidden_or_child(struct sway_container *con) {
- while (con->parent) {
- con = con->parent;
- }
+ con = container_toplevel_ancestor(con);
return con->scratchpad && !con->workspace;
}