X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fplace.c;h=9e38bdefb0b7400bf01a7f145e785f75d9563226;hb=76464a604ee2999b00b806be25722f7fcac1cd9c;hp=851e4f8f10301ffac548ef06740e9d04f5df66c3;hpb=d3ff019f53f02afe0c7116a99f65ffb8d622e889;p=chaz%2Fopenbox diff --git a/openbox/place.c b/openbox/place.c index 851e4f8f..9e38bdef 100644 --- a/openbox/place.c +++ b/openbox/place.c @@ -76,7 +76,7 @@ static Rect **pick_head(ObClient *c) /* try direct parent first */ if ((p = client_direct_parent(c))) { add_choice(choice, client_monitor(p)); - ob_debug("placement adding choice %d for parent\n", + ob_debug("placement adding choice %d for parent", client_monitor(p)); } @@ -92,7 +92,7 @@ static Rect **pick_head(ObClient *c) 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", + ob_debug("placement adding choice %d for group sibling", client_monitor(it->data)); } } @@ -103,14 +103,17 @@ static Rect **pick_head(ObClient *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)); + "another desktop", client_monitor(it->data)); } } } - if (focus_client) { + /* skip this if placing by the mouse position */ + if (focus_client && client_normal(focus_client) && + config_place_monitor != OB_PLACE_MONITOR_MOUSE) + { add_choice(choice, client_monitor(focus_client)); - ob_debug("placement adding choice %d for focused window\n", + ob_debug("placement adding choice %d for normal focused window", client_monitor(focus_client)); } @@ -122,7 +125,7 @@ static Rect **pick_head(ObClient *c) g_free(monitor); if (contain) { add_choice(choice, i); - ob_debug("placement adding choice %d for mouse pointer\n", i); + ob_debug("placement adding choice %d for mouse pointer", i); break; } } @@ -146,7 +149,8 @@ static gboolean place_random(ObClient *client, gint *x, gint *y) guint i; areas = pick_head(client); - i = g_random_int_range(0, screen_num_monitors); + i = (config_place_monitor != OB_PLACE_MONITOR_ANY) ? + 0 : g_random_int_range(0, screen_num_monitors); l = areas[i]->x; t = areas[i]->y; @@ -254,10 +258,11 @@ static gboolean place_nooverlap(ObClient *c, gint *x, gint *y) /* try ignoring different things to find empty space */ for (ignore = 0; ignore < IGNORE_END && !ret; ignore++) { - guint i; - - /* try all monitors in order of preference */ - for (i = 0; i < screen_num_monitors && !ret; ++i) { + /* try all monitors in order of preference, but only the first one + if config_place_monitor is MOUSE or ACTIVE */ + for (i = 0; (i < (config_place_monitor != OB_PLACE_MONITOR_ANY ? + 1 : screen_num_monitors) && !ret); ++i) + { GList *it; /* add the whole monitor */ @@ -406,21 +411,21 @@ static gboolean place_per_app_setting(ObClient *client, gint *x, gint *y, g_free(areas); } - if (settings->center_x) + if (settings->position.x.center) *x = screen->x + screen->width / 2 - client->area.width / 2; - else if (settings->opposite_x) + else if (settings->position.x.opposite) *x = screen->x + screen->width - client->frame->area.width - - settings->position.x; + settings->position.x.pos; else - *x = screen->x + settings->position.x; + *x = screen->x + settings->position.x.pos; - if (settings->center_y) + if (settings->position.y.center) *y = screen->y + screen->height / 2 - client->area.height / 2; - else if (settings->opposite_y) + else if (settings->position.y.opposite) *y = screen->y + screen->height - client->frame->area.height - - settings->position.y; + settings->position.y.pos; else - *y = screen->y + settings->position.y; + *y = screen->y + settings->position.y.pos; g_free(screen); return TRUE;