]> Dogcows Code - chaz/openbox/blobdiff - openbox/config.c
fix cmd line argument parsing, it would drop some.
[chaz/openbox] / openbox / config.c
index f18b77c9aa38618f1dac36bc844dbf8c728ef9ef..99e35b5ada0d57e92ba2e7d1a3e3cb6fd71dcd50 100644 (file)
@@ -38,7 +38,6 @@ ObPlacePolicy config_place_policy;
 
 gchar   *config_theme;
 gboolean config_theme_keepborder;
 
 gchar   *config_theme;
 gboolean config_theme_keepborder;
-gboolean config_theme_hidedisabled;
 
 gchar   *config_title_layout;
 
 
 gchar   *config_title_layout;
 
@@ -102,22 +101,23 @@ GSList *config_per_app_settings;
       <position>
         <x>700</x>
         <y>0</y>
       <position>
         <x>700</x>
         <y>0</y>
-        <head>1</head>
+        <monitor>1</monitor>
       </position>
       </position>
+      .. there is a lot more settings available
     </application>
   </applications>
 */
 
 /* Manages settings for individual applications.
     </application>
   </applications>
 */
 
 /* Manages settings for individual applications.
-   Some notes: head is the screen number in a multi monitor
+   Some notes: monitor is the screen number in a multi monitor
    (Xinerama) setup (starting from 0) or mouse, meaning the
    (Xinerama) setup (starting from 0) or mouse, meaning the
-   head the pointer is on. Default: mouse.
+   monitor the pointer is on. Default: mouse.
    Layer can be three values, above (Always on top), below
    (Always on bottom) and everything else (normal behaviour).
    Positions can be an integer value or center, which will
    Layer can be three values, above (Always on top), below
    (Always on bottom) and everything else (normal behaviour).
    Positions can be an integer value or center, which will
-   center the window in the specified axis. Position is relative
-   from head, so <position><x>center</x></position><head>1</head>
-   will center the window on the second head.
+   center the window in the specified axis. Position is within
+   the monitor, so <position><x>center</x></position><monitor>2</monitor>
+   will center the window on the second monitor.
 */
 static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
                                    xmlNodePtr node, gpointer d)
 */
 static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
                                    xmlNodePtr node, gpointer d)
@@ -176,7 +176,7 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
                     }
 
                 if (x_pos_given && (c = parse_find_node("y", n->children)))
                     }
 
                 if (x_pos_given && (c = parse_find_node("y", n->children)))
-                    if (!parse_contains("default", doc, )) {
+                    if (!parse_contains("default", doc, c)) {
                         gchar *s = parse_string(doc, c);
                         if (!strcmp(s, "center")) {
                             settings->center_y = TRUE;
                         gchar *s = parse_string(doc, c);
                         if (!strcmp(s, "center")) {
                             settings->center_y = TRUE;
@@ -189,13 +189,13 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
                     }
 
                 if (settings->pos_given &&
                     }
 
                 if (settings->pos_given &&
-                    (c = parse_find_node("head", n->children)))
-                    if (!parse_contains("default", doc, n)) {
-                        gchar *s = parse_string(doc, n);
+                    (c = parse_find_node("monitor", n->children)))
+                    if (!parse_contains("default", doc, c)) {
+                        gchar *s = parse_string(doc, c);
                         if (!strcmp(s, "mouse"))
                         if (!strcmp(s, "mouse"))
-                            settings->head = -1;
+                            settings->monitor = 0;
                         else
                         else
-                            settings->head = parse_int(doc, n);
+                            settings->monitor = parse_int(doc, c) + 1;
                         g_free(s);
                     }
             }
                         g_free(s);
                     }
             }
@@ -205,61 +205,70 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
                 if (!parse_contains("default", doc, n))
                     settings->focus = parse_bool(doc, n);
 
                 if (!parse_contains("default", doc, n))
                     settings->focus = parse_bool(doc, n);
 
-            if ((n = parse_find_node("desktop", app->children)))
+            if ((n = parse_find_node("desktop", app->children))) {
                 if (!parse_contains("default", doc, n)) {
                     gchar *s = parse_string(doc, n);
                     if (!strcmp(s, "all"))
                         settings->desktop = DESKTOP_ALL;
                 if (!parse_contains("default", doc, n)) {
                     gchar *s = parse_string(doc, n);
                     if (!strcmp(s, "all"))
                         settings->desktop = DESKTOP_ALL;
-                    else
-                        settings->desktop = parse_int(doc, n);
+                    else {
+                        gint i = parse_int(doc, n);
+                        if (i > 0)
+                            settings->desktop = i;
+                    }
                     g_free(s);
                 } else
                     g_free(s);
                 } else
-                    /* lets hope the user doesn't have 2^32 desktops */
-                    settings->desktop = DESKTOP_ALL - 1;
+                    settings->desktop = 0;
+            }
 
             settings->layer = -2;
 
             settings->layer = -2;
