]> Dogcows Code - chaz/openbox/blobdiff - openbox/config.c
LeastOverlap placement option (Fix bug 5385)
[chaz/openbox] / openbox / config.c
index 857255faf840635254cd61e903893488a94fcf74..1a3e6ddf5af908977d7fe55834a4f6fbe6f3c365 100644 (file)
@@ -111,7 +111,7 @@ ObAppSettings* config_create_app_settings(void)
     settings->type = -1;
     settings->decor = -1;
     settings->shade = -1;
-    settings->monitor_type = 0;
+    settings->monitor_type = OB_PLACE_MONITOR_ANY;
     settings->monitor = -1;
     settings->focus = -1;
     settings->desktop = 0;
@@ -136,7 +136,7 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src,
     copy_if(type, (ObClientType)-1);
     copy_if(decor, -1);
     copy_if(shade, -1);
-    copy_if(monitor_type, 0);
+    copy_if(monitor_type, OB_PLACE_MONITOR_ANY);
     copy_if(monitor, -1);
     copy_if(focus, -1);
     copy_if(desktop, 0);
@@ -291,19 +291,19 @@ static void parse_per_app_settings(xmlNodePtr node, gpointer d)
                         settings->pos_given = TRUE;
                     }
 
-                if (settings->pos_given &&
-                    (c = obt_xml_find_node(n->children, "monitor")))
+                /* monitor can be set without setting x or y */
+                if ((c = obt_xml_find_node(n->children, "monitor")))
                     if (!obt_xml_node_contains(c, "default")) {
                         gchar *s = obt_xml_node_string(c);
                         if (!g_ascii_strcasecmp(s, "mouse"))
                             settings->monitor_type =
-                                    OB_APP_SETTINGS_MONITOR_MOUSE;
+                                    OB_PLACE_MONITOR_MOUSE;
                         else if (!g_ascii_strcasecmp(s, "active"))
                             settings->monitor_type =
-                                    OB_APP_SETTINGS_MONITOR_ACTIVE;
+                                    OB_PLACE_MONITOR_ACTIVE;
                         else if (!g_ascii_strcasecmp(s, "primary"))
                             settings->monitor_type =
-                                    OB_APP_SETTINGS_MONITOR_PRIMARY;
+                                    OB_PLACE_MONITOR_PRIMARY;
                         else
                             settings->monitor = obt_xml_node_int(c);
                         g_free(s);
@@ -581,9 +581,13 @@ static void parse_placement(xmlNodePtr node, gpointer d)
 
     node = node->children;
 
-    if ((n = obt_xml_find_node(node, "policy")))
+    if ((n = obt_xml_find_node(node, "policy"))) {
         if (obt_xml_node_contains(n, "UnderMouse"))
             config_place_policy = OB_PLACE_POLICY_MOUSE;
+        else if (obt_xml_node_contains(n, "LeastOverlap"))
+            config_place_policy = OB_PLACE_POLICY_LEASTOVERLAP;
+
+    }
     if ((n = obt_xml_find_node(node, "center")))
         config_place_center = obt_xml_node_bool(n);
     if ((n = obt_xml_find_node(node, "monitor"))) {
This page took 0.024447 seconds and 4 git commands to generate.