* GNT - The GLib Ncurses Toolkit * GNT is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA #define GNT_LOG_DOMAIN "Style" #define MAX_WORKSPACES 99 static char * str_styles[GNT_STYLES]; static int int_styles[GNT_STYLES]; static int bool_styles[GNT_STYLES]; const char *gnt_style_get(GntStyle style) return str_styles[style]; char *gnt_style_get_from_name(const char *group, const char *key) /* gkfile is NULL when run by gtkdoc-scanobj or g-ir-scanner */ if ((group == NULL || *group == '\0') && prg && g_key_file_has_group(gkfile, prg)) return g_key_file_get_value(gkfile, group, key, NULL); gnt_style_get_color(char *group, char *key) vals = gnt_style_get_string_list(group, key, &n); fg = gnt_colors_get_color(vals[0]); bg = gnt_colors_get_color(vals[1]); ret = gnt_color_add_pair(fg, bg); char **gnt_style_get_string_list(const char *group, const char *key, gsize *length) const char *prg = g_get_prgname(); if ((group == NULL || *group == '\0') && prg && g_key_file_has_group(gkfile, prg)) return g_key_file_get_string_list(gkfile, group, key, length, NULL); gboolean gnt_style_get_bool(GntStyle style, gboolean def) if (bool_styles[style] != -1) return bool_styles[style]; str = gnt_style_get(style); bool_styles[style] = str ? gnt_style_parse_bool(str) : def; return bool_styles[style]; gboolean gnt_style_parse_bool(const char *str) if (g_ascii_strcasecmp(str, "false") == 0) else if (g_ascii_strcasecmp(str, "true") == 0) else if (sscanf(str, "%d", &i) == 1) char *s = text, *t = text; if (*s == '^' && *(s + 1) == '[') *t = '\033'; /* escape */ if (*s == 'r' || *s == 'n') parse_key(const char *key) return (char *)gnt_key_translate(key); void gnt_style_read_workspaces(GntWM *wm) for (i = 1; i < MAX_WORKSPACES; ++i) { g_snprintf(group, sizeof(group), "Workspace-%d", i); name = g_key_file_get_value(gkfile, group, "name", NULL); gnt_wm_add_workspace(wm, ws); titles = g_key_file_get_string_list(gkfile, group, "window-names", &c, NULL); g_hash_table_replace(wm->name_places, g_strdup(titles[j]), ws); titles = g_key_file_get_string_list(gkfile, group, "window-titles", &c, NULL); g_hash_table_replace(wm->title_places, g_strdup(titles[j]), ws); void gnt_style_read_actions(GType type, GntBindableClass *klass) /* gkfile is NULL when run by gtkdoc-scanobj or g-ir-scanner */ name = g_strdup_printf("%s::binding", g_type_name(type)); if (g_key_file_has_group(gkfile, name)) keys = g_key_file_get_keys(gkfile, name, &len, &error); gnt_warning("%s", error->message); key = g_strdup(keys[len]); action = g_key_file_get_string(gkfile, name, keys[len], &error); gnt_warning("%s", error->message); const char *keycode = parse_key(key); gnt_warning("Invalid key-binding %s", key); gnt_bindable_register_binding(klass, action, keycode, NULL); gboolean gnt_style_read_menu_accels(const char *name, GHashTable *table) kname = g_strdup_printf("%s::menu", name); if (g_key_file_has_group(gkfile, kname)) keys = g_key_file_get_keys(gkfile, kname, &len, &error); gnt_warning("%s", error->message); key = g_strdup(keys[len]); menuid = g_key_file_get_string(gkfile, kname, keys[len], &error); gnt_warning("%s", error->message); const char *keycode = parse_key(key); gnt_warning("Invalid key-binding %s", key); g_hash_table_replace(table, g_strdup(keycode), menuid); void gnt_styles_get_keyremaps(GType type, GHashTable *hash) name = g_strdup_printf("%s::remap", g_type_name(type)); if (g_key_file_has_group(gkfile, name)) keys = g_key_file_get_keys(gkfile, name, &len, &error); gnt_warning("%s", error->message); key = g_strdup(keys[len]); replace = g_key_file_get_string(gkfile, name, keys[len], &error); gnt_warning("%s", error->message); g_hash_table_insert(hash, key, replace); read_general_style(GKeyFile *kfile) const char *prgname = g_get_prgname(); } styles[] = {{"shadow", GNT_STYLE_SHADOW}, {"customcolor", GNT_STYLE_COLOR}, {"mouse", GNT_STYLE_MOUSE}, {"remember_position", GNT_STYLE_REMPOS}, keys = g_key_file_get_keys(kfile, prgname, &nkeys, NULL); keys = g_key_file_get_keys(kfile, prgname, &nkeys, &error); gnt_warning("%s", error->message); for (i = 0; styles[i].style; i++) str_styles[styles[i].en] = g_key_file_get_string(kfile, prgname, styles[i].style, NULL); void gnt_style_read_configure_file(const char *filename) gkfile = g_key_file_new(); if (!g_key_file_load_from_file(gkfile, filename, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error)) gnt_warning("%s", error->message); gnt_colors_parse(gkfile); read_general_style(gkfile); for (i = 0; i < GNT_STYLES; i++) for (i = 0; i < GNT_STYLES; i++) {