diff src/rcfile.c @ 1313:1ffa5222dc61

enabled commandline again
author nadvornik
date Mon, 23 Feb 2009 21:21:15 +0000
parents 55ea4962887a
children 8cca18bce950
line wrap: on
line diff
--- a/src/rcfile.c	Mon Feb 23 17:20:40 2009 +0000
+++ b/src/rcfile.c	Mon Feb 23 21:21:15 2009 +0000
@@ -773,6 +773,12 @@
  * xml file structure (private)
  *-----------------------------------------------------------------------------
  */
+struct _GQParserData
+{
+	GList *parse_func_stack;
+	gboolean startup; /* reading config for the first time - add commandline and call init_after_global_options() */
+	gboolean global_found;
+};
 
 
 void options_parse_leaf(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error)
@@ -839,12 +845,6 @@
 		}
 }
 
-static void options_parse_global_end(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, gpointer data, GError **error)
-{
-	DEBUG_1(" global end");
-	init_after_global_options();
-}
-
 static void options_parse_bar(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error)
 {
 	GtkWidget *bar = data;
@@ -901,12 +901,21 @@
 	if (g_ascii_strcasecmp(element_name, "global") == 0)
 		{
 		load_global_params(attribute_names, attribute_values);
-		options_parse_func_push(parser_data, options_parse_global, options_parse_global_end, NULL);
+		options_parse_func_push(parser_data, options_parse_global, NULL, NULL);
+		return;
 		}
-	else if (g_ascii_strcasecmp(element_name, "layout") == 0)
+	
+	if (parser_data->startup && !parser_data->global_found)
+		{
+		DEBUG_1(" global end");
+		parser_data->global_found = TRUE;
+		init_after_global_options();
+		}
+	
+	if (g_ascii_strcasecmp(element_name, "layout") == 0)
 		{
 		LayoutWindow *lw;
-		lw = layout_new_from_config(attribute_names, attribute_values);
+		lw = layout_new_from_config(attribute_names, attribute_values, parser_data->startup);
 		options_parse_func_push(parser_data, options_parse_layout, NULL, lw);
 		}
 	else
@@ -935,11 +944,6 @@
 	gpointer data;
 };
 
-struct _GQParserData
-{
-	GList *parse_func_stack;
-};
-
 void options_parse_func_push(GQParserData *parser_data, GQParserStartFunc start_func, GQParserEndFunc end_func, gpointer data)
 {
 	GQParserFuncData *func_data = g_new0(GQParserFuncData, 1);
@@ -1007,7 +1011,7 @@
  *-----------------------------------------------------------------------------
  */
 
-gboolean load_options_from(const gchar *utf8_path, ConfOptions *options)
+gboolean load_options_from(const gchar *utf8_path, ConfOptions *options, gboolean startup)
 {
 	gsize size;
 	gchar *buf;
@@ -1021,6 +1025,8 @@
 		}
 	
 	parser_data = g_new0(GQParserData, 1);
+	
+	parser_data->startup = startup;
 	options_parse_func_push(parser_data, options_parse_toplevel, NULL, NULL);
 	
 	context = g_markup_parse_context_new(&parser, 0, parser_data, NULL);