1 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
3 appearance.c for ObConf, the configuration tool for Openbox
4 Copyright (c) 2003-2007 Dana Jansens
5 Copyright (c) 2003 Tim Riley
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 See the COPYING file for a copy of the GNU General Public License.
22 #include "preview_update.h"
24 static gboolean mapping = FALSE;
26 static RrFont *appr_setup_font(GtkWidget *w, const gchar *place);
27 static RrFont *appr_set_font(GtkFontButton *w, const gchar *place);
29 void appr_setup_window_border(GtkWidget *w)
35 border = tree_get_bool("theme/keepBorder", TRUE);
36 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), border);
41 void appr_setup_title_layout(GtkWidget *w)
47 layout = tree_get_string("theme/titleLayout", "NLIMC");
48 gtk_entry_set_text(GTK_ENTRY(w), layout);
49 preview_update_set_title_layout(layout);
55 void appr_setup_font_active(GtkWidget *w)
57 preview_update_set_active_font(appr_setup_font(w, "ActiveWindow"));
60 void appr_setup_font_inactive(GtkWidget *w)
62 preview_update_set_inactive_font(appr_setup_font(w, "InactiveWindow"));
65 void appr_setup_font_menu_header(GtkWidget *w)
67 preview_update_set_menu_header_font(appr_setup_font(w, "MenuHeader"));
70 void appr_setup_font_menu_item(GtkWidget *w)
72 preview_update_set_menu_item_font(appr_setup_font(w, "MenuItem"));
75 void appr_setup_font_display(GtkWidget *w)
77 preview_update_set_osd_font(appr_setup_font(w, "OnScreenDisplay"));
80 void on_window_border_toggled(GtkToggleButton *w, gpointer data)
86 b = gtk_toggle_button_get_active(w);
87 tree_set_bool("theme/keepBorder", b);
90 void on_title_layout_changed(GtkEntry *w, gpointer data)
94 gboolean n, d, s, l, i, m, c;
98 layout = g_strdup(gtk_entry_get_text(w));
100 n = d = s = l = i = m = c = FALSE;
102 for (it = layout; *it; ++it) {
140 /* drop the letter */
141 for (it2 = it; *it2; ++it2)
149 gtk_entry_set_text(w, layout);
150 tree_set_string("theme/titleLayout", layout);
151 preview_update_set_title_layout(layout);
156 void on_font_active_font_set(GtkFontButton *w, gpointer data)
158 preview_update_set_active_font(appr_set_font(w, "ActiveWindow"));
161 void on_font_inactive_font_set(GtkFontButton *w, gpointer data)
163 preview_update_set_inactive_font(appr_set_font(w, "InactiveWindow"));
166 void on_font_menu_header_font_set(GtkFontButton *w, gpointer data)
168 preview_update_set_menu_header_font(appr_set_font(w, "MenuHeader"));
171 void on_font_menu_item_font_set(GtkFontButton *w, gpointer data)
173 preview_update_set_menu_item_font(appr_set_font(w, "MenuItem"));
176 void on_font_display_font_set(GtkFontButton *w, gpointer data)
178 preview_update_set_osd_font(appr_set_font(w, "OnScreenDisplay"));
181 static RrFont *appr_setup_font(GtkWidget *w, const gchar *place)
184 gchar *fontstring, *node;
185 gchar *name, **names;
190 RrFontWeight rr_weight = RR_FONTWEIGHT_NORMAL;
191 RrFontSlant rr_slant = RR_FONTSLANT_NORMAL;
195 node = g_strdup_printf("theme/font:place=%s/name", place);
196 name = tree_get_string(node, "Sans");
199 node = g_strdup_printf("theme/font:place=%s/size", place);
200 size = tree_get_string(node, "8");
203 node = g_strdup_printf("theme/font:place=%s/weight", place);
204 weight = tree_get_string(node, "");
207 node = g_strdup_printf("theme/font:place=%s/slant", place);
208 slant = tree_get_string(node, "");
211 /* get only the first font in the string */
212 names = g_strsplit(name, ",", 0);
214 name = g_strdup(names[0]);
217 /* don't use "normal" in the gtk string */
218 if (!g_ascii_strcasecmp(weight, "normal")) {
219 g_free(weight); weight = g_strdup("");
221 if (!g_ascii_strcasecmp(slant, "normal")) {
222 g_free(slant); slant = g_strdup("");
225 fontstring = g_strdup_printf("%s %s %s %s", name, weight, slant, size);
226 gtk_font_button_set_font_name(GTK_FONT_BUTTON(w), fontstring);
228 if (!g_ascii_strcasecmp(weight, "Bold")) rr_weight = RR_FONTWEIGHT_BOLD;
229 if (!g_ascii_strcasecmp(slant, "Italic")) rr_slant = RR_FONTSLANT_ITALIC;
230 if (!g_ascii_strcasecmp(slant, "Oblique")) rr_slant = RR_FONTSLANT_OBLIQUE;
232 font = RrFontOpen(rrinst, name, atoi(size), rr_weight, rr_slant);
244 static RrFont *appr_set_font(GtkFontButton *w, const gchar *place)
248 const gchar *size = NULL;
249 const gchar *bold = NULL;
250 const gchar *italic = NULL;
252 RrFontWeight weight = RR_FONTWEIGHT_NORMAL;
253 RrFontSlant slant = RR_FONTSLANT_NORMAL;
257 font = g_strdup(gtk_font_button_get_font_name(w));
258 while ((c = strrchr(font, ' '))) {
259 if (!bold && !italic && !size && atoi(c+1))
261 else if (!bold && !italic && !g_ascii_strcasecmp(c+1, "italic"))
263 else if (!bold && !g_ascii_strcasecmp(c+1, "bold"))
269 if (!bold) bold = "Normal";
270 if (!italic) italic = "Normal";
272 node = g_strdup_printf("theme/font:place=%s/name", place);
273 tree_set_string(node, font);
276 node = g_strdup_printf("theme/font:place=%s/size", place);
277 tree_set_string(node, size);
280 node = g_strdup_printf("theme/font:place=%s/weight", place);
281 tree_set_string(node, bold);
284 node = g_strdup_printf("theme/font:place=%s/slant", place);
285 tree_set_string(node, italic);
288 if (!g_ascii_strcasecmp(bold, "Bold")) weight = RR_FONTWEIGHT_BOLD;
289 if (!g_ascii_strcasecmp(italic, "Italic")) slant = RR_FONTSLANT_ITALIC;
290 if (!g_ascii_strcasecmp(italic, "Oblique")) slant = RR_FONTSLANT_OBLIQUE;
292 return RrFontOpen(rrinst, font, atoi(size), weight, slant);