X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fplace.c;h=e9832ec30a3bb45775ee453add1d282715c2fab5;hb=819be4fea8d76da30b75c047d70833293af1002c;hp=f37973b3ed9bfce0298c5f4bc9985b9163abd131;hpb=7ffa091d5b464ce508023c3b5e5bc50a36be53fb;p=chaz%2Fopenbox diff --git a/openbox/place.c b/openbox/place.c index f37973b3..e9832ec3 100644 --- a/openbox/place.c +++ b/openbox/place.c @@ -23,6 +23,7 @@ #include "frame.h" #include "focus.h" #include "config.h" +#include "debug.h" static void add_choice(guint *choice, guint mychoice) { @@ -70,6 +71,8 @@ static Rect **pick_head(ObClient *c) /* try direct parent first */ if (c->transient_for && c->transient_for != OB_TRAN_GROUP) { add_choice(choice, client_monitor(c->transient_for)); + ob_debug("placement adding choice %d for parent\n", + client_monitor(c->transient_for)); } /* more than one window in its group (more than just this window) */ @@ -82,25 +85,36 @@ static Rect **pick_head(ObClient *c) if (itc != c && (itc->desktop == c->desktop || itc->desktop == DESKTOP_ALL || c->desktop == DESKTOP_ALL)) + { add_choice(choice, client_monitor(it->data)); + ob_debug("placement adding choice %d for group sibling\n", + client_monitor(it->data)); + } } /* try on all desktops */ for (it = c->group->members; it; it = g_slist_next(it)) { ObClient *itc = it->data; - if (itc != c) + if (itc != c) { add_choice(choice, client_monitor(it->data)); + ob_debug("placement adding choice %d for group sibling on " + "another desktop\n", client_monitor(it->data)); + } } } - if (focus_client) + if (focus_client) { add_choice(choice, client_monitor(focus_client)); + ob_debug("placement adding choice %d for focused window\n", + client_monitor(focus_client)); + } screen_pointer_pos(&px, &py); for (i = 0; i < screen_num_monitors; i++) if (RECT_CONTAINS(*screen_physical_area_monitor(i), px, py)) { add_choice(choice, i); + ob_debug("placement adding choice %d for mouse pointer\n", i); break; } @@ -276,7 +290,7 @@ static gboolean place_smart(ObClient *client, gint *x, gint *y, areas = pick_head(client); - for (i = 0; i < screen_num_monitors; ++i) { + for (i = 0; i < screen_num_monitors && !ret; ++i) { spaces = area_add(spaces, areas[i]); /* stay out from under windows in higher layers */ @@ -423,9 +437,9 @@ static gboolean place_per_app_setting(ObClient *client, gint *x, gint *y, return TRUE; } -static gboolean place_transient(ObClient *client, gint *x, gint *y) +static gboolean place_transient_splash(ObClient *client, gint *x, gint *y) { - if (client->transient_for) { + if (client->transient_for && client->type == OB_CLIENT_TYPE_DIALOG) { if (client->transient_for != OB_TRAN_GROUP) { ObClient *c = client; ObClient *p = client->transient_for; @@ -466,7 +480,9 @@ static gboolean place_transient(ObClient *client, gint *x, gint *y) } } - if (client->transient) { + if ((client->transient && client->type == OB_CLIENT_TYPE_DIALOG) + || client->type == OB_CLIENT_TYPE_SPLASH) + { Rect **areas; areas = pick_head(client); @@ -488,7 +504,7 @@ gboolean place_client(ObClient *client, gint *x, gint *y, gboolean ret = FALSE; if (client->positioned) return FALSE; - if (place_transient(client, x, y)) + if (place_transient_splash(client, x, y)) ret = TRUE; else if (!( place_per_app_setting(client, x, y, settings) ||