]> Dogcows Code - chaz/openbox/blobdiff - openbox/place.c
add an <active> option for window placement, to try force new windows on the active...
[chaz/openbox] / openbox / place.c
index aa572db2aff2a34eb804bdffc15eff0a79b0657f..276d9288c71ac1ff434e9c480d3417406b1e82e7 100644 (file)
@@ -108,9 +108,9 @@ static Rect **pick_head(ObClient *c)
         }
     }
 
-    if (focus_client) {
+    if (focus_client && client_normal(focus_client)) {
         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\n",
                  client_monitor(focus_client));
     }
 
@@ -146,7 +146,7 @@ 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_active ? 0 : g_random_int_range(0, screen_num_monitors);
 
     l = areas[i]->x;
     t = areas[i]->y;
@@ -254,8 +254,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++) {
-        /* 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_active is true */
+        for (i = 0; (i < (config_place_active ? 1 : screen_num_monitors) &&
+                     !ret); ++i)
+        {
             GList *it;
 
             /* add the whole monitor */
This page took 0.020907 seconds and 4 git commands to generate.