From: Dana Jansens Date: Mon, 23 Apr 2007 23:46:13 +0000 (+0000) Subject: place transients without a parent in the middle of the screen X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=1a005d729155015be614ccb86b596020c99ae712;p=chaz%2Fopenbox place transients without a parent in the middle of the screen dont use non-normal windows as parents --- 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; }