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)
{
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;
}

View file

@ -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;
}