place transients without a parent in the middle of the screen

dont use non-normal windows as parents
This commit is contained in:
Dana Jansens 2007-04-23 23:46:13 +00:00
parent d0013c0861
commit 1a005d7291
2 changed files with 23 additions and 6 deletions

View file

@ -3225,7 +3225,8 @@ guint client_monitor(ObClient *self)
ObClient *client_search_top_parent(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; self = self->transient_for;
return self; return self;
} }

View file

@ -418,11 +418,14 @@ static gboolean place_transient(ObClient *client, gint *x, gint *y)
if (client->transient_for != OB_TRAN_GROUP) { if (client->transient_for != OB_TRAN_GROUP) {
ObClient *c = client; ObClient *c = client;
ObClient *p = client->transient_for; ObClient *p = client->transient_for;
*x = (p->frame->area.width - c->frame->area.width) / 2 +
p->frame->area.x; if (client_normal(p)) {
*y = (p->frame->area.height - c->frame->area.height) / 2 + *x = (p->frame->area.width - c->frame->area.width) / 2 +
p->frame->area.y; p->frame->area.x;
return TRUE; *y = (p->frame->area.height - c->frame->area.height) / 2 +
p->frame->area.y;
return TRUE;
}
} else { } else {
GSList *it; GSList *it;
gboolean first = TRUE; 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; return FALSE;
} }