]> Dogcows Code - chaz/openbox/blobdiff - openbox/place.c
Merge branch 'backport' into work
[chaz/openbox] / openbox / place.c
index 058bbfbe5866457b1b9229a8684010d4d5926e90..aac40e8a099249c0620e7513269f556b766c56d8 100644 (file)
@@ -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 && client_normal(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 normal 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 = config_place_active ? 0 : 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;
@@ -255,9 +259,9 @@ 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, but only the first one
-           if config_place_active is true */
-        for (i = 0; (i < (config_place_active ? 1 : screen_num_monitors) &&
-                     !ret); ++i)
+           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;
 
@@ -485,8 +489,9 @@ gboolean place_client(ObClient *client, gint *x, gint *y,
     gboolean userplaced = FALSE;
 
     /* per-app settings override program specified position
-     * but not user specified */
-    if ((client->positioned & USPosition) ||
+     * but not user specified, unless pos_force is enabled */
+    if (((client->positioned & USPosition) &&
+         !(settings && settings->pos_given && settings->pos_force)) ||
         ((client->positioned & PPosition) &&
          !(settings && settings->pos_given)))
         return FALSE;
This page took 0.02325 seconds and 4 git commands to generate.