mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 17:33:25 +00:00
app: prevent multiple registrations of a same action.
Pre-GIMP-3.0 code logics would re-allocate several GimpMenuFactory or GimpUIManager for no good reason. While it was still working with old GtkAction code, with our new GAction-based code, we were ending up overriding an action with a new version of the same action, while keeping reference to old actions. This made for discrepancies of the enabled or visible state of actions. The new code keeps singleton of some objects and references to already registered GimpUIManager or GimpActionGroups objects and make sure no actions with the same name are created twice.
This commit is contained in:
parent
fd05b75cf7
commit
38d0abc026
40 changed files with 358 additions and 339 deletions
|
@ -115,14 +115,13 @@ debug_dump_keyboard_shortcuts_cmd_callback (GimpAction *action,
|
|||
gpointer data)
|
||||
{
|
||||
GimpDisplay *display;
|
||||
GimpImageWindow *window;
|
||||
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);
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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),
|
||||
"<MyPaintBrushes>",
|
||||
"/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>",
|
||||
"/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>",
|
||||
"/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),
|
||||
"<MyPaintBrushes>",
|
||||
"/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>",
|
||||
"/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>",
|
||||
"/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>",
|
||||
"/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>",
|
||||
"/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>",
|
||||
"/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));
|
||||
}
|
||||
|
|
|
@ -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++)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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,8 +2104,7 @@ 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);
|
||||
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;
|
||||
|
||||
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",
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
"<Image>",
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -315,12 +317,9 @@ static void
|
|||
gimp_tool_path_dispose (GObject *object)
|
||||
{
|
||||
GimpToolPath *path = GIMP_TOOL_PATH (object);
|
||||
GimpToolPathPrivate *private = path->private;
|
||||
|
||||
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;
|
||||
|
||||
if (!private->ui_manager)
|
||||
{
|
||||
GimpDisplayShell *shell = gimp_tool_widget_get_shell (widget);
|
||||
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));
|
||||
|
||||
private->ui_manager =
|
||||
gimp_menu_factory_manager_new (gimp_dialog_factory_get_menu_factory (dialog_factory),
|
||||
"<VectorToolPath>",
|
||||
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, "<VectorToolPath>", 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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
"<Image>",
|
||||
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
|
||||
|
|
|
@ -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, "<Image>",
|
||||
"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),
|
||||
"<Image>", gimp);
|
||||
|
||||
return image_ui_manager;
|
||||
}
|
||||
|
||||
|
||||
/* private functions */
|
||||
|
||||
|
|
|
@ -19,11 +19,7 @@
|
|||
#define __MENUS_H__
|
||||
|
||||
|
||||
extern GimpMenuFactory *global_menu_factory;
|
||||
|
||||
|
||||
void menus_init (Gimp *gimp,
|
||||
GimpActionFactory *action_factory);
|
||||
void menus_init (Gimp *gimp);
|
||||
void menus_exit (Gimp *gimp);
|
||||
|
||||
void menus_restore (Gimp *gimp);
|
||||
|
@ -34,5 +30,8 @@ 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__ */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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*/,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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, "<TextTool>", text_tool);
|
||||
|
||||
text_tool->ui_manager =
|
||||
gimp_menu_factory_manager_new (gimp_dialog_factory_get_menu_factory (dialog_factory),
|
||||
"<TextTool>",
|
||||
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;
|
||||
|
|
|
@ -56,7 +56,6 @@ struct _GimpTextTool
|
|||
GimpImage *image;
|
||||
|
||||
GtkWidget *confirm_dialog;
|
||||
GimpUIManager *ui_manager;
|
||||
|
||||
gboolean handle_rectangle_change_complete;
|
||||
gboolean text_box_fixed;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
@ -138,6 +139,8 @@ gimp_action_factory_group_new (GimpActionFactory *factory,
|
|||
GimpActionFactoryEntry *entry = list->data;
|
||||
|
||||
if (! strcmp (entry->identifier, identifier))
|
||||
{
|
||||
if (entry->group == NULL)
|
||||
{
|
||||
GimpActionGroup *group;
|
||||
|
||||
|
@ -151,7 +154,10 @@ gimp_action_factory_group_new (GimpActionFactory *factory,
|
|||
if (entry->setup_func)
|
||||
entry->setup_func (group);
|
||||
|
||||
return group;
|
||||
entry->group = group;
|
||||
}
|
||||
|
||||
return entry->group;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,6 +34,8 @@ struct _GimpActionFactoryEntry
|
|||
gchar *icon_name;
|
||||
GimpActionGroupSetupFunc setup_func;
|
||||
GimpActionGroupUpdateFunc update_func;
|
||||
|
||||
GimpActionGroup *group;
|
||||
};
|
||||
|
||||
|
||||
|
@ -72,7 +74,7 @@ void gimp_action_factory_group_register (GimpActionFactory *factory,
|
|||
GimpActionGroupSetupFunc setup_func,
|
||||
GimpActionGroupUpdateFunc update_func);
|
||||
|
||||
GimpActionGroup * gimp_action_factory_group_new (GimpActionFactory *factory,
|
||||
GimpActionGroup * gimp_action_factory_get_group (GimpActionFactory *factory,
|
||||
const gchar *identifier,
|
||||
gpointer user_data);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/* 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,6 +781,10 @@ gimp_action_group_add_procedure_actions (GimpActionGroup *group,
|
|||
continue;
|
||||
}
|
||||
|
||||
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,
|
||||
|
@ -769,6 +804,22 @@ gimp_action_group_add_procedure_actions (GimpActionGroup *group,
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
@ -224,16 +225,13 @@ gimp_dialog_factory_finalize (GObject *object)
|
|||
|
||||
GimpDialogFactory *
|
||||
gimp_dialog_factory_new (const gchar *name,
|
||||
GimpContext *context,
|
||||
GimpMenuFactory *menu_factory)
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)),
|
||||
|
|
|
@ -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,
|
||||
"<Dockable>",
|
||||
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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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,6 +407,7 @@ gimp_dock_columns_prepare_dockbook (GimpDockColumns *dock_columns,
|
|||
gint dock_index,
|
||||
GtkWidget **dockbook_p)
|
||||
{
|
||||
GimpDialogFactory *dialog_factory;
|
||||
GimpMenuFactory *menu_factory;
|
||||
GtkWidget *dock;
|
||||
GtkWidget *dockbook;
|
||||
|
@ -412,7 +415,8 @@ gimp_dock_columns_prepare_dockbook (GimpDockColumns *dock_columns,
|
|||
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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
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,
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
@ -206,22 +207,24 @@ gimp_menu_factory_manager_new (GimpMenuFactory *factory,
|
|||
GimpMenuFactoryEntry *entry = list->data;
|
||||
|
||||
if (! strcmp (entry->identifier, identifier))
|
||||
{
|
||||
if (entry->manager == NULL)
|
||||
{
|
||||
GimpUIManager *manager;
|
||||
GList *list;
|
||||
|
||||
manager = gimp_ui_manager_new (factory->p->gimp, entry->identifier);
|
||||
entry->manager = manager;
|
||||
|
||||
for (list = entry->action_groups; list; list = g_list_next (list))
|
||||
{
|
||||
GimpActionGroup *group;
|
||||
|
||||
group = gimp_action_factory_group_new (factory->p->action_factory,
|
||||
group = gimp_action_factory_get_group (factory->p->action_factory,
|
||||
(const gchar *) list->data,
|
||||
callback_data);
|
||||
|
||||
gimp_ui_manager_add_action_group (manager, group);
|
||||
g_object_unref (group);
|
||||
}
|
||||
|
||||
for (list = entry->managed_uis; list; list = g_list_next (list))
|
||||
|
@ -233,8 +236,9 @@ gimp_menu_factory_manager_new (GimpMenuFactory *factory,
|
|||
ui_entry->basename,
|
||||
ui_entry->setup_func);
|
||||
}
|
||||
}
|
||||
|
||||
return manager;
|
||||
return entry->manager;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,8 @@ struct _GimpMenuFactoryEntry
|
|||
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__ */
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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,
|
||||
"<TextEditor>",
|
||||
editor);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue