summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
Diffstat (limited to 'openbox')
-rw-r--r--openbox/client.c2
-rw-r--r--openbox/place.c2
-rw-r--r--openbox/stacking.c44
3 files changed, 26 insertions, 22 deletions
diff --git a/openbox/client.c b/openbox/client.c
index df658ccd..849d87e3 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -3341,7 +3341,7 @@ GSList *client_search_all_top_parents(ObClient *self)
for (it = self->group->members; it; it = g_slist_next(it)) {
ObClient *c = it->data;
- if (!c->transient_for)
+ if (!c->transient_for && client_normal(c))
ret = g_slist_prepend(ret, c);
}
diff --git a/openbox/place.c b/openbox/place.c
index 6d36e1bd..4717cbfc 100644
--- a/openbox/place.c
+++ b/openbox/place.c
@@ -429,7 +429,7 @@ static gboolean place_transient(ObClient *client, gint *x, gint *y)
gint l, r, t, b;
for (it = client->group->members; it; it = g_slist_next(it)) {
ObClient *m = it->data;
- if (!(m == client || m->transient_for)) {
+ if (!(m == client || m->transient_for) && client_normal(m)) {
if (first) {
l = RECT_LEFT(m->frame->area);
t = RECT_TOP(m->frame->area);
diff --git a/openbox/stacking.c b/openbox/stacking.c
index f3173c4d..d9aee952 100644
--- a/openbox/stacking.c
+++ b/openbox/stacking.c
@@ -176,19 +176,22 @@ static void restack_windows(ObClient *selected, gboolean raise)
this window, or it won't move */
top = client_search_all_top_parents(selected);
- /* go thru stacking list backwards so we can use g_slist_prepend */
- for (it = g_list_last(stacking_list); it && top;
- it = g_list_previous(it))
- if ((top_it = g_slist_find(top, it->data))) {
- top_reorder = g_slist_prepend(top_reorder, top_it->data);
- top = g_slist_delete_link(top, top_it);
- }
- g_assert(top == NULL);
+ /* that is, if it has any parents */
+ if (!(top->data == selected && top->next == NULL)) {
+ /* go thru stacking list backwards so we can use g_slist_prepend */
+ for (it = g_list_last(stacking_list); it && top;
+ it = g_list_previous(it))
+ if ((top_it = g_slist_find(top, it->data))) {
+ top_reorder = g_slist_prepend(top_reorder, top_it->data);
+ top = g_slist_delete_link(top, top_it);
+ }
+ g_assert(top == NULL);
- /* call restack for each of these to lower them */
- for (top_it = top_reorder; top_it; top_it = g_slist_next(top_it))
- restack_windows(top_it->data, raise);
- return;
+ /* call restack for each of these to lower them */
+ for (top_it = top_reorder; top_it; top_it = g_slist_next(top_it))
+ restack_windows(top_it->data, raise);
+ return;
+ }
}
/* remove first so we can't run into ourself */
@@ -387,15 +390,16 @@ void stacking_add_nonintrusive(ObWindow *win)
if (client->group)
for (it = stacking_list; !parent && it; it = g_list_next(it)) {
if ((sit = g_slist_find(client->group->members, it->data)))
- for (sit = client->group->members; !parent && sit;
- sit = g_slist_next(sit))
- {
- ObClient *c = sit->data;
- /* checking transient_for prevents infinate loops! */
- if (sit->data == it->data && !c->transient_for)
- parent = it->data;
+ for (sit = client->group->members; !parent && sit;
+ sit = g_slist_next(sit))
+ {
+ ObClient *c = sit->data;
+ /* checking transient_for prevents infinate loops!
+ */
+ if (sit->data == it->data && !c->transient_for)
+ parent = it->data;
+ }
}
- }
}
}