summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openbox/config.c79
-rw-r--r--openbox/config.h10
-rw-r--r--openbox/openbox.c7
3 files changed, 94 insertions, 2 deletions
diff --git a/openbox/config.c b/openbox/config.c
index 9cf07a37..66c836ea 100644
--- a/openbox/config.c
+++ b/openbox/config.c
@@ -42,9 +42,14 @@ gboolean config_theme_hidedisabled;
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;
-guint config_screen_firstdesk;
+guint config_screen_firstdesk;
gboolean config_resize_redraw;
gboolean config_resize_four_corners;
@@ -438,6 +443,68 @@ static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr 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;
+ gboolean shadow = RrDefaultFontShadow;
+ gint offset = RrDefaultFontShadowOffset;
+ gchar tint = RrDefaultFontShadowTint;
+
+ 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);
+ }
+ if ((fnode = parse_find_node("shadow", n->children)))
+ shadow = parse_bool(doc, fnode);
+ if ((fnode = parse_find_node("shadowoffset", n->children)))
+ offset = parse_int(doc, fnode);
+ if ((fnode = parse_find_node("shadowtint", n->children))) {
+ tint = parse_int(doc, fnode);
+ if (tint > 100) tint = 100;
+ else if (tint < -100) tint = -100;
+ }
+
+ *font = RrFontOpen(ob_rr_inst, name, size, weight, slant,
+ shadow, offset, tint);
+ g_free(name);
+ next_font:
+ n = parse_find_node("font", n->next);
+ }
}
static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
@@ -747,6 +814,11 @@ void config_startup(ObParseInst *i)
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;
@@ -820,6 +892,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);
diff --git a/openbox/config.h b/openbox/config.h
index fc300d6c..96cd782c 100644
--- a/openbox/config.h
+++ b/openbox/config.h
@@ -23,6 +23,7 @@
#include "misc.h"
#include "stacking.h"
#include "place.h"
+#include "render/render.h"
#include <glib.h>
@@ -93,6 +94,15 @@ extern gchar *config_title_layout;
/*! Append a unique number to windows with same titles */
extern gboolean config_title_number;
+/*! The font for the active window's title */
+extern RrFont *config_font_activewindow;
+/*! The font for inactive windows' titles */
+extern RrFont *config_font_inactivewindow;
+/*! The font for menu titles */
+extern RrFont *config_font_menutitle;
+/*! The font for menu items */
+extern RrFont *config_font_menuitem;
+
/*! The number of desktops */
extern gint config_desktops_num;
/*! Desktop to start on, put 5 to start in the center of a 3x3 grid */
diff --git a/openbox/openbox.c b/openbox/openbox.c
index 087efd6b..e3309f00 100644
--- a/openbox/openbox.c
+++ b/openbox/openbox.c
@@ -244,7 +244,12 @@ gint main(gint argc, gchar **argv)
/* load the theme specified in the rc file */
{
RrTheme *theme;
- if ((theme = RrThemeNew(ob_rr_inst, config_theme))) {
+ if ((theme = RrThemeNew(ob_rr_inst, config_theme,
+ config_font_activewindow,
+ config_font_inactivewindow,
+ config_font_menutitle,
+ config_font_menuitem)))
+ {
RrThemeFree(ob_rr_theme);
ob_rr_theme = theme;
}