-            if ((n = parse_find_node("layer", app->children))) {
-                gchar *s = parse_string(doc, n);
-                if (!strcmp(s, "above"))
-                    settings->layer = 1;
-                else if (!strcmp(s, "below"))
-                    settings->layer = -1;
-                else
-                    settings->layer = 0;
-                g_free(s);
-            }
+            if ((n = parse_find_node("layer", app->children)))
+                if (!parse_contains("default", doc, n)) {
+                    gchar *s = parse_string(doc, n);
+                    if (!strcmp(s, "above"))
+                        settings->layer = 1;
+                    else if (!strcmp(s, "below"))
+                        settings->layer = -1;
+                    else
+                        settings->layer = 0;
+                    g_free(s);
+                }
 
             settings->iconic = -1;
             if ((n = parse_find_node("iconic", app->children)))
 
             settings->iconic = -1;
             if ((n = parse_find_node("iconic", app->children)))
-                settings->iconic = parse_bool(doc, n);
+                if (!parse_contains("default", doc, n))
+                    settings->iconic = parse_bool(doc, n);
 
             settings->skip_pager = -1;
             if ((n = parse_find_node("skip_pager", app->children)))
 
             settings->skip_pager = -1;
             if ((n = parse_find_node("skip_pager", app->children)))
-                settings->skip_pager = parse_bool(doc, n);
+                if (!parse_contains("default", doc, n))
+                    settings->skip_pager = parse_bool(doc, n);
 
             settings->skip_taskbar = -1;
             if ((n = parse_find_node("skip_taskbar", app->children)))
 
             settings->skip_taskbar = -1;
             if ((n = parse_find_node("skip_taskbar", app->children)))
-                settings->skip_taskbar = parse_bool(doc, n);
+                if (!parse_contains("default", doc, n))
+                    settings->skip_taskbar = parse_bool(doc, n);
 
             settings->fullscreen = -1;
             if ((n = parse_find_node("fullscreen", app->children)))
 
             settings->fullscreen = -1;
             if ((n = parse_find_node("fullscreen", app->children)))
-                settings->fullscreen = parse_bool(doc, n);
+                if (!parse_contains("default", doc, n))
+                    settings->fullscreen = parse_bool(doc, n);
 
             settings->max_horz = -1;
             settings->max_vert = -1;
 
             settings->max_horz = -1;
             settings->max_vert = -1;
-            if ((n = parse_find_node("maximized", app->children))) {
-                gchar *s = parse_string(doc, n);
-                if (!strcmp(s, "horizontal")) {
-                    settings->max_horz = TRUE;
-                    settings->max_vert = FALSE;
-                } else if (!strcmp(s, "vertical")) {
-                    settings->max_horz = FALSE;
-                    settings->max_vert = TRUE;
-                } else
-                    settings->max_horz = settings->max_vert =
-                        parse_bool(doc, n);
-                g_free(s);
-            }
+            if ((n = parse_find_node("maximized", app->children)))
+                if (!parse_contains("default", doc, n)) {
+                    gchar *s = parse_string(doc, n);
+                    if (!strcmp(s, "horizontal")) {
+                        settings->max_horz = TRUE;
+                        settings->max_vert = FALSE;
+                    } else if (!strcmp(s, "vertical")) {
+                        settings->max_horz = FALSE;
+                        settings->max_vert = TRUE;
+                    } else
+                        settings->max_horz = settings->max_vert =
+                            parse_bool(doc, n);
+                    g_free(s);
+                }
 
             config_per_app_settings = g_slist_append(config_per_app_settings,
                                               (gpointer) settings);
 
             config_per_app_settings = g_slist_append(config_per_app_settings,
                                               (gpointer) settings);
@@ -456,13 +465,18 @@ static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
         g_free(c);
     }
     if ((n = parse_find_node("titleLayout", node))) {
         g_free(c);
     }
     if ((n = parse_find_node("titleLayout", node))) {
+        gchar *c, *d;
+
         g_free(config_title_layout);
         config_title_layout = parse_string(doc, n);
         g_free(config_title_layout);
         config_title_layout = parse_string(doc, n);
+
+        /* replace duplicates with spaces */
+        for (c = config_title_layout; *c != '\0'; ++c)
+            for (d = c+1; *d != '\0'; ++d)
+                if (*c == *d) *d = ' ';
     }
     if ((n = parse_find_node("keepBorder", node)))
         config_theme_keepborder = parse_bool(doc, n);
     }
     if ((n = parse_find_node("keepBorder", node)))
         config_theme_keepborder = parse_bool(doc, n);
-    if ((n = parse_find_node("hideDisabled", node)))
-        config_theme_hidedisabled = parse_bool(doc, n);
     if ((n = parse_find_node("animateIconify", node)))
         config_animate_iconify = parse_bool(doc, n);
 
     if ((n = parse_find_node("animateIconify", node)))
         config_animate_iconify = parse_bool(doc, n);
 
@@ -817,7 +831,6 @@ void config_startup(ObParseInst *i)
     config_animate_iconify = TRUE;
     config_title_layout = g_strdup("NLIMC");
     config_theme_keepborder = TRUE;
     config_animate_iconify = TRUE;
     config_title_layout = g_strdup("NLIMC");
     config_theme_keepborder = TRUE;
-    config_theme_hidedisabled = FALSE;
 
     config_font_activewindow = NULL;
     config_font_inactivewindow = NULL;
 
     config_font_activewindow = NULL;
     config_font_inactivewindow = NULL;
This page took 0.028619 seconds and 4 git commands to generate.