]> Dogcows Code - chaz/openbox/blobdiff - openbox/config.c
i moved the font shadow stuff back into the theme, so move them out of the font confi...
[chaz/openbox] / openbox / config.c
index 56d94341d9c37ba3ddf2a0d633861e32e0c27d50..5e1ee09a4dee203cbfa7d0c26ade0c5d57d70973 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
 
    config.c for the Openbox window manager
-   Copyright (c) 2004        Mikael Magnusson
+   Copyright (c) 2006        Mikael Magnusson
    Copyright (c) 2003        Ben Jansens
 
    This program is free software; you can redistribute it and/or modify
@@ -23,6 +23,7 @@
 #include "prop.h"
 #include "translate.h"
 #include "client.h"
+#include "screen.h"
 #include "parser/parse.h"
 #include "openbox.h"
 
@@ -38,11 +39,17 @@ gchar   *config_theme;
 gboolean config_theme_keepborder;
 gboolean config_theme_hidedisabled;
 
-gchar *config_title_layout;
+gchar   *config_title_layout;
+gboolean config_title_number;
+
+RrFont *config_font_activewindow;
+RrFont *config_font_inactivewindow;
+RrFont *config_font_menuitem;
+RrFont *config_font_menutitle;
 
 gint    config_desktops_num;
 GSList *config_desktops_names;
-gint    config_screen_firstdesk;
+guint   config_screen_firstdesk;
 
 gboolean config_resize_redraw;
 gboolean config_resize_four_corners;
@@ -71,14 +78,14 @@ gint config_mouse_dclicktime;
 gboolean config_menu_warppointer;
 gboolean config_menu_xorstyle;
 guint    config_menu_hide_delay;
+gboolean config_menu_middle;
 guint    config_submenu_show_delay;
 gboolean config_menu_client_list_icons;
 
 GSList *config_menu_files;
 
-gint config_resist_win;
-gint config_resist_edge;
-
+gint     config_resist_win;
+gint     config_resist_edge;
 gboolean config_resist_layers_below;
 
 GSList *config_per_app_settings;
