place transients without a parent in the middle of the screen dont use non-normal windows as parents
Dana Jansens danakj@orodu.net
2 files changed,
23 insertions(+),
6 deletions(-)
M
openbox/client.c
→
openbox/client.c
@@ -3225,7 +3225,8 @@ }
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; }
M
openbox/place.c
→
openbox/place.c
@@ -418,11 +418,14 @@ if (client->transient_for) {
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 @@ return TRUE;
} } } + + 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; }