X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fplace.c;h=1ac295c0779b2758a27ae93230be1536758e3996;hb=d389e67d22259e6a1d822b99ab0dbd27389bdade;hp=4717cbfc3c3ca98ca962d4a7f8fb093a6e562b51;hpb=0e9bd66b75725b4d6632eafcaeb34b9fe310e4ea;p=chaz%2Fopenbox diff --git a/openbox/place.c b/openbox/place.c index 4717cbfc..1ac295c0 100644 --- a/openbox/place.c +++ b/openbox/place.c @@ -126,9 +126,9 @@ static gboolean place_random(ObClient *client, gint *x, gint *y) b = areas[i]->y + areas[i]->height - client->frame->area.height; if (r > l) *x = g_random_int_range(l, r + 1); - else *x = 0; + else *x = areas[i]->x; if (b > t) *y = g_random_int_range(t, b + 1); - else *y = 0; + else *y = areas[i]->y; g_free(areas); @@ -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; } @@ -473,6 +489,7 @@ gboolean place_client(ObClient *client, gint *x, gint *y, place_random(client, x, y)))) g_assert_not_reached(); /* the last one better succeed */ /* get where the client should be */ - frame_frame_gravity(client->frame, x, y); + frame_frame_gravity(client->frame, x, y, + client->area.width, client->area.height); return ret; }