]> git.sur5r.net Git - i3/i3/commitdiff
Added 'con_is_hidden' to check whether a given container is visible to the user assum...
authorIngo Bürk <ingo.buerk@tngtech.com>
Thu, 16 Apr 2015 17:42:31 +0000 (19:42 +0200)
committerIngo Bürk <ingo.buerk@tngtech.com>
Tue, 21 Apr 2015 07:13:48 +0000 (09:13 +0200)
This is useful for determining whether we want to set the _NET_WM_STATE_HIDDEN atom on the window.

include/con.h
src/con.c

index 498fcbaa1af99f7ddd71c5608b925612ef861ff2..4813b77673a77c59a68034aff469f9b8db2ef45d 100644 (file)
@@ -42,12 +42,19 @@ bool con_is_leaf(Con *con);
  */
 bool con_has_managed_window(Con *con);
 
-/*
+/**
  * Returns true if a container should be considered split.
  *
  */
 bool con_is_split(Con *con);
 
+/**
+ * This will only return true for containers which have some parent with
+ * a tabbed / stacked parent of which they are not the currently focused child.
+ *
+ */
+bool con_is_hidden(Con *con);
+
 /**
  * Returns true if this node has regular or floating children.
  *
index aefe756ccddd831dc7c59a39393491e32d382ff5..05f608bd0e9299ce7e6e7adc7ae0af4581c1351f 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -260,6 +260,29 @@ bool con_is_split(Con *con) {
     }
 }
 
+/*
+ * This will only return true for containers which have some parent with
+ * a tabbed / stacked parent of which they are not the currently focused child.
+ *
+ */
+bool con_is_hidden(Con *con) {
+    Con *current = con;
+
+    /* ascend to the workspace level and memorize the highest-up container
+     * which is stacked or tabbed. */
+    while (current != NULL && current->type != CT_WORKSPACE) {
+        Con *parent = current->parent;
+        if (parent != NULL && (parent->layout == L_TABBED || parent->layout == L_STACKED)) {
+            if (TAILQ_FIRST(&(parent->focus_head)) != current)
+                return true;
+        }
+
+        current = parent;
+    }
+
+    return false;
+}
+
 /*
  * Returns true if this node accepts a window (if the node swallows windows,
  * it might already have swallowed enough and cannot hold any more).