summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-04-23 23:46:13 +0000
committerDana Jansens <danakj@orodu.net>2007-04-23 23:46:13 +0000
commit1a005d729155015be614ccb86b596020c99ae712 (patch)
treecceca83363a10ac0b83b7993ce1b2f1cef718ffe /openbox
parentd0013c0861e29433de10a849032382534c8e1659 (diff)
place transients without a parent in the middle of the screen
dont use non-normal windows as parents
Diffstat (limited to 'openbox')
-rw-r--r--openbox/client.c3
-rw-r--r--openbox/place.c26
2 files changed, 23 insertions, 6 deletions
diff --git a/openbox/client.c b/openbox/client.c
index c184c891..ef948428 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -3225,7 +3225,8 @@ guint client_monitor(ObClient *self)
ObClient *client_search_top_parent(ObClient *self)
{
- while (self->transient_for && self->transient_for != OB_TRAN_GROUP)
+ while (self->transient_for && self->transient_for != OB_TRAN_GROUP &&
+ client_normal(self))
self = self->transient_for;
return self;
}
diff --git a/openbox/place.c b/openbox/place.c
index 4717cbfc..5614ecf3 100644
--- a/openbox/place.c
+++ b/openbox/place.c
@@ -418,11 +418,14 @@ static gboolean place_transient(ObClient *client, gint *x, gint *y)
if (client->transient_for != OB_TRAN_GROUP) {
ObClient *c = client;
ObClient *p = client->transient_for;
- *x = (p->frame->area.width - c->frame->area.width) / 2 +
- p->frame->area.x;
- *y = (p->frame->area.height - c->frame->area.height) / 2 +
- p->frame->area.y;
- return TRUE;
+
+ if (client_normal(p)) {
+ *x = (p->frame->area.width - c->frame->area.width) / 2 +
+ p->frame->area.x;
+ *y = (p->frame->area.height - c->frame->area.height) / 2 +
+ p->frame->area.y;
+ return TRUE;
+ }
} else {
GSList *it;
gboolean first = TRUE;
@@ -451,6 +454,19 @@ static gboolean place_transient(ObClient *client, gint *x, gint *y)
}
}
}
+
+ if (client->transient) {
+ Rect **areas;
+
+ areas = pick_head(client);
+
+ *x = (areas[0]->width - client->frame->area.width) / 2 + areas[0]->x;
+ *y = (areas[0]->height - client->frame->area.height) / 2 + areas[0]->y;
+
+ g_free(areas);
+ return TRUE;
+ }
+
return FALSE;
}