Added 'con_is_hidden' to check whether a given container is visible to the user assuming its workspace is visible.

This is useful for determining whether we want to set the _NET_WM_STATE_HIDDEN atom on the window.
This commit is contained in:
Ingo Bürk 2015-04-16 19:42:31 +02:00
parent 67ec2333ee
commit d12482e5fd
2 changed files with 31 additions and 1 deletions

View 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.
*

View File

@ -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).