+ }
+ else if (c == client)
+ found = TRUE;
+ }
+ return occluded;
+}
+
+/*! Returns TRUE if client is occludes the sibling. If sibling is NULL it tries
+ against all other clients.
+*/
+static gboolean stacking_occludes(ObClient *client, ObClient *sibling)
+{
+ GList *it;
+ gboolean occludes = FALSE;
+ gboolean found = FALSE;
+
+ /* no need for any looping in this case */
+ if (sibling && client->layer != sibling->layer)
+ return occludes;
+
+ for (it = stacking_list; it; it = g_list_next(it))
+ if (WINDOW_IS_CLIENT(it->data)) {
+ ObClient *c = it->data;
+ if (found) {
+ if (RECT_INTERSECTS_RECT(c->frame->area, client->frame->area))
+ {
+ if (sibling != NULL) {
+ if (c == sibling) {
+ occludes = TRUE;
+ break;
+ }
+ }
+ else if (c->layer == client->layer) {
+ occludes = TRUE;
+ break;
+ }
+ else if (c->layer < client->layer)
+ break; /* we past its layer */