@@ -114,14 +121,29 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
                                    xmlNodePtr node, gpointer d)
 {
     xmlNodePtr app = parse_find_node("application", node->children);
-    gchar *name;
+    gchar *name, *class;
+    gboolean name_set, class_set;
+    gboolean x_pos_given;
 
     while (app) {
-        gboolean x_pos_given = FALSE;
-        if (parse_attr_string("name", app, &name)) {
+        name_set = class_set = x_pos_given = FALSE;
+
+        class_set = parse_attr_string("class", app, &class);
+        name_set = parse_attr_string("name", app, &name);
+        if (class_set || name_set) {
             xmlNodePtr n, c;
             ObAppSettings *settings = g_new0(ObAppSettings, 1);
-            settings->name = name;
+            
+            if (name_set)
+                settings->name = name;
+            else
+                settings->name = NULL;
+
+            if (class_set)
+                settings->class = class;
+            else
+                settings->class = NULL;
+
             if (!parse_attr_string("role", app, &settings->role))
                 settings->role = NULL;
 
@@ -415,10 +437,61 @@ static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
         g_free(config_title_layout);
         config_title_layout = parse_string(doc, n);
     }
+    if ((n = parse_find_node("titleNumber", node)))
+        config_title_number = 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);
+
+    n = parse_find_node("font", node);
+    while (n) {
+        xmlNodePtr   fnode;
+        RrFont     **font;
+        gchar       *name = g_strdup(RrDefaultFontFamily);
+        gint         size = RrDefaultFontSize;
+        RrFontWeight weight = RrDefaultFontWeight;
+        RrFontSlant  slant = RrDefaultFontSlant;
+
+        if (parse_attr_contains("ActiveWindow", n, "place"))
+            font = &config_font_activewindow;
+        else if (parse_attr_contains("InactiveWindow", n, "place"))
+            font = &config_font_inactivewindow;
+        else if (parse_attr_contains("MenuTitle", n, "place"))
+            font = &config_font_menutitle;
+        else if (parse_attr_contains("MenuItem", n, "place"))
+            font = &config_font_menuitem;
+        else
+            goto next_font;
+
+        if ((fnode = parse_find_node("name", n->children))) {
+            g_free(name);
+            name = parse_string(doc, fnode);
+        }
+        if ((fnode = parse_find_node("size", n->children))) {
+            int s = parse_int(doc, fnode);
+            if (s > 0) size = s;
+        }
+        if ((fnode = parse_find_node("weight", n->children))) {
+            gchar *w = parse_string(doc, fnode);
+            if (!g_ascii_strcasecmp(w, "Bold"))
+                weight = RR_FONTWEIGHT_BOLD;
+            g_free(w);
+        }
+        if ((fnode = parse_find_node("slant", n->children))) {
+            gchar *s = parse_string(doc, fnode);
+            if (!g_ascii_strcasecmp(s, "Italic"))
+                slant = RR_FONTSLANT_ITALIC;
+            if (!g_ascii_strcasecmp(s, "Oblique"))
+                slant = RR_FONTSLANT_OBLIQUE;
+            g_free(s);
+        }
+
+        *font = RrFontOpen(ob_rr_inst, name, size, weight, slant);
+        g_free(name);
+    next_font:
+        n = parse_find_node("font", n->next);
+    }
 }
 
 static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
@@ -436,7 +509,7 @@ static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
     if ((n = parse_find_node("firstdesk", node))) {
         gint d = parse_int(doc, n);
         if (d > 0)
-            config_screen_firstdesk = d;
+            config_screen_firstdesk = (unsigned) d;
     }
     if ((n = parse_find_node("names", node))) {
         GSList *it;
@@ -581,6 +654,8 @@ static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
             config_menu_xorstyle = parse_bool(doc, n);
         if ((n = parse_find_node("hideDelay", node)))
             config_menu_hide_delay = parse_int(doc, n);
+        if ((n = parse_find_node("middle", node)))
+            config_menu_middle = parse_bool(doc, n);
         if ((n = parse_find_node("submenuShowDelay", node)))
             config_submenu_show_delay = parse_int(doc, n);
         if ((n = parse_find_node("desktopMenuIcons", node)))
@@ -697,7 +772,7 @@ static void bind_default_mouse()
             uact = OB_USER_ACTION_MOUSE_DOUBLE_CLICK; break;
         case OB_MOUSE_ACTION_MOTION:
             uact = OB_USER_ACTION_MOUSE_MOTION; break;
-        case OB_NUM_MOUSE_ACTIONS:
+        default:
             g_assert_not_reached();
         }
         mouse_bind(it->button, it->context, it->mact,
@@ -722,9 +797,15 @@ void config_startup(ObParseInst *i)
     config_theme = NULL;
 
     config_title_layout = g_strdup("NLIMC");
+    config_title_number = TRUE;
     config_theme_keepborder = TRUE;
     config_theme_hidedisabled = FALSE;
 
+    config_font_activewindow = NULL;
+    config_font_inactivewindow = NULL;
+    config_font_menuitem = NULL;
+    config_font_menutitle = NULL;
+
     parse_register(i, "theme", parse_theme, NULL);
 
     config_desktops_num = 4;
@@ -778,6 +859,7 @@ void config_startup(ObParseInst *i)
     config_menu_warppointer = TRUE;
     config_menu_xorstyle = TRUE;
     config_menu_hide_delay = 250;
+    config_menu_middle = FALSE;
     config_submenu_show_delay = 0;
     config_menu_client_list_icons = TRUE;
     config_menu_files = NULL;
@@ -797,6 +879,11 @@ void config_shutdown()
 
     g_free(config_title_layout);
 
+    RrFontClose(config_font_activewindow);
+    RrFontClose(config_font_inactivewindow);
+    RrFontClose(config_font_menuitem);
+    RrFontClose(config_font_menutitle);
+
     for (it = config_desktops_names; it; it = g_slist_next(it))
         g_free(it->data);
     g_slist_free(config_desktops_names);
@@ -809,6 +896,7 @@ void config_shutdown()
         ObAppSettings *itd = (ObAppSettings *)it->data;
         g_free(itd->name);
         g_free(itd->role);
+        g_free(itd->class);
         g_free(it->data);
     }
     g_slist_free(config_per_app_settings);
This page took 0.026562 seconds and 4 git commands to generate.