Fix #444: User-definable toolbar
[geeqie.git] / src / rcfile.c
index 2ac5922..bbdd354 100644 (file)
@@ -1073,13 +1073,24 @@ static void options_parse_bar(GQParserData *parser_data, GMarkupParseContext *co
                }
 }
 
-/* Just a dummy function to parse out old leftovers
- *
- * This function can be cleaned somedays.
- */
-static void options_parse_toolbar_and_statusbar(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error)
+static void options_parse_toolbar(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error)
 {
-       options_parse_func_push(parser_data, options_parse_leaf, NULL, NULL);
+       LayoutWindow *lw = data;
+       if (g_ascii_strcasecmp(element_name, "toolitem") == 0)
+               {
+               layout_toolbar_add_from_config(lw, TOOLBAR_MAIN, attribute_names, attribute_values);
+               options_parse_func_push(parser_data, options_parse_leaf, NULL, NULL);
+               }
+       else if (g_ascii_strcasecmp(element_name, "clear") == 0)
+               {
+               layout_toolbar_clear(lw, TOOLBAR_MAIN);
+               options_parse_func_push(parser_data, options_parse_leaf, NULL, NULL);
+               }
+       else
+               {
+               log_printf("unexpected in <toolbar>: <%s>\n", element_name);
+               options_parse_func_push(parser_data, options_parse_leaf, NULL, NULL);
+               }
 }
 
 static void options_parse_layout(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error)
@@ -1106,11 +1117,11 @@ static void options_parse_layout(GQParserData *parser_data, GMarkupParseContext
                }
        else if (g_ascii_strcasecmp(element_name, "toolbar") == 0)
                {
-               options_parse_func_push(parser_data, options_parse_toolbar_and_statusbar, NULL, NULL);
+               options_parse_func_push(parser_data, options_parse_toolbar, NULL, lw);
                }
        else if (g_ascii_strcasecmp(element_name, "statusbar") == 0)
                {
-               options_parse_func_push(parser_data, options_parse_toolbar_and_statusbar, NULL, NULL);
+               options_parse_func_push(parser_data, options_parse_leaf, NULL, NULL);
                }
        else
                {