diff --git a/app/actions/debug-commands.c b/app/actions/debug-commands.c index c1ce1f9c25..8b6abf2c50 100644 --- a/app/actions/debug-commands.c +++ b/app/actions/debug-commands.c @@ -114,15 +114,14 @@ debug_dump_keyboard_shortcuts_cmd_callback (GimpAction *action, GVariant *value, gpointer data) { - GimpDisplay *display; - GimpImageWindow *window; - GimpUIManager *manager; - GList *group_it; - GList *strings = NULL; + GimpDisplay *display; + GimpUIManager *manager; + GList *group_it; + GList *strings = NULL; + return_if_no_display (display, data); - window = gimp_display_shell_get_window (gimp_display_get_shell (display)); - manager = gimp_image_window_get_ui_manager (window); + manager = menus_get_image_manager_singleton (display->gimp); /* Gather formatted strings of keyboard shortcuts */ for (group_it = gimp_ui_manager_get_action_groups (manager); diff --git a/app/actions/view-commands.c b/app/actions/view-commands.c index 563ab11cef..07ef42a3f3 100644 --- a/app/actions/view-commands.c +++ b/app/actions/view-commands.c @@ -59,6 +59,8 @@ #include "dialogs/color-profile-dialog.h" #include "dialogs/dialogs.h" +#include "menus/menus.h" + #include "actions.h" #include "view-commands.h" @@ -324,7 +326,7 @@ view_show_all_cmd_callback (GimpAction *action, gimp_display_shell_set_show_all (shell, active); if (window) - SET_ACTIVE (gimp_image_window_get_ui_manager (window), + SET_ACTIVE (menus_get_image_manager_singleton (display->gimp), "view-show-all", shell->show_all); if (IS_ACTIVE_DISPLAY (display)) @@ -354,7 +356,7 @@ view_dot_for_dot_cmd_callback (GimpAction *action, gimp_display_shell_scale_set_dot_for_dot (shell, active); if (window) - SET_ACTIVE (gimp_image_window_get_ui_manager (window), + SET_ACTIVE (menus_get_image_manager_singleton (display->gimp), "view-dot-for-dot", shell->dot_for_dot); if (IS_ACTIVE_DISPLAY (display)) diff --git a/app/dialogs/dialogs-constructors.c b/app/dialogs/dialogs-constructors.c index b710d35919..af9f72719f 100644 --- a/app/dialogs/dialogs-constructors.c +++ b/app/dialogs/dialogs-constructors.c @@ -29,6 +29,8 @@ #include "config/gimpguiconfig.h" +#include "menus/menus.h" + #include "widgets/gimpbrusheditor.h" #include "widgets/gimpbrushfactoryview.h" #include "widgets/gimpbufferview.h" @@ -346,7 +348,7 @@ dialogs_tool_options_new (GimpDialogFactory *factory, gint view_size) { return gimp_tool_options_editor_new (context->gimp, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -365,7 +367,7 @@ dialogs_error_console_new (GimpDialogFactory *factory, gint view_size) { return gimp_error_console_new (context->gimp, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -375,7 +377,7 @@ dialogs_cursor_view_new (GimpDialogFactory *factory, gint view_size) { return gimp_cursor_view_new (context->gimp, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -385,7 +387,7 @@ dialogs_dashboard_new (GimpDialogFactory *factory, gint view_size) { return gimp_dashboard_new (context->gimp, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } @@ -401,7 +403,7 @@ dialogs_image_list_view_new (GimpDialogFactory *factory, context->gimp->images, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -415,7 +417,7 @@ dialogs_brush_list_view_new (GimpDialogFactory *factory, context, TRUE, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -428,7 +430,7 @@ dialogs_dynamics_list_view_new (GimpDialogFactory *factory, context->gimp->dynamics_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -441,7 +443,7 @@ dialogs_mypaint_brush_list_view_new (GimpDialogFactory *factory, context->gimp->mybrush_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory), + menus_get_global_menu_factory (context->gimp), "", "/mypaint-brushes-popup", "mypaint-brushes"); @@ -457,7 +459,7 @@ dialogs_pattern_list_view_new (GimpDialogFactory *factory, context->gimp->pattern_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -470,7 +472,7 @@ dialogs_gradient_list_view_new (GimpDialogFactory *factory, context->gimp->gradient_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory), + menus_get_global_menu_factory (context->gimp), "", "/gradients-popup", "gradients"); @@ -486,7 +488,7 @@ dialogs_palette_list_view_new (GimpDialogFactory *factory, context->gimp->palette_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory), + menus_get_global_menu_factory (context->gimp), "", "/palettes-popup", "palettes"); @@ -502,7 +504,7 @@ dialogs_font_list_view_new (GimpDialogFactory *factory, context->gimp->font_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -515,7 +517,7 @@ dialogs_buffer_list_view_new (GimpDialogFactory *factory, context->gimp->named_buffers, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -528,7 +530,7 @@ dialogs_tool_preset_list_view_new (GimpDialogFactory *factory, context->gimp->tool_preset_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -541,7 +543,7 @@ dialogs_document_list_view_new (GimpDialogFactory *factory, context->gimp->documents, context, view_size, 0, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -554,7 +556,7 @@ dialogs_template_list_view_new (GimpDialogFactory *factory, context->gimp->templates, context, view_size, 0, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } @@ -570,7 +572,7 @@ dialogs_image_grid_view_new (GimpDialogFactory *factory, context->gimp->images, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -584,7 +586,7 @@ dialogs_brush_grid_view_new (GimpDialogFactory *factory, context, TRUE, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -597,7 +599,7 @@ dialogs_dynamics_grid_view_new (GimpDialogFactory *factory, context->gimp->dynamics_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -610,7 +612,7 @@ dialogs_mypaint_brush_grid_view_new (GimpDialogFactory *factory, context->gimp->mybrush_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory), + menus_get_global_menu_factory (context->gimp), "", "/mypaint-brushes-popup", "mypaint-brushes"); @@ -626,7 +628,7 @@ dialogs_pattern_grid_view_new (GimpDialogFactory *factory, context->gimp->pattern_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -639,7 +641,7 @@ dialogs_gradient_grid_view_new (GimpDialogFactory *factory, context->gimp->gradient_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory), + menus_get_global_menu_factory (context->gimp), "", "/gradients-popup", "gradients"); @@ -655,7 +657,7 @@ dialogs_palette_grid_view_new (GimpDialogFactory *factory, context->gimp->palette_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory), + menus_get_global_menu_factory (context->gimp), "", "/palettes-popup", "palettes"); @@ -671,7 +673,7 @@ dialogs_font_grid_view_new (GimpDialogFactory *factory, context->gimp->font_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -684,7 +686,7 @@ dialogs_buffer_grid_view_new (GimpDialogFactory *factory, context->gimp->named_buffers, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -697,7 +699,7 @@ dialogs_tool_preset_grid_view_new (GimpDialogFactory *factory, context->gimp->tool_preset_factory, context, view_size, 1, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -710,7 +712,7 @@ dialogs_document_grid_view_new (GimpDialogFactory *factory, context->gimp->documents, context, view_size, 0, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -723,7 +725,7 @@ dialogs_template_grid_view_new (GimpDialogFactory *factory, context->gimp->templates, context, view_size, 0, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } @@ -741,7 +743,7 @@ dialogs_layer_list_view_new (GimpDialogFactory *factory, return gimp_item_tree_view_new (GIMP_TYPE_LAYER_TREE_VIEW, view_size, 2, TRUE, gimp_context_get_image (context), - gimp_dialog_factory_get_menu_factory (factory), + menus_get_global_menu_factory (context->gimp), "", "/layers-popup"); } @@ -758,7 +760,7 @@ dialogs_channel_list_view_new (GimpDialogFactory *factory, return gimp_item_tree_view_new (GIMP_TYPE_CHANNEL_TREE_VIEW, view_size, 1, TRUE, gimp_context_get_image (context), - gimp_dialog_factory_get_menu_factory (factory), + menus_get_global_menu_factory (context->gimp), "", "/channels-popup"); } @@ -775,7 +777,7 @@ dialogs_vectors_list_view_new (GimpDialogFactory *factory, return gimp_item_tree_view_new (GIMP_TYPE_VECTORS_TREE_VIEW, view_size, 1, TRUE, gimp_context_get_image (context), - gimp_dialog_factory_get_menu_factory (factory), + menus_get_global_menu_factory (context->gimp), "", "/vectors-popup"); } @@ -786,7 +788,7 @@ dialogs_colormap_editor_new (GimpDialogFactory *factory, GimpUIManager *ui_manager, gint view_size) { - return gimp_colormap_editor_new (gimp_dialog_factory_get_menu_factory (factory)); + return gimp_colormap_editor_new (menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -804,7 +806,7 @@ dialogs_selection_editor_new (GimpDialogFactory *factory, GimpUIManager *ui_manager, gint view_size) { - return gimp_selection_editor_new (gimp_dialog_factory_get_menu_factory (factory)); + return gimp_selection_editor_new (menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -813,7 +815,7 @@ dialogs_symmetry_editor_new (GimpDialogFactory *factory, GimpUIManager *ui_manager, gint view_size) { - return gimp_symmetry_editor_new (gimp_dialog_factory_get_menu_factory (factory)); + return gimp_symmetry_editor_new (menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -823,7 +825,7 @@ dialogs_undo_editor_new (GimpDialogFactory *factory, gint view_size) { return gimp_undo_editor_new (context->gimp->config, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -832,7 +834,7 @@ dialogs_sample_point_editor_new (GimpDialogFactory *factory, GimpUIManager *ui_manager, gint view_size) { - return gimp_sample_point_editor_new (gimp_dialog_factory_get_menu_factory (factory)); + return gimp_sample_point_editor_new (menus_get_global_menu_factory (context->gimp)); } @@ -844,7 +846,7 @@ dialogs_navigation_editor_new (GimpDialogFactory *factory, GimpUIManager *ui_manager, gint view_size) { - return gimp_navigation_editor_new (gimp_dialog_factory_get_menu_factory (factory)); + return gimp_navigation_editor_new (menus_get_global_menu_factory (context->gimp)); } @@ -871,7 +873,7 @@ dialogs_brush_editor_get (GimpDialogFactory *factory, gint view_size) { return gimp_brush_editor_new (context, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -881,7 +883,7 @@ dialogs_dynamics_editor_get (GimpDialogFactory *factory, gint view_size) { return gimp_dynamics_editor_new (context, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -891,7 +893,7 @@ dialogs_gradient_editor_get (GimpDialogFactory *factory, gint view_size) { return gimp_gradient_editor_new (context, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -901,7 +903,7 @@ dialogs_palette_editor_get (GimpDialogFactory *factory, gint view_size) { return gimp_palette_editor_new (context, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } GtkWidget * @@ -911,5 +913,5 @@ dialogs_tool_preset_editor_get (GimpDialogFactory *factory, gint view_size) { return gimp_tool_preset_editor_new (context, - gimp_dialog_factory_get_menu_factory (factory)); + menus_get_global_menu_factory (context->gimp)); } diff --git a/app/dialogs/dialogs.c b/app/dialogs/dialogs.c index 608a15ed39..d637bd4b6b 100644 --- a/app/dialogs/dialogs.c +++ b/app/dialogs/dialogs.c @@ -523,18 +523,14 @@ dialogs_restore_window (GimpDialogFactory *factory, /* public functions */ void -dialogs_init (Gimp *gimp, - GimpMenuFactory *menu_factory) +dialogs_init (Gimp *gimp) { GimpDialogFactory *factory = NULL; gint i = 0; g_return_if_fail (GIMP_IS_GIMP (gimp)); - g_return_if_fail (GIMP_IS_MENU_FACTORY (menu_factory)); - factory = gimp_dialog_factory_new ("toplevel", - gimp_get_user_context (gimp), - menu_factory); + factory = gimp_dialog_factory_new ("toplevel", gimp_get_user_context (gimp)); gimp_dialog_factory_set_singleton (factory); for (i = 0; i < G_N_ELEMENTS (entries); i++) diff --git a/app/dialogs/dialogs.h b/app/dialogs/dialogs.h index 387dfa2fa4..6ffe780407 100644 --- a/app/dialogs/dialogs.h +++ b/app/dialogs/dialogs.h @@ -23,8 +23,7 @@ extern GimpDialogFactory *global_dialog_factory; extern GimpContainer *global_recent_docks; -void dialogs_init (Gimp *gimp, - GimpMenuFactory *menu_factory); +void dialogs_init (Gimp *gimp); void dialogs_exit (Gimp *gimp); void dialogs_load_recent_docks (Gimp *gimp); diff --git a/app/display/gimpdisplayshell-actions.c b/app/display/gimpdisplayshell-actions.c index e6c87eed90..76574ce1c9 100644 --- a/app/display/gimpdisplayshell-actions.c +++ b/app/display/gimpdisplayshell-actions.c @@ -25,6 +25,8 @@ #include "core/gimp.h" #include "core/gimpcontext.h" +#include "menus/menus.h" + #include "widgets/gimpactiongroup.h" #include "widgets/gimpuimanager.h" @@ -49,7 +51,7 @@ gimp_display_shell_set_action_sensitive (GimpDisplayShell *shell, if (window && gimp_image_window_get_active_shell (window) == shell) { - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); GimpActionGroup *action_group; action_group = gimp_ui_manager_get_action_group (manager, "view"); @@ -87,7 +89,7 @@ gimp_display_shell_set_action_active (GimpDisplayShell *shell, if (window && gimp_image_window_get_active_shell (window) == shell) { - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); GimpActionGroup *action_group; action_group = gimp_ui_manager_get_action_group (manager, "view"); @@ -125,7 +127,7 @@ gimp_display_shell_set_action_color (GimpDisplayShell *shell, if (window && gimp_image_window_get_active_shell (window) == shell) { - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); GimpActionGroup *action_group; action_group = gimp_ui_manager_get_action_group (manager, "view"); diff --git a/app/display/gimpdisplayshell-callbacks.c b/app/display/gimpdisplayshell-callbacks.c index 8c17e7f9e6..2768f63e88 100644 --- a/app/display/gimpdisplayshell-callbacks.c +++ b/app/display/gimpdisplayshell-callbacks.c @@ -29,6 +29,8 @@ #include "core/gimpimage.h" #include "core/gimpimage-quick-mask.h" +#include "menus/menus.h" + #include "widgets/gimpcairo-wilber.h" #include "widgets/gimpuimanager.h" @@ -349,7 +351,7 @@ gimp_display_shell_quick_mask_button_press (GtkWidget *widget, if (window) { - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); gimp_ui_manager_ui_popup_at_widget (manager, "/quick-mask-popup", @@ -380,7 +382,7 @@ gimp_display_shell_quick_mask_toggled (GtkWidget *widget, if (window) { - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); gimp_ui_manager_toggle_action (manager, "quick-mask", "quick-mask-toggle", diff --git a/app/display/gimpdisplayshell-close.c b/app/display/gimpdisplayshell-close.c index c09da4196e..bfe53b147e 100644 --- a/app/display/gimpdisplayshell-close.c +++ b/app/display/gimpdisplayshell-close.c @@ -34,6 +34,8 @@ #include "core/gimpcontext.h" #include "core/gimpimage.h" +#include "menus/menus.h" + #include "widgets/gimphelp-ids.h" #include "widgets/gimpmessagebox.h" #include "widgets/gimpmessagedialog.h" @@ -123,7 +125,7 @@ gimp_display_shell_close (GimpDisplayShell *shell, if (window) { - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); /* Activate the action instead of simply calling gimp_exit(), so * the quit action's sensitivity is taken into account. @@ -381,7 +383,7 @@ gimp_display_shell_close_response (GtkWidget *widget, if (window) { - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); gimp_image_window_set_active_shell (window, shell); diff --git a/app/display/gimpdisplayshell-tool-events.c b/app/display/gimpdisplayshell-tool-events.c index 9232b47b24..b0f4a47d20 100644 --- a/app/display/gimpdisplayshell-tool-events.c +++ b/app/display/gimpdisplayshell-tool-events.c @@ -38,6 +38,8 @@ #include "core/gimpimage-pick-item.h" #include "core/gimpitem.h" +#include "menus/menus.h" + #include "widgets/gimpaction.h" #include "widgets/gimpcontrollers.h" #include "widgets/gimpcontrollerkeyboard.h" @@ -273,8 +275,7 @@ gimp_display_shell_canvas_no_image_events (GtkWidget *canvas, GdkEventButton *bevent = (GdkEventButton *) event; if (bevent->button == 1) { - GimpImageWindow *window = gimp_display_shell_get_window (shell); - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); gimp_ui_manager_activate_action (manager, "file", "file-open"); } @@ -2103,9 +2104,8 @@ static gboolean gimp_display_shell_tab_pressed (GimpDisplayShell *shell, const GdkEventKey *kevent) { - GimpImageWindow *window = gimp_display_shell_get_window (shell); - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); - GimpImage *image = gimp_display_get_image (shell->display); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); + GimpImage *image = gimp_display_get_image (shell->display); if (kevent->state & GDK_CONTROL_MASK) { @@ -2292,11 +2292,9 @@ gimp_display_shell_initialize_tool (GimpDisplayShell *shell, * just calling gimp_context_tool_changed(). See * GimpGeglProcedure and bug #776370. */ - GimpImageWindow *window; - GimpUIManager *manager; + GimpUIManager *manager; - window = gimp_display_shell_get_window (shell); - manager = gimp_image_window_get_ui_manager (window); + manager = menus_get_image_manager_singleton (shell->display->gimp); gimp_filter_history_add (gimp, procedure); gimp_ui_manager_activate_action (manager, "filters", diff --git a/app/display/gimpdisplayshell.c b/app/display/gimpdisplayshell.c index 3bb7f3dbd2..4386c2ddef 100644 --- a/app/display/gimpdisplayshell.c +++ b/app/display/gimpdisplayshell.c @@ -51,6 +51,8 @@ #include "core/gimpprojection.h" #include "core/gimptemplate.h" +#include "menus/menus.h" + #include "widgets/gimpdevices.h" #include "widgets/gimphelp-ids.h" #include "widgets/gimpuimanager.h" @@ -1981,7 +1983,7 @@ gimp_display_shell_flush (GimpDisplayShell *shell) if (window && gimp_image_window_get_active_shell (window) == shell) { - GimpUIManager *manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *manager = menus_get_image_manager_singleton (shell->display->gimp); gimp_ui_manager_update (manager, shell->display); } diff --git a/app/display/gimpimagewindow.c b/app/display/gimpimagewindow.c index 4b21603b73..0d6fb06300 100644 --- a/app/display/gimpimagewindow.c +++ b/app/display/gimpimagewindow.c @@ -62,6 +62,8 @@ #include "widgets/gimpviewrenderer.h" #include "widgets/gimpwidgets-utils.h" +#include "menus/menus.h" + #include "gimpdisplay.h" #include "gimpdisplay-foreach.h" #include "gimpdisplayshell.h" @@ -110,7 +112,6 @@ typedef struct _GimpImageWindowPrivate GimpImageWindowPrivate; struct _GimpImageWindowPrivate { Gimp *gimp; - GimpUIManager *menubar_manager; GimpDialogFactory *dialog_factory; GList *shells; @@ -346,7 +347,7 @@ gimp_image_window_constructed (GObject *object) { GimpImageWindow *window = GIMP_IMAGE_WINDOW (object); GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); - GimpMenuFactory *menu_factory; + GimpUIManager *menubar_manager; GimpGuiConfig *config; GimpMenuModel *model; gboolean use_gtk_menubar = TRUE; @@ -356,12 +357,6 @@ gimp_image_window_constructed (GObject *object) gimp_assert (GIMP_IS_GIMP (private->gimp)); gimp_assert (GIMP_IS_DIALOG_FACTORY (private->dialog_factory)); - menu_factory = gimp_dialog_factory_get_menu_factory (private->dialog_factory); - - private->menubar_manager = gimp_menu_factory_manager_new (menu_factory, - "", - window); - g_signal_connect_object (private->dialog_factory, "dock-window-added", G_CALLBACK (gimp_image_window_update_ui_manager), window, G_CONNECT_SWAPPED); @@ -369,10 +364,11 @@ gimp_image_window_constructed (GObject *object) G_CALLBACK (gimp_image_window_update_ui_manager), window, G_CONNECT_SWAPPED); - g_signal_connect (private->menubar_manager, "show-tooltip", + menubar_manager = menus_get_image_manager_singleton (private->gimp); + g_signal_connect (menubar_manager, "show-tooltip", G_CALLBACK (gimp_image_window_show_tooltip), window); - g_signal_connect (private->menubar_manager, "hide-tooltip", + g_signal_connect (menubar_manager, "hide-tooltip", G_CALLBACK (gimp_image_window_hide_tooltip), window); @@ -384,7 +380,7 @@ gimp_image_window_constructed (GObject *object) gtk_widget_show (private->main_vbox); /* Create the menubar */ - model = gimp_ui_manager_get_model (private->menubar_manager, "/image-menubar"); + model = gimp_ui_manager_get_model (menubar_manager, "/image-menubar"); #ifndef GDK_WINDOWING_QUARTZ /* macOS has its native menubar system, which is implemented by @@ -404,7 +400,7 @@ gimp_image_window_constructed (GObject *object) } else { - private->menubar = gimp_menu_bar_new (model, private->menubar_manager); + private->menubar = gimp_menu_bar_new (model, menubar_manager); g_object_unref (model); gtk_box_pack_start (GTK_BOX (private->main_vbox), @@ -446,7 +442,7 @@ gimp_image_window_constructed (GObject *object) private->left_docks = gimp_dock_columns_new (gimp_get_user_context (private->gimp), private->dialog_factory, - private->menubar_manager); + menubar_manager); gtk_paned_pack1 (GTK_PANED (private->left_hpane), private->left_docks, FALSE, FALSE); gtk_widget_set_visible (private->left_docks, config->single_window_mode); @@ -482,7 +478,7 @@ gimp_image_window_constructed (GObject *object) private->right_docks = gimp_dock_columns_new (gimp_get_user_context (private->gimp), private->dialog_factory, - private->menubar_manager); + menubar_manager); gtk_paned_pack2 (GTK_PANED (private->right_hpane), private->right_docks, FALSE, FALSE); gtk_widget_set_visible (private->right_docks, config->single_window_mode); @@ -519,8 +515,6 @@ gimp_image_window_dispose (GObject *object) private->dialog_factory = NULL; } - g_clear_object (&private->menubar_manager); - if (private->update_ui_manager_idle_id) { g_source_remove (private->update_ui_manager_idle_id); @@ -608,7 +602,7 @@ gimp_image_window_delete_event (GtkWidget *widget, GimpGuiConfig *config = GIMP_GUI_CONFIG (private->gimp->config); if (config->single_window_mode) - gimp_ui_manager_activate_action (gimp_image_window_get_ui_manager (window), + gimp_ui_manager_activate_action (menus_get_image_manager_singleton (private->gimp), "file", "file-quit"); else if (shell) gimp_display_shell_close (shell, FALSE); @@ -865,7 +859,7 @@ gimp_image_window_dock_container_get_ui_manager (GimpDockContainer *dock_contain { GimpImageWindow *window = GIMP_IMAGE_WINDOW (dock_container); - return gimp_image_window_get_ui_manager (window); + return menus_get_image_manager_singleton (GIMP_IMAGE_WINDOW_GET_PRIVATE (window)->gimp); } void @@ -1184,18 +1178,6 @@ gimp_image_window_destroy (GimpImageWindow *window) gtk_widget_destroy (GTK_WIDGET (window)); } -GimpUIManager * -gimp_image_window_get_ui_manager (GimpImageWindow *window) -{ - GimpImageWindowPrivate *private; - - g_return_val_if_fail (GIMP_IS_IMAGE_WINDOW (window), FALSE); - - private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); - - return private->menubar_manager; -} - GimpDockColumns * gimp_image_window_get_left_docks (GimpImageWindow *window) { @@ -1895,7 +1877,7 @@ gimp_image_window_update_ui_manager_idle (GimpImageWindow *window) gimp_assert (private->active_shell != NULL); - gimp_ui_manager_update (private->menubar_manager, + gimp_ui_manager_update (menus_get_image_manager_singleton (private->active_shell->display->gimp), private->active_shell->display); private->update_ui_manager_idle_id = 0; @@ -2099,8 +2081,7 @@ gimp_image_window_disconnect_from_active_shell (GimpImageWindow *window) gimp_image_window_shell_title_notify, window); - if (private->menubar_manager) - gimp_image_window_hide_tooltip (private->menubar_manager, window); + gimp_image_window_hide_tooltip (menus_get_image_manager_singleton (private->gimp), window); if (private->update_ui_manager_idle_id) { diff --git a/app/display/gimpimagewindow.h b/app/display/gimpimagewindow.h index 10e180d150..73b792a555 100644 --- a/app/display/gimpimagewindow.h +++ b/app/display/gimpimagewindow.h @@ -51,7 +51,6 @@ GimpImageWindow * gimp_image_window_new (Gimp *gi GdkMonitor *monitor); void gimp_image_window_destroy (GimpImageWindow *window); -GimpUIManager * gimp_image_window_get_ui_manager (GimpImageWindow *window); GimpDockColumns * gimp_image_window_get_left_docks (GimpImageWindow *window); GimpDockColumns * gimp_image_window_get_right_docks (GimpImageWindow *window); diff --git a/app/display/gimpsinglewindowstrategy.c b/app/display/gimpsinglewindowstrategy.c index 979c7785de..1bdd1fd1ac 100644 --- a/app/display/gimpsinglewindowstrategy.c +++ b/app/display/gimpsinglewindowstrategy.c @@ -29,6 +29,8 @@ #include "core/gimp.h" +#include "menus/menus.h" + #include "widgets/gimpdialogfactory.h" #include "widgets/gimpdock.h" #include "widgets/gimpdockbook.h" @@ -92,7 +94,7 @@ gimp_single_window_strategy_show_dockable_dialog (GimpWindowStrategy *strategy, if (! gimp_image_window_has_toolbox (window)) { GimpDockColumns *columns; - GimpUIManager *ui_manager = gimp_image_window_get_ui_manager (window); + GimpUIManager *ui_manager = menus_get_image_manager_singleton (gimp); widget = gimp_dialog_factory_dialog_new (factory, monitor, ui_manager, diff --git a/app/display/gimptoolpath.c b/app/display/gimptoolpath.c index cf2444aaf2..e328e6251f 100644 --- a/app/display/gimptoolpath.c +++ b/app/display/gimptoolpath.c @@ -32,6 +32,10 @@ #include "display-types.h" +#include "core/gimpcontext.h" + +#include "menus/menus.h" + #include "vectors/gimpanchor.h" #include "vectors/gimpbezierstroke.h" #include "vectors/gimpvectors.h" @@ -127,8 +131,6 @@ struct _GimpToolPathPrivate GimpCanvasItem *path; GList *items; - - GimpUIManager *ui_manager; }; @@ -314,13 +316,10 @@ gimp_tool_path_constructed (GObject *object) static void gimp_tool_path_dispose (GObject *object) { - GimpToolPath *path = GIMP_TOOL_PATH (object); - GimpToolPathPrivate *private = path->private; + GimpToolPath *path = GIMP_TOOL_PATH (object); gimp_tool_path_set_vectors (path, NULL); - g_clear_object (&private->ui_manager); - G_OBJECT_CLASS (parent_class)->dispose (object); } @@ -1298,21 +1297,17 @@ gimp_tool_path_get_popup (GimpToolWidget *widget, { GimpToolPath *path = GIMP_TOOL_PATH (widget); GimpToolPathPrivate *private = path->private; + GimpDisplayShell *shell = gimp_tool_widget_get_shell (widget); + GimpImageWindow *image_window; + GimpDialogFactory *dialog_factory; + GimpMenuFactory *menu_factory; + GimpUIManager *ui_manager; - if (!private->ui_manager) - { - GimpDisplayShell *shell = gimp_tool_widget_get_shell (widget); - GimpImageWindow *image_window; - GimpDialogFactory *dialog_factory; + image_window = gimp_display_shell_get_window (shell); + dialog_factory = gimp_dock_container_get_dialog_factory (GIMP_DOCK_CONTAINER (image_window)); - image_window = gimp_display_shell_get_window (shell); - dialog_factory = gimp_dock_container_get_dialog_factory (GIMP_DOCK_CONTAINER (image_window)); - - private->ui_manager = - gimp_menu_factory_manager_new (gimp_dialog_factory_get_menu_factory (dialog_factory), - "", - widget); - } + menu_factory = menus_get_global_menu_factory (gimp_dialog_factory_get_context (dialog_factory)->gimp); + ui_manager = gimp_menu_factory_get_manager (menu_factory, "", widget); /* we're using a side effects of gimp_tool_path_get_function * that update the private->cur_* variables. */ @@ -1320,10 +1315,10 @@ gimp_tool_path_get_popup (GimpToolWidget *widget, if (private->cur_stroke) { - gimp_ui_manager_update (private->ui_manager, widget); + gimp_ui_manager_update (ui_manager, widget); *ui_path = "/vector-toolpath-popup"; - return private->ui_manager; + return ui_manager; } return NULL; diff --git a/app/gui/gui-vtable.c b/app/gui/gui-vtable.c index 706c56858c..b9a2eafbe7 100644 --- a/app/gui/gui-vtable.c +++ b/app/gui/gui-vtable.c @@ -683,7 +683,7 @@ gui_pdb_dialog_new (Gimp *gimp, "select-type", gimp_container_get_children_type (container), "initial-object", object, "callback-name", callback_name, - "menu-factory", global_menu_factory, + "menu-factory", menus_get_global_menu_factory (gimp), NULL); names = gimp_properties_append_valist (dialog_type, diff --git a/app/gui/gui.c b/app/gui/gui.c index 4deb3b3504..a771998ca8 100644 --- a/app/gui/gui.c +++ b/app/gui/gui.c @@ -152,7 +152,6 @@ static void gui_check_unique_accelerators (Gimp *gimp); /* private variables */ static Gimp *the_gui_gimp = NULL; -static GimpUIManager *image_ui_manager = NULL; static GimpUIConfigurer *ui_configurer = NULL; static GdkMonitor *initial_monitor = NULL; @@ -506,10 +505,10 @@ gui_restore_callback (Gimp *gimp, } actions_init (gimp); - menus_init (gimp, global_action_factory); + menus_init (gimp); gimp_render_init (gimp); - dialogs_init (gimp, global_menu_factory); + dialogs_init (gimp); gimp_clipboard_init (gimp); if (gimp_get_clipboard_image (gimp)) @@ -537,6 +536,7 @@ gui_restore_after_callback (Gimp *gimp, GimpInitStatusFunc status_callback) { GimpGuiConfig *gui_config = GIMP_GUI_CONFIG (gimp->config); + GimpUIManager *image_ui_manager; GimpDisplay *display; if (gimp->be_verbose) @@ -568,9 +568,7 @@ gui_restore_after_callback (Gimp *gimp, "gimp", gimp, NULL); - image_ui_manager = gimp_menu_factory_manager_new (global_menu_factory, - "", - gimp); + image_ui_manager = menus_get_image_manager_singleton (gimp); gimp_ui_manager_update (image_ui_manager, gimp); /* Check that every accelerator is unique. */ @@ -710,9 +708,6 @@ gui_exit_after_callback (Gimp *gimp, gimp_action_history_exit (gimp); - g_object_unref (image_ui_manager); - image_ui_manager = NULL; - g_object_unref (ui_configurer); ui_configurer = NULL; @@ -844,7 +839,8 @@ gui_display_changed (GimpContext *context, } } - gimp_ui_manager_update (image_ui_manager, display); + gimp_ui_manager_update (menus_get_image_manager_singleton (gimp), + display); } typedef struct diff --git a/app/menus/menus.c b/app/menus/menus.c index 6043449358..d3714b0666 100644 --- a/app/menus/menus.c +++ b/app/menus/menus.c @@ -24,6 +24,8 @@ #include "menus-types.h" +#include "actions/actions.h" + #include "config/gimpconfig-file.h" #include "config/gimpguiconfig.h" @@ -51,11 +53,6 @@ static void menus_remove_accels (gpointer data, gboolean changed); -/* global variables */ - -GimpMenuFactory * global_menu_factory = NULL; - - /* private variables */ static gboolean menurc_deleted = FALSE; @@ -64,17 +61,16 @@ static gboolean menurc_deleted = FALSE; /* public functions */ void -menus_init (Gimp *gimp, - GimpActionFactory *action_factory) +menus_init (Gimp *gimp) { + GimpMenuFactory *global_menu_factory = NULL; + g_return_if_fail (GIMP_IS_GIMP (gimp)); - g_return_if_fail (GIMP_IS_ACTION_FACTORY (action_factory)); - g_return_if_fail (global_menu_factory == NULL); /* We need to make sure the property is installed before using it */ g_type_class_ref (GTK_TYPE_MENU); - global_menu_factory = gimp_menu_factory_new (gimp, action_factory); + global_menu_factory = menus_get_global_menu_factory (gimp); gimp_menu_factory_manager_register (global_menu_factory, "", "file", @@ -401,10 +397,9 @@ void menus_exit (Gimp *gimp) { g_return_if_fail (GIMP_IS_GIMP (gimp)); - g_return_if_fail (global_menu_factory != NULL); + g_return_if_fail (menus_get_global_menu_factory (gimp) != NULL); - g_object_unref (global_menu_factory); - global_menu_factory = NULL; + g_object_unref (menus_get_global_menu_factory (gimp)); } void @@ -501,6 +496,29 @@ menus_remove (Gimp *gimp) gtk_accel_map_foreach (gimp, menus_remove_accels); } +GimpMenuFactory * +menus_get_global_menu_factory (Gimp *gimp) +{ + static GimpMenuFactory *global_menu_factory = NULL; + + if (global_menu_factory == NULL) + global_menu_factory = gimp_menu_factory_new (gimp, global_action_factory); + + return global_menu_factory; +} + +GimpUIManager * +menus_get_image_manager_singleton (Gimp *gimp) +{ + static GimpUIManager *image_ui_manager = NULL; + + if (image_ui_manager == NULL) + image_ui_manager = gimp_menu_factory_get_manager (menus_get_global_menu_factory (gimp), + "", gimp); + + return image_ui_manager; +} + /* private functions */ diff --git a/app/menus/menus.h b/app/menus/menus.h index ba59045f73..70dfe730eb 100644 --- a/app/menus/menus.h +++ b/app/menus/menus.h @@ -19,20 +19,19 @@ #define __MENUS_H__ -extern GimpMenuFactory *global_menu_factory; +void menus_init (Gimp *gimp); +void menus_exit (Gimp *gimp); +void menus_restore (Gimp *gimp); +void menus_save (Gimp *gimp, + gboolean always_save); -void menus_init (Gimp *gimp, - GimpActionFactory *action_factory); -void menus_exit (Gimp *gimp); +gboolean menus_clear (Gimp *gimp, + GError **error); +void menus_remove (Gimp *gimp); -void menus_restore (Gimp *gimp); -void menus_save (Gimp *gimp, - gboolean always_save); - -gboolean menus_clear (Gimp *gimp, - GError **error); -void menus_remove (Gimp *gimp); +GimpMenuFactory * menus_get_global_menu_factory (Gimp *gimp); +GimpUIManager * menus_get_image_manager_singleton (Gimp *gimp); #endif /* __MENUS_H__ */ diff --git a/app/tests/gimp-app-test-utils.c b/app/tests/gimp-app-test-utils.c index 1314e89bc3..dbf0436148 100644 --- a/app/tests/gimp-app-test-utils.c +++ b/app/tests/gimp-app-test-utils.c @@ -26,6 +26,8 @@ #include "display/gimpdisplayshell.h" #include "display/gimpimagewindow.h" +#include "menus/menus.h" + #include "widgets/gimpuimanager.h" #include "widgets/gimpdialogfactory.h" @@ -316,26 +318,7 @@ else GimpUIManager * gimp_test_utils_get_ui_manager (Gimp *gimp) { - GimpDisplay *display = NULL; - GimpDisplayShell *shell = NULL; - GtkWidget *toplevel = NULL; - GimpImageWindow *image_window = NULL; - GimpUIManager *ui_manager = NULL; - - display = GIMP_DISPLAY (gimp_get_empty_display (gimp)); - - /* If there were not empty display, assume that there is at least - * one image display and use that - */ - if (! display) - display = GIMP_DISPLAY (gimp_get_display_iter (gimp)->data); - - shell = gimp_display_get_shell (display); - toplevel = gtk_widget_get_toplevel (GTK_WIDGET (shell)); - image_window = GIMP_IMAGE_WINDOW (toplevel); - ui_manager = gimp_image_window_get_ui_manager (image_window); - - return ui_manager; + return menus_get_image_manager_singleton (gimp); } /** diff --git a/app/tests/test-ui.c b/app/tests/test-ui.c index 8c44d2ad53..6d2c03f90b 100644 --- a/app/tests/test-ui.c +++ b/app/tests/test-ui.c @@ -34,6 +34,8 @@ #include "display/gimpdisplayshell-transform.h" #include "display/gimpimagewindow.h" +#include "menus/menus.h" + #include "widgets/gimpdialogfactory.h" #include "widgets/gimpdock.h" #include "widgets/gimpdockable.h" @@ -111,8 +113,7 @@ tool_options_editor_updates (gconstpointer data) GimpDisplay *display = GIMP_DISPLAY (gimp_get_empty_display (gimp)); GimpDisplayShell *shell = gimp_display_get_shell (display); GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (shell)); - GimpImageWindow *image_window = GIMP_IMAGE_WINDOW (toplevel); - GimpUIManager *ui_manager = gimp_image_window_get_ui_manager (image_window); + GimpUIManager *ui_manager = menus_get_image_manager_singleton (gimp); GtkWidget *dockable = gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (), gimp_widget_get_monitor (toplevel), NULL /*ui_manager*/, diff --git a/app/tools/gimptexttool-editor.c b/app/tools/gimptexttool-editor.c index 7a9b4f51d8..b499484640 100644 --- a/app/tools/gimptexttool-editor.c +++ b/app/tools/gimptexttool-editor.c @@ -35,6 +35,8 @@ #include "core/gimpimage.h" #include "core/gimptoolinfo.h" +#include "menus/menus.h" + #include "text/gimptext.h" #include "text/gimptextlayout.h" @@ -1354,7 +1356,7 @@ gimp_text_tool_editor_dialog (GimpTextTool *text_tool) text_tool->editor_dialog = gimp_text_options_editor_new (parent, tool->tool_info->gimp, options, - gimp_dialog_factory_get_menu_factory (dialog_factory), + menus_get_global_menu_factory (tool->tool_info->gimp), _("GIMP Text Editor"), text_tool->proxy, text_tool->buffer, xres, yres); diff --git a/app/tools/gimptexttool.c b/app/tools/gimptexttool.c index cc8a77f5e2..169848b15b 100644 --- a/app/tools/gimptexttool.c +++ b/app/tools/gimptexttool.c @@ -45,6 +45,8 @@ #include "core/gimptoolinfo.h" #include "core/gimpundostack.h" +#include "menus/menus.h" + #include "text/gimptext.h" #include "text/gimptext-vectors.h" #include "text/gimptextlayer.h" @@ -312,7 +314,6 @@ gimp_text_tool_finalize (GObject *object) g_clear_object (&text_tool->proxy); g_clear_object (&text_tool->buffer); - g_clear_object (&text_tool->ui_manager); gimp_text_tool_editor_finalize (text_tool); @@ -836,26 +837,17 @@ gimp_text_tool_get_popup (GimpTool *tool, coords->x, coords->y)) { - if (! text_tool->ui_manager) - { - GimpDisplayShell *shell = gimp_display_get_shell (tool->display); - GimpImageWindow *image_window; - GimpDialogFactory *dialog_factory; + GimpMenuFactory *menu_factory; + GimpUIManager *ui_manager; - image_window = gimp_display_shell_get_window (shell); - dialog_factory = gimp_dock_container_get_dialog_factory (GIMP_DOCK_CONTAINER (image_window)); + menu_factory = menus_get_global_menu_factory (tool->tool_info->gimp); + ui_manager = gimp_menu_factory_get_manager (menu_factory, "", text_tool); - text_tool->ui_manager = - gimp_menu_factory_manager_new (gimp_dialog_factory_get_menu_factory (dialog_factory), - "", - text_tool); - } - - gimp_ui_manager_update (text_tool->ui_manager, text_tool); + gimp_ui_manager_update (ui_manager, text_tool); *ui_path = "/text-tool-popup"; - return text_tool->ui_manager; + return ui_manager; } return NULL; diff --git a/app/tools/gimptexttool.h b/app/tools/gimptexttool.h index cda2820eab..a46f7fb9d1 100644 --- a/app/tools/gimptexttool.h +++ b/app/tools/gimptexttool.h @@ -56,7 +56,6 @@ struct _GimpTextTool GimpImage *image; GtkWidget *confirm_dialog; - GimpUIManager *ui_manager; gboolean handle_rectangle_change_complete; gboolean text_box_fixed; diff --git a/app/widgets/gimpactionfactory.c b/app/widgets/gimpactionfactory.c index 2512028284..441b012146 100644 --- a/app/widgets/gimpactionfactory.c +++ b/app/widgets/gimpactionfactory.c @@ -71,6 +71,7 @@ gimp_action_factory_finalize (GObject *object) g_free (entry->identifier); g_free (entry->label); g_free (entry->icon_name); + g_clear_object (&entry->group); g_slice_free (GimpActionFactoryEntry, entry); } @@ -124,7 +125,7 @@ gimp_action_factory_group_register (GimpActionFactory *factory, } GimpActionGroup * -gimp_action_factory_group_new (GimpActionFactory *factory, +gimp_action_factory_get_group (GimpActionFactory *factory, const gchar *identifier, gpointer user_data) { @@ -139,19 +140,24 @@ gimp_action_factory_group_new (GimpActionFactory *factory, if (! strcmp (entry->identifier, identifier)) { - GimpActionGroup *group; + if (entry->group == NULL) + { + GimpActionGroup *group; - group = gimp_action_group_new (factory->gimp, - entry->identifier, - entry->label, - entry->icon_name, - user_data, - entry->update_func); + group = gimp_action_group_new (factory->gimp, + entry->identifier, + entry->label, + entry->icon_name, + user_data, + entry->update_func); - if (entry->setup_func) - entry->setup_func (group); + if (entry->setup_func) + entry->setup_func (group); - return group; + entry->group = group; + } + + return entry->group; } } diff --git a/app/widgets/gimpactionfactory.h b/app/widgets/gimpactionfactory.h index fddcfa1250..c5bb6bba7e 100644 --- a/app/widgets/gimpactionfactory.h +++ b/app/widgets/gimpactionfactory.h @@ -34,6 +34,8 @@ struct _GimpActionFactoryEntry gchar *icon_name; GimpActionGroupSetupFunc setup_func; GimpActionGroupUpdateFunc update_func; + + GimpActionGroup *group; }; @@ -61,20 +63,20 @@ struct _GimpActionFactoryClass }; -GType gimp_action_factory_get_type (void) G_GNUC_CONST; +GType gimp_action_factory_get_type (void) G_GNUC_CONST; -GimpActionFactory * gimp_action_factory_new (Gimp *gimp); +GimpActionFactory * gimp_action_factory_new (Gimp *gimp); -void gimp_action_factory_group_register (GimpActionFactory *factory, - const gchar *identifier, - const gchar *label, - const gchar *icon_name, - GimpActionGroupSetupFunc setup_func, - GimpActionGroupUpdateFunc update_func); +void gimp_action_factory_group_register (GimpActionFactory *factory, + const gchar *identifier, + const gchar *label, + const gchar *icon_name, + GimpActionGroupSetupFunc setup_func, + GimpActionGroupUpdateFunc update_func); -GimpActionGroup * gimp_action_factory_group_new (GimpActionFactory *factory, - const gchar *identifier, - gpointer user_data); +GimpActionGroup * gimp_action_factory_get_group (GimpActionFactory *factory, + const gchar *identifier, + gpointer user_data); #endif /* __GIMP_ACTION_FACTORY_H__ */ diff --git a/app/widgets/gimpactiongroup.c b/app/widgets/gimpactiongroup.c index 6facb7e63e..98964244a7 100644 --- a/app/widgets/gimpactiongroup.c +++ b/app/widgets/gimpactiongroup.c @@ -422,6 +422,10 @@ gimp_action_group_add_actions (GimpActionGroup *group, tooltip = gettext (entries[i].tooltip); } + /* The action should not already exist in the application. */ + g_return_if_fail (g_action_map_lookup_action (G_ACTION_MAP (group->gimp->app), + entries[i].name) == NULL); + action = gimp_action_impl_new (entries[i].name, label, tooltip, entries[i].icon_name, entries[i].help_id, context); @@ -473,6 +477,10 @@ gimp_action_group_add_toggle_actions (GimpActionGroup *group, tooltip = gettext (entries[i].tooltip); } + /* The action should not already exist in the application. */ + g_return_if_fail (g_action_map_lookup_action (G_ACTION_MAP (group->gimp->app), + entries[i].name) == NULL); + action = gimp_toggle_action_new (entries[i].name, label, tooltip, entries[i].icon_name, entries[i].help_id, context); @@ -531,6 +539,10 @@ gimp_action_group_add_radio_actions (GimpActionGroup *group, tooltip = gettext (entries[i].tooltip); } + /* The action should not already exist in the application. */ + g_return_val_if_fail (g_action_map_lookup_action (G_ACTION_MAP (group->gimp->app), + entries[i].name) == NULL, NULL); + action = gimp_radio_action_new (entries[i].name, label, tooltip, entries[i].icon_name, entries[i].help_id, @@ -594,6 +606,10 @@ gimp_action_group_add_enum_actions (GimpActionGroup *group, tooltip = gettext (entries[i].tooltip); } + /* The action should not already exist in the application. */ + g_return_if_fail (g_action_map_lookup_action (G_ACTION_MAP (group->gimp->app), + entries[i].name) == NULL); + action = gimp_enum_action_new (entries[i].name, label, tooltip, entries[i].icon_name, entries[i].help_id, @@ -649,20 +665,31 @@ gimp_action_group_add_string_actions (GimpActionGroup *group, tooltip = gettext (entries[i].tooltip); } - action = gimp_string_action_new (entries[i].name, label, tooltip, - entries[i].icon_name, - entries[i].help_id, - entries[i].value, context); + /* XXX: as a special exception, because the dialogs_dockable_actions are + * added both in the dockable and dialogs action groups. + */ + action = GIMP_STRING_ACTION (g_action_map_lookup_action (G_ACTION_MAP (group->gimp->app), + entries[i].name)); + if (G_LIKELY (action == NULL)) + { + action = gimp_string_action_new (entries[i].name, label, tooltip, + entries[i].icon_name, + entries[i].help_id, + entries[i].value, context); + gimp_action_group_add_action_with_accel (group, GIMP_ACTION (action), + entries[i].accelerator); + } + else + { + g_object_ref (action); + } if (callback) g_signal_connect (action, "gimp-activate", G_CALLBACK (callback), group->user_data); - gimp_action_group_add_action_with_accel (group, GIMP_ACTION (action), - entries[i].accelerator); g_signal_emit (group, signals[ACTION_ADDED], 0, action); - g_object_unref (action); } } @@ -702,6 +729,10 @@ gimp_action_group_add_double_actions (GimpActionGroup *group, tooltip = gettext (entries[i].tooltip); } + /* The action should not already exist in the application. */ + g_return_if_fail (g_action_map_lookup_action (G_ACTION_MAP (group->gimp->app), + entries[i].name) == NULL); + action = gimp_double_action_new (entries[i].name, label, tooltip, entries[i].icon_name, entries[i].help_id, @@ -750,24 +781,44 @@ gimp_action_group_add_procedure_actions (GimpActionGroup *group, continue; } - action = gimp_procedure_action_new (entries[i].name, - entries[i].label, - entries[i].tooltip, - entries[i].icon_name, - entries[i].help_id, - entries[i].procedure, - context); + action = GIMP_PROCEDURE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (group->gimp->app), + entries[i].name)); + if (G_LIKELY (action == NULL)) + { + action = gimp_procedure_action_new (entries[i].name, + entries[i].label, + entries[i].tooltip, + entries[i].icon_name, + entries[i].help_id, + entries[i].procedure, + context); - if (callback) - g_signal_connect (action, "gimp-activate", - G_CALLBACK (callback), - group->user_data); + if (callback) + g_signal_connect (action, "gimp-activate", + G_CALLBACK (callback), + group->user_data); - gimp_action_group_add_action_with_accel (group, GIMP_ACTION (action), - entries[i].accelerator); - g_signal_emit (group, signals[ACTION_ADDED], 0, action); + gimp_action_group_add_action_with_accel (group, GIMP_ACTION (action), + entries[i].accelerator); + g_signal_emit (group, signals[ACTION_ADDED], 0, action); - g_object_unref (action); + g_object_unref (action); + } + else + { + /* Unlike other existence checks, this is not a program error (hence + * no WARNINGs nor CRITICALs). It is more likely a third-party plug-in + * procedure name clashing with a core action (the previous test + * gimp_action_group_check_unique_action() will check for clashes + * between 2 plug-in procedure's names; this test will check in all + * other groups too). + * So we just warn for problem discovery. + */ + gimp_message (group->gimp, NULL, GIMP_MESSAGE_WARNING, + "%s: plug-in procedure '%s' could not be registered. " + "A procedure with the same name already exists.", + G_STRFUNC, entries[i].name); + } } } diff --git a/app/widgets/gimpcontrollers.c b/app/widgets/gimpcontrollers.c index d1c0448120..06045c9b06 100644 --- a/app/widgets/gimpcontrollers.c +++ b/app/widgets/gimpcontrollers.c @@ -140,7 +140,7 @@ gimp_controllers_restore (Gimp *gimp, g_return_if_fail (manager != NULL); g_return_if_fail (manager->ui_manager == NULL); - manager->ui_manager = g_object_ref (ui_manager); + manager->ui_manager = ui_manager; file = gimp_directory_file ("controllerrc", NULL); @@ -297,7 +297,6 @@ gimp_controller_manager_free (GimpControllerManager *manager) manager->event_mapped_id); g_clear_object (&manager->controllers); - g_clear_object (&manager->ui_manager); g_slice_free (GimpControllerManager, manager); } diff --git a/app/widgets/gimpdialogfactory.c b/app/widgets/gimpdialogfactory.c index 0b0d6f880f..7445244f16 100644 --- a/app/widgets/gimpdialogfactory.c +++ b/app/widgets/gimpdialogfactory.c @@ -36,6 +36,8 @@ #include "core/gimp.h" #include "core/gimpcontext.h" +#include "menus/menus.h" + #include "gimpcursor.h" #include "gimpdialogfactory.h" #include "gimpdock.h" @@ -61,7 +63,6 @@ enum struct _GimpDialogFactoryPrivate { GimpContext *context; - GimpMenuFactory *menu_factory; GList *open_dialogs; GList *session_infos; @@ -223,17 +224,14 @@ gimp_dialog_factory_finalize (GObject *object) } GimpDialogFactory * -gimp_dialog_factory_new (const gchar *name, - GimpContext *context, - GimpMenuFactory *menu_factory) +gimp_dialog_factory_new (const gchar *name, + GimpContext *context) { GimpDialogFactory *factory; GimpGuiConfig *config; g_return_val_if_fail (name != NULL, NULL); g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL); - g_return_val_if_fail (! menu_factory || GIMP_IS_MENU_FACTORY (menu_factory), - NULL); factory = g_object_new (GIMP_TYPE_DIALOG_FACTORY, NULL); @@ -242,7 +240,6 @@ gimp_dialog_factory_new (const gchar *name, config = GIMP_GUI_CONFIG (context->gimp->config); factory->p->context = context; - factory->p->menu_factory = menu_factory; factory->p->dialog_state = (config->hide_docks ? GIMP_DIALOGS_HIDDEN_EXPLICITLY : GIMP_DIALOGS_SHOWN); @@ -494,7 +491,7 @@ gimp_dialog_factory_dialog_new_internal (GimpDialogFactory *factory, * created in its dock's context. */ dock = gimp_dock_with_window_new (factory, monitor, FALSE); - dockbook = gimp_dockbook_new (factory->p->menu_factory); + dockbook = gimp_dockbook_new (menus_get_global_menu_factory (factory->p->context->gimp)); gimp_dock_add_book (GIMP_DOCK (dock), GIMP_DOCKBOOK (dockbook), @@ -726,14 +723,6 @@ gimp_dialog_factory_get_context (GimpDialogFactory *factory) return factory->p->context; } -GimpMenuFactory * -gimp_dialog_factory_get_menu_factory (GimpDialogFactory *factory) -{ - g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (factory), NULL); - - return factory->p->menu_factory; -} - GList * gimp_dialog_factory_get_open_dialogs (GimpDialogFactory *factory) { diff --git a/app/widgets/gimpdialogfactory.h b/app/widgets/gimpdialogfactory.h index 5cc02331c9..d2015aace2 100644 --- a/app/widgets/gimpdialogfactory.h +++ b/app/widgets/gimpdialogfactory.h @@ -112,8 +112,7 @@ struct _GimpDialogFactoryClass GType gimp_dialog_factory_get_type (void) G_GNUC_CONST; GimpDialogFactory * gimp_dialog_factory_new (const gchar *name, - GimpContext *context, - GimpMenuFactory *menu_factory); + GimpContext *context); void gimp_dialog_factory_register_entry (GimpDialogFactory *factory, const gchar *identifier, @@ -149,7 +148,6 @@ GtkWidget * gimp_dialog_factory_dialog_new (GimpDialogFactory gboolean present); GimpContext * gimp_dialog_factory_get_context (GimpDialogFactory *factory); -GimpMenuFactory * gimp_dialog_factory_get_menu_factory (GimpDialogFactory *factory); GList * gimp_dialog_factory_get_open_dialogs (GimpDialogFactory *factory); GList * gimp_dialog_factory_get_session_infos (GimpDialogFactory *factory); diff --git a/app/widgets/gimpdock.c b/app/widgets/gimpdock.c index cffec7692b..b20ecb95b1 100644 --- a/app/widgets/gimpdock.c +++ b/app/widgets/gimpdock.c @@ -30,6 +30,8 @@ #include "core/gimp.h" #include "core/gimpcontext.h" +#include "menus/menus.h" + #include "gimpdialogfactory.h" #include "gimpdock.h" #include "gimpdockable.h" @@ -298,7 +300,7 @@ gimp_dock_dropped_cb (GtkWidget *notebook, /* Create a new dockbook */ factory = gimp_dock_get_dialog_factory (dock); - new_dockbook = gimp_dockbook_new (gimp_dialog_factory_get_menu_factory (factory)); + new_dockbook = gimp_dockbook_new (menus_get_global_menu_factory (gimp_dialog_factory_get_context (factory)->gimp)); gimp_dock_add_book (dock, GIMP_DOCKBOOK (new_dockbook), insert_index); /* Add the dockable to new new dockbook */ diff --git a/app/widgets/gimpdockable.c b/app/widgets/gimpdockable.c index 0ab1f14fd0..0895542d72 100644 --- a/app/widgets/gimpdockable.c +++ b/app/widgets/gimpdockable.c @@ -32,6 +32,8 @@ #include "core/gimpcontext.h" +#include "menus/menus.h" + #include "gimpdialogfactory.h" #include "gimpdnd.h" #include "gimpdock.h" @@ -543,7 +545,7 @@ gimp_dockable_detach (GimpDockable *dockable) src_dock_window = gimp_dock_window_from_dock (src_dock); dialog_factory = gimp_dock_get_dialog_factory (src_dock); - menu_factory = gimp_dialog_factory_get_menu_factory (dialog_factory); + menu_factory = menus_get_global_menu_factory (gimp_dialog_factory_get_context (dialog_factory)->gimp); dock = gimp_dock_with_window_new (dialog_factory, gimp_widget_get_monitor (GTK_WIDGET (dockable)), diff --git a/app/widgets/gimpdockbook.c b/app/widgets/gimpdockbook.c index 8df831feae..2f4195ef2f 100644 --- a/app/widgets/gimpdockbook.c +++ b/app/widgets/gimpdockbook.c @@ -36,6 +36,8 @@ #include "core/gimp.h" #include "core/gimpcontext.h" +#include "menus/menus.h" + #include "gimpactiongroup.h" #include "gimpdialogfactory.h" #include "gimpdnd.h" @@ -261,8 +263,6 @@ gimp_dockbook_finalize (GObject *object) { GimpDockbook *dockbook = GIMP_DOCKBOOK (object); - g_clear_object (&dockbook->p->ui_manager); - G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -425,7 +425,7 @@ gimp_dockbook_create_window (GtkNotebook *notebook, src_dock_window = gimp_dock_window_from_dock (src_dock); dialog_factory = gimp_dock_get_dialog_factory (src_dock); - menu_factory = gimp_dialog_factory_get_menu_factory (dialog_factory); + menu_factory = menus_get_global_menu_factory (gimp_dialog_factory_get_context (dialog_factory)->gimp); new_dock = gimp_dock_with_window_new (dialog_factory, gimp_widget_get_monitor (page), @@ -554,7 +554,7 @@ gimp_dockbook_show_menu (GimpDockbook *dockbook) GimpDockable *dockable; gint page_num; - dockbook_ui_manager = gimp_dockbook_get_ui_manager (dockbook); + dockbook_ui_manager = dockbook->p->ui_manager; if (! dockbook_ui_manager) return FALSE; @@ -612,7 +612,7 @@ gimp_dockbook_new (GimpMenuFactory *menu_factory) dockbook = g_object_new (GIMP_TYPE_DOCKBOOK, NULL); - dockbook->p->ui_manager = gimp_menu_factory_manager_new (menu_factory, + dockbook->p->ui_manager = gimp_menu_factory_get_manager (menu_factory, "", dockbook); @@ -667,14 +667,6 @@ gimp_dockbook_set_dock (GimpDockbook *dockbook, } } -GimpUIManager * -gimp_dockbook_get_ui_manager (GimpDockbook *dockbook) -{ - g_return_val_if_fail (GIMP_IS_DOCKBOOK (dockbook), NULL); - - return dockbook->p->ui_manager; -} - /** * gimp_dockbook_add_from_dialog_factory: * @dockbook: The #DockBook diff --git a/app/widgets/gimpdockbook.h b/app/widgets/gimpdockbook.h index 60b8235f0e..d66569d2f5 100644 --- a/app/widgets/gimpdockbook.h +++ b/app/widgets/gimpdockbook.h @@ -71,8 +71,6 @@ void gimp_dockbook_set_dock (GimpDockbook GimpDock *dock); GimpDock * gimp_dockbook_get_dock (GimpDockbook *dockbook); -GimpUIManager * gimp_dockbook_get_ui_manager (GimpDockbook *dockbook); - GtkWidget * gimp_dockbook_add_from_dialog_factory (GimpDockbook *dockbook, const gchar *identifiers); diff --git a/app/widgets/gimpdockcolumns.c b/app/widgets/gimpdockcolumns.c index 128cb2603a..b5f4fdafb5 100644 --- a/app/widgets/gimpdockcolumns.c +++ b/app/widgets/gimpdockcolumns.c @@ -30,6 +30,8 @@ #include "core/gimp.h" #include "core/gimpcontext.h" +#include "menus/menus.h" + #include "gimpdialogfactory.h" #include "gimpdock.h" #include "gimpdockable.h" @@ -405,14 +407,16 @@ gimp_dock_columns_prepare_dockbook (GimpDockColumns *dock_columns, gint dock_index, GtkWidget **dockbook_p) { - GimpMenuFactory *menu_factory; - GtkWidget *dock; - GtkWidget *dockbook; + GimpDialogFactory *dialog_factory; + GimpMenuFactory *menu_factory; + GtkWidget *dock; + GtkWidget *dockbook; dock = gimp_menu_dock_new (); gimp_dock_columns_add_dock (dock_columns, GIMP_DOCK (dock), dock_index); - menu_factory = gimp_dialog_factory_get_menu_factory (dock_columns->p->dialog_factory); + dialog_factory = dock_columns->p->dialog_factory; + menu_factory = menus_get_global_menu_factory (gimp_dialog_factory_get_context (dialog_factory)->gimp); dockbook = gimp_dockbook_new (menu_factory); gimp_dock_add_book (GIMP_DOCK (dock), GIMP_DOCKBOOK (dockbook), -1); diff --git a/app/widgets/gimpdockwindow.c b/app/widgets/gimpdockwindow.c index 4ae1b7489c..86e8a5a95e 100644 --- a/app/widgets/gimpdockwindow.c +++ b/app/widgets/gimpdockwindow.c @@ -41,6 +41,8 @@ #include "core/gimplist.h" #include "core/gimpimage.h" +#include "menus/menus.h" + #include "gimpcontainercombobox.h" #include "gimpcontainerview.h" #include "gimpdialogfactory.h" @@ -313,14 +315,13 @@ gimp_dock_window_constructed (GObject *object) /* Setup hints */ gimp_window_set_hint (GTK_WINDOW (dock_window), config->dock_window_hint); - menu_factory = - gimp_dialog_factory_get_menu_factory (dock_window->p->dialog_factory); + menu_factory = menus_get_global_menu_factory (gimp); /* Make image window related keyboard shortcuts work also when a * dock window is the focused window */ dock_window->p->ui_manager = - gimp_menu_factory_manager_new (menu_factory, + gimp_menu_factory_get_manager (menu_factory, dock_window->p->ui_manager_name, dock_window); @@ -483,7 +484,6 @@ gimp_dock_window_dispose (GObject *object) dock_window->p->image_flush_handler_id = 0; } - g_clear_object (&dock_window->p->ui_manager); g_clear_object (&dock_window->p->dialog_factory); g_clear_object (&dock_window->p->context); diff --git a/app/widgets/gimpeditor.c b/app/widgets/gimpeditor.c index 810e97093f..c04a5f378a 100644 --- a/app/widgets/gimpeditor.c +++ b/app/widgets/gimpeditor.c @@ -241,7 +241,7 @@ gimp_editor_constructed (GObject *object) if (editor->priv->menu_factory && editor->priv->menu_identifier) { editor->priv->ui_manager = - gimp_menu_factory_manager_new (editor->priv->menu_factory, + gimp_menu_factory_get_manager (editor->priv->menu_factory, editor->priv->menu_identifier, editor->priv->popup_data); @@ -269,9 +269,6 @@ gimp_editor_dispose (GObject *object) g_clear_pointer (&editor->priv->menu_identifier, g_free); - if (editor->priv->ui_manager) - g_clear_object (&editor->priv->ui_manager); - g_clear_pointer (&editor->priv->ui_path, g_free); G_OBJECT_CLASS (parent_class)->dispose (object); @@ -442,14 +439,11 @@ gimp_editor_create_menu (GimpEditor *editor, editor->priv->menu_factory = g_object_ref (menu_factory); if (editor->priv->ui_manager) - { - g_signal_handlers_disconnect_by_func (editor->priv->ui_manager->gimp->config, - G_CALLBACK (gimp_editor_style_updated), - editor); - g_object_unref (editor->priv->ui_manager); - } + g_signal_handlers_disconnect_by_func (editor->priv->ui_manager->gimp->config, + G_CALLBACK (gimp_editor_style_updated), + editor); - editor->priv->ui_manager = gimp_menu_factory_manager_new (menu_factory, + editor->priv->ui_manager = gimp_menu_factory_get_manager (menu_factory, menu_identifier, popup_data); g_signal_connect_object (editor->priv->ui_manager->gimp->config, diff --git a/app/widgets/gimpmenufactory.c b/app/widgets/gimpmenufactory.c index 5fefa73c60..fe94c6e2c6 100644 --- a/app/widgets/gimpmenufactory.c +++ b/app/widgets/gimpmenufactory.c @@ -95,6 +95,7 @@ gimp_menu_factory_finalize (GObject *object) g_slice_free (GimpUIManagerUIEntry, ui_entry); } + g_clear_object (&entry->manager); g_list_free (entry->managed_uis); g_slice_free (GimpMenuFactoryEntry, entry); @@ -192,7 +193,7 @@ gimp_menu_factory_get_registered_menus (GimpMenuFactory *factory) } GimpUIManager * -gimp_menu_factory_manager_new (GimpMenuFactory *factory, +gimp_menu_factory_get_manager (GimpMenuFactory *factory, const gchar *identifier, gpointer callback_data) { @@ -207,34 +208,37 @@ gimp_menu_factory_manager_new (GimpMenuFactory *factory, if (! strcmp (entry->identifier, identifier)) { - GimpUIManager *manager; - GList *list; - - manager = gimp_ui_manager_new (factory->p->gimp, entry->identifier); - - for (list = entry->action_groups; list; list = g_list_next (list)) + if (entry->manager == NULL) { - GimpActionGroup *group; + GimpUIManager *manager; + GList *list; - group = gimp_action_factory_group_new (factory->p->action_factory, - (const gchar *) list->data, - callback_data); + manager = gimp_ui_manager_new (factory->p->gimp, entry->identifier); + entry->manager = manager; - gimp_ui_manager_add_action_group (manager, group); - g_object_unref (group); + for (list = entry->action_groups; list; list = g_list_next (list)) + { + GimpActionGroup *group; + + group = gimp_action_factory_get_group (factory->p->action_factory, + (const gchar *) list->data, + callback_data); + + gimp_ui_manager_add_action_group (manager, group); + } + + for (list = entry->managed_uis; list; list = g_list_next (list)) + { + GimpUIManagerUIEntry *ui_entry = list->data; + + gimp_ui_manager_ui_register (manager, + ui_entry->ui_path, + ui_entry->basename, + ui_entry->setup_func); + } } - for (list = entry->managed_uis; list; list = g_list_next (list)) - { - GimpUIManagerUIEntry *ui_entry = list->data; - - gimp_ui_manager_ui_register (manager, - ui_entry->ui_path, - ui_entry->basename, - ui_entry->setup_func); - } - - return manager; + return entry->manager; } } diff --git a/app/widgets/gimpmenufactory.h b/app/widgets/gimpmenufactory.h index 6c130e84ab..102d22a1e9 100644 --- a/app/widgets/gimpmenufactory.h +++ b/app/widgets/gimpmenufactory.h @@ -29,9 +29,11 @@ typedef struct _GimpMenuFactoryEntry GimpMenuFactoryEntry; struct _GimpMenuFactoryEntry { - gchar *identifier; - GList *action_groups; - GList *managed_uis; + gchar *identifier; + GList *action_groups; + GList *managed_uis; + + GimpUIManager *manager; }; @@ -67,9 +69,11 @@ void gimp_menu_factory_manager_register (GimpMenuFactory *fac const gchar *first_group, ...) G_GNUC_NULL_TERMINATED; GList * gimp_menu_factory_get_registered_menus (GimpMenuFactory *factory); -GimpUIManager * gimp_menu_factory_manager_new (GimpMenuFactory *factory, +GimpUIManager * gimp_menu_factory_get_manager (GimpMenuFactory *factory, const gchar *identifier, gpointer callback_data); +GimpUIManager * gimp_menu_factory_get_image_manager (GimpMenuFactory *factory); + #endif /* __GIMP_MENU_FACTORY_H__ */ diff --git a/app/widgets/gimpsessioninfo-book.c b/app/widgets/gimpsessioninfo-book.c index 333ecb14bf..0049ec8360 100644 --- a/app/widgets/gimpsessioninfo-book.c +++ b/app/widgets/gimpsessioninfo-book.c @@ -26,6 +26,10 @@ #include "widgets-types.h" +#include "core/gimpcontext.h" + +#include "menus/menus.h" + #include "gimpdialogfactory.h" #include "gimpdock.h" #include "gimpdockbook.h" @@ -250,7 +254,7 @@ gimp_session_info_book_restore (GimpSessionInfoBook *info, g_return_val_if_fail (GIMP_IS_DOCK (dock), NULL); dialog_factory = gimp_dock_get_dialog_factory (dock); - menu_factory = gimp_dialog_factory_get_menu_factory (dialog_factory); + menu_factory = menus_get_global_menu_factory (gimp_dialog_factory_get_context (dialog_factory)->gimp); dockbook = gimp_dockbook_new (menu_factory); diff --git a/app/widgets/gimptexteditor.c b/app/widgets/gimptexteditor.c index c27959eced..0644b5c8c1 100644 --- a/app/widgets/gimptexteditor.c +++ b/app/widgets/gimptexteditor.c @@ -118,7 +118,6 @@ gimp_text_editor_finalize (GObject *object) GimpTextEditor *editor = GIMP_TEXT_EDITOR (object); g_clear_pointer (&editor->font_name, g_free); - g_clear_object (&editor->ui_manager); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -175,7 +174,7 @@ gimp_text_editor_new (const gchar *title, G_CALLBACK (gimp_text_editor_text_changed), editor, 0); - editor->ui_manager = gimp_menu_factory_manager_new (menu_factory, + editor->ui_manager = gimp_menu_factory_get_manager (menu_factory, "", editor);