X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fplace.c;h=5164675d57048a931192430d7309e6d120392152;hb=5c78f329ae40b60f7310e772e6f0a58f962005f6;hp=f1409be606b5bc20cc0f71dbecda73ffbc96b43a;hpb=d8c518978b3fee96eb446fc01884d8f3b2a45a7c;p=chaz%2Fopenbox diff --git a/openbox/place.c b/openbox/place.c index f1409be6..5164675d 100644 --- a/openbox/place.c +++ b/openbox/place.c @@ -69,7 +69,9 @@ static Rect **pick_head(ObClient *c) choice[i] = screen_num_monitors; /* make them all invalid to start */ /* try direct parent first */ - if (c->transient_for && c->transient_for != OB_TRAN_GROUP) { + if (c->transient_for && c->transient_for != OB_TRAN_GROUP && + client_normal(c->transient_for)) + { add_choice(choice, client_monitor(c->transient_for)); ob_debug("placement adding choice %d for parent\n", client_monitor(c->transient_for)); @@ -268,7 +270,10 @@ typedef enum } ObSmartType; #define SMART_IGNORE(placer, c) \ - (placer == c || c->shaded || !client_normal(c) || !c->frame->visible || \ + (placer == c || c->shaded || !c->frame->visible || \ + c->type == OB_CLIENT_TYPE_SPLASH || c->type == OB_CLIENT_TYPE_DESKTOP || \ + ((c->type == OB_CLIENT_TYPE_MENU || c->type == OB_CLIENT_TYPE_TOOLBAR) &&\ + client_has_parent(c)) || \ (c->desktop != DESKTOP_ALL && \ c->desktop != (placer->desktop == DESKTOP_ALL ? \ screen_desktop : placer->desktop))) @@ -442,7 +447,10 @@ static gboolean place_per_app_setting(ObClient *client, gint *x, gint *y, static gboolean place_transient_splash(ObClient *client, gint *x, gint *y) { if (client->transient_for && client->type == OB_CLIENT_TYPE_DIALOG) { - if (client->transient_for != OB_TRAN_GROUP && !client->iconic) { + if (client->transient_for != OB_TRAN_GROUP && + client_normal(client->transient_for) && + !client->iconic) + { ObClient *c = client; ObClient *p = client->transient_for;