X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fconfig.c;h=790b03ba35ec14d4b362dbca7649b7a5a659c43a;hb=6799c67c07e99c440f549802f60d9f16995ab711;hp=b5b4ef4e2dad4dbbd86241e82312c8b1233fe5b5;hpb=ceb77efdd44e993b1ed4e9d908f93baf22b2b22c;p=chaz%2Fopenbox diff --git a/openbox/config.c b/openbox/config.c index b5b4ef4e..790b03ba 100644 --- a/openbox/config.c +++ b/openbox/config.c @@ -22,6 +22,7 @@ #include "mouse.h" #include "actions.h" #include "translate.h" +#include "hooks.h" #include "client.h" #include "screen.h" #include "openbox.h" @@ -43,6 +44,7 @@ StrutPartial config_margins; gchar *config_theme; gboolean config_theme_keepborder; +guint config_theme_window_list_icon_size; gchar *config_title_layout; @@ -124,7 +126,7 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src, g_assert(src != NULL); g_assert(dst != NULL); - copy_if(type, -1); + copy_if(type, (ObClientType)-1); copy_if(decor, -1); copy_if(shade, -1); copy_if(focus, -1); @@ -342,6 +344,47 @@ static void parse_per_app_settings(xmlNodePtr node, gpointer d) } } +static void parse_hook(xmlNodePtr node, gpointer d) +{ + gchar *name; + ObHook hook; + xmlNodePtr n; + + + if (!obt_parse_attr_string(node, "name", &name)) { + g_message(_("Hook in config file is missing a name")); + return; + } + + hook = hooks_hook_from_name(name); + if (!hook) + g_message(_("Unknown hook \"%s\" in config file"), name); + else { + if ((n = obt_parse_find_node(node->children, "action"))) + while (n) { + ObActionsAct *action; + + action = actions_parse(n); + if (action) + hooks_add(hook, action); + n = obt_parse_find_node(n->next, "action"); + } + } + + g_free(name); +} + +static void parse_hooks(xmlNodePtr node, gpointer d) +{ + xmlNodePtr n; + + if ((n = obt_parse_find_node(node->children, "hook"))) + while (n) { + parse_hook(n, NULL); + n = obt_parse_find_node(n->next, "hook"); + } +} + /* @@ -560,6 +603,13 @@ static void parse_theme(xmlNodePtr node, gpointer d) config_theme_keepborder = obt_parse_node_bool(n); if ((n = obt_parse_find_node(node, "animateIconify"))) config_animate_iconify = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "windowListIconSize"))) { + config_theme_window_list_icon_size = obt_parse_node_int(n); + if (config_theme_window_list_icon_size < 16) + config_theme_window_list_icon_size = 16; + else if (config_theme_window_list_icon_size > 96) + config_theme_window_list_icon_size = 96; + } n = obt_parse_find_node(node, "font"); while (n) { @@ -764,7 +814,7 @@ static void parse_dock(xmlNodePtr node, gpointer d) config_dock_app_move_button = b; config_dock_app_move_modifiers = s; } else { - g_message(_("Invalid button '%s' specified in config file"), str); + g_message(_("Invalid button \"%s\" specified in config file"), str); } g_free(str); } @@ -773,25 +823,25 @@ static void parse_dock(xmlNodePtr node, gpointer d) static void parse_menu(xmlNodePtr node, gpointer d) { xmlNodePtr n; - for (node = node->children; node; node = node->next) { - if (!xmlStrcasecmp(node->name, (const xmlChar*) "file")) { - gchar *c; + node = node->children; - c = obt_parse_node_string(node); + if ((n = obt_parse_find_node(node, "hideDelay"))) + config_menu_hide_delay = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "middle"))) + config_menu_middle = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "submenuShowDelay"))) + config_submenu_show_delay = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "applicationIcons"))) + config_menu_client_list_icons = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "manageDesktops"))) + config_menu_manage_desktops = obt_parse_node_bool(n); + + while ((node = obt_parse_find_node(node, "file"))) { + gchar *c = obt_parse_node_string(node); config_menu_files = g_slist_append(config_menu_files, obt_paths_expand_tilde(c)); g_free(c); - } - if ((n = obt_parse_find_node(node, "hideDelay"))) - config_menu_hide_delay = obt_parse_node_int(n); - if ((n = obt_parse_find_node(node, "middle"))) - config_menu_middle = obt_parse_node_bool(n); - if ((n = obt_parse_find_node(node, "submenuShowDelay"))) - config_submenu_show_delay = obt_parse_node_int(n); - if ((n = obt_parse_find_node(node, "applicationIcons"))) - config_menu_client_list_icons = obt_parse_node_bool(n); - if ((n = obt_parse_find_node(node, "manageDesktops"))) - config_menu_manage_desktops = obt_parse_node_bool(n); + node = node->next; } } @@ -920,6 +970,7 @@ void config_startup(ObtParseInst *i) config_animate_iconify = TRUE; config_title_layout = g_strdup("NLIMC"); config_theme_keepborder = TRUE; + config_theme_window_list_icon_size = 36; config_font_activewindow = NULL; config_font_inactivewindow = NULL; @@ -987,6 +1038,8 @@ void config_startup(ObtParseInst *i) obt_parse_register(i, "menu", parse_menu, NULL); + obt_parse_register(i, "hooks", parse_hooks, NULL); + config_per_app_settings = NULL; obt_parse_register(i, "applications", parse_per_app_settings, NULL);