diff src/layout_util.c @ 1463:25168240a247

added function to reload external editors at any time eliminated init_after_global_options()
author nadvornik
date Fri, 20 Mar 2009 09:46:35 +0000
parents e015b6573d36
children 1b3751ac4743
line wrap: on
line diff
--- a/src/layout_util.c	Thu Mar 19 22:58:28 2009 +0000
+++ b/src/layout_util.c	Fri Mar 20 09:46:35 2009 +0000
@@ -1666,7 +1666,13 @@
 	GList *editors_list;
 	GList *work;
 	GList *old_path;
-	GString *desc = g_string_new(
+	GString *desc;
+	
+	lw->action_group_editors = gtk_action_group_new("MenuActionsExternal");
+	gtk_ui_manager_insert_action_group(lw->ui_manager, lw->action_group_editors, 1);
+
+	/* lw->action_group_editors contains translated entries, no translate func is required */
+	desc = g_string_new(
 				"<ui>"
 				"  <menubar name='MainMenu'>");
 
@@ -1684,7 +1690,7 @@
 			{
 			entry.stock_id = editor->key;
 			}
-		gtk_action_group_add_actions(lw->action_group_external, &entry, 1, lw);
+		gtk_action_group_add_actions(lw->action_group_editors, &entry, 1, lw);
 		
 		path = layout_actions_editor_menu_path(editor);
 		layout_actions_editor_add(desc, path, old_path);
@@ -1701,7 +1707,9 @@
 				"</ui>" );
 
 	error = NULL;
-	if (!gtk_ui_manager_add_ui_from_string(lw->ui_manager, desc->str, -1, &error))
+	
+	lw->ui_editors_id = gtk_ui_manager_add_ui_from_string(lw->ui_manager, desc->str, -1, &error);
+	if (!lw->ui_editors_id)
 		{
 		g_message("building menus failed: %s", error->message);
 		g_error_free(error);
@@ -1719,8 +1727,6 @@
 
 	lw->action_group = gtk_action_group_new("MenuActions");
 	gtk_action_group_set_translate_func(lw->action_group, menu_translate, NULL, NULL);
-	lw->action_group_external = gtk_action_group_new("MenuActionsExternal");
-	/* lw->action_group_external contains translated entries, no translate func is required */
 
 	gtk_action_group_add_actions(lw->action_group,
 				     menu_entries, G_N_ELEMENTS(menu_entries), lw);
@@ -1739,7 +1745,6 @@
 	lw->ui_manager = gtk_ui_manager_new();
 	gtk_ui_manager_set_add_tearoffs(lw->ui_manager, TRUE);
 	gtk_ui_manager_insert_action_group(lw->ui_manager, lw->action_group, 0);
-	gtk_ui_manager_insert_action_group(lw->ui_manager, lw->action_group_external, 1);
 
 	error = NULL;
 	if (!gtk_ui_manager_add_ui_from_string(lw->ui_manager, menu_ui_description, -1, &error))
@@ -1757,6 +1762,32 @@
 	layout_copy_path_update(lw);
 }
 
+void layout_editors_reload_all(void)
+{
+	GList *work;
+
+	work = layout_window_list;
+	while (work)
+		{
+		LayoutWindow *lw = work->data;
+		work = work->next;
+
+		gtk_ui_manager_remove_ui(lw->ui_manager, lw->ui_editors_id);
+		gtk_ui_manager_remove_action_group(lw->ui_manager, lw->action_group_editors);
+		g_object_unref(lw->action_group_editors);
+		}
+	
+	editor_load_descriptions();
+	
+	work = layout_window_list;
+	while (work)
+		{
+		LayoutWindow *lw = work->data;
+		work = work->next;
+		layout_actions_setup_editors(lw);
+		}
+}
+
 void layout_actions_add_window(LayoutWindow *lw, GtkWidget *window)
 {
 	GtkAccelGroup *group;