added function to reload external editors at any time
[geeqie.git] / src / layout_util.c
index 638fa7f..6255239 100644 (file)
@@ -1666,7 +1666,13 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
        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 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
                        {
                        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 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
                                "</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 @@ void layout_actions_setup(LayoutWindow *lw)
 
        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 @@ void layout_actions_setup(LayoutWindow *lw)
        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 @@ void layout_actions_setup(LayoutWindow *lw)
        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;