app/widgets/Makefile.am app/widgets/widgets-types.h new GtkUIManager

2004-04-21  Michael Natterer  <mitch@gimp.org>

	* app/widgets/Makefile.am
	* app/widgets/widgets-types.h
	* app/widgets/gimpuimanager.[ch]: new GtkUIManager subclass. Adds
	API to update all action groups and knows which UIs it can create
	from which XML files.

	* app/widgets/gimpmenufactory.[ch]: register the XML file
	basenames along with path of their toplevel menus. Create
	GimpUIManagers instead of GtkUIManagers and register the
	XML files and menu paths with them.

	* app/gui/menus.c: register all XML files and their toplevel
	menu paths.

	* app/widgets/gimpeditor.[ch]: also create a GimpUIManager when
	creating the GtkItemFactory. Added "const gchar *ui_identifier"
	parameter to gimp_editor_create_menu().

	* app/widgets/gimpcontainereditor.[ch]
	* app/widgets/gimpdataeditor.[ch]
	* app/widgets/gimpdatafactoryview.[ch]
	* app/widgets/gimpitemtreeview.[ch]: added "ui_identifier"
	parameters to all constructors.

	* app/widgets/gimpbrusheditor.c
	* app/widgets/gimpbrushfactoryview.c
	* app/widgets/gimpbufferview.c
	* app/widgets/gimpcolormapeditor.c
	* app/widgets/gimpcomponenteditor.c
	* app/widgets/gimpcontainerpopup.c
	* app/widgets/gimpdocumentview.c
	* app/widgets/gimperrorconsole.c
	* app/widgets/gimpfontview.c
	* app/widgets/gimpgradienteditor.c
	* app/widgets/gimpimageview.c
	* app/widgets/gimppaletteeditor.c
	* app/widgets/gimppatternfactoryview.c
	* app/widgets/gimptemplateview.c
	* app/widgets/gimptooloptionseditor.c
	* app/gui/dialogs-constructors.c
	* app/gui/gradient-select.c
	* app/gui/palette-select.c
	* app/gui/pattern-select.c: pass UI identifiers to the changed
	functions above.

	* app/display/gimpdisplayshell.[ch]: added a GimpUIManager for
	the menubar (menubar creating code still commented out).

	* app/display/gimpdisplay.c
	* app/gui/gui-vtable.c: update the ui manager.
This commit is contained in:
Michael Natterer 2004-04-21 16:33:17 +00:00 committed by Michael Natterer
parent 2c601c7dc3
commit 0b8c4b3ec9
44 changed files with 860 additions and 71 deletions

View File

@ -1,3 +1,56 @@
2004-04-21 Michael Natterer <mitch@gimp.org>
* app/widgets/Makefile.am
* app/widgets/widgets-types.h
* app/widgets/gimpuimanager.[ch]: new GtkUIManager subclass. Adds
API to update all action groups and knows which UIs it can create
from which XML files.
* app/widgets/gimpmenufactory.[ch]: register the XML file
basenames along with path of their toplevel menus. Create
GimpUIManagers instead of GtkUIManagers and register the
XML files and menu paths with them.
* app/gui/menus.c: register all XML files and their toplevel
menu paths.
* app/widgets/gimpeditor.[ch]: also create a GimpUIManager when
creating the GtkItemFactory. Added "const gchar *ui_identifier"
parameter to gimp_editor_create_menu().
* app/widgets/gimpcontainereditor.[ch]
* app/widgets/gimpdataeditor.[ch]
* app/widgets/gimpdatafactoryview.[ch]
* app/widgets/gimpitemtreeview.[ch]: added "ui_identifier"
parameters to all constructors.
* app/widgets/gimpbrusheditor.c
* app/widgets/gimpbrushfactoryview.c
* app/widgets/gimpbufferview.c
* app/widgets/gimpcolormapeditor.c
* app/widgets/gimpcomponenteditor.c
* app/widgets/gimpcontainerpopup.c
* app/widgets/gimpdocumentview.c
* app/widgets/gimperrorconsole.c
* app/widgets/gimpfontview.c
* app/widgets/gimpgradienteditor.c
* app/widgets/gimpimageview.c
* app/widgets/gimppaletteeditor.c
* app/widgets/gimppatternfactoryview.c
* app/widgets/gimptemplateview.c
* app/widgets/gimptooloptionseditor.c
* app/gui/dialogs-constructors.c
* app/gui/gradient-select.c
* app/gui/palette-select.c
* app/gui/pattern-select.c: pass UI identifiers to the changed
functions above.
* app/display/gimpdisplayshell.[ch]: added a GimpUIManager for
the menubar (menubar creating code still commented out).
* app/display/gimpdisplay.c
* app/gui/gui-vtable.c: update the ui manager.
2004-04-21 Michael Natterer <mitch@gimp.org>
* app/actions/actions.c: forgot to register the "patterns" actions.

View File

@ -32,6 +32,7 @@
#include "core/gimplist.h"
#include "widgets/gimpitemfactory.h"
#include "widgets/gimpuimanager.h"
#include "tools/gimptool.h"
#include "tools/tool_manager.h"
@ -511,6 +512,7 @@ gimp_display_flush_whenever (GimpDisplay *gdisp,
GimpContext *user_context;
gimp_item_factory_update (shell->menubar_factory, shell);
gimp_ui_manager_update (shell->menubar_manager, shell);
user_context = gimp_get_user_context (gdisp->gimage->gimp);

View File

@ -314,7 +314,8 @@ dialogs_gradient_list_view_new (GimpDialogFactory *factory,
dialogs_edit_gradient_func,
context,
preview_size, 1,
factory->menu_factory, "<Gradients>");
factory->menu_factory, "<Gradients>",
"/gradients-popup");
return dialogs_dockable_new (view,
_("Gradients"), NULL,
@ -334,7 +335,8 @@ dialogs_palette_list_view_new (GimpDialogFactory *factory,
dialogs_edit_palette_func,
context,
preview_size, 1,
factory->menu_factory, "<Palettes>");
factory->menu_factory, "<Palettes>",
"/palettes-popup");
return dialogs_dockable_new (view,
_("Palettes"), NULL,
@ -521,7 +523,8 @@ dialogs_gradient_grid_view_new (GimpDialogFactory *factory,
dialogs_edit_gradient_func,
context,
preview_size, 1,
factory->menu_factory, "<Gradients>");
factory->menu_factory, "<Gradients>",
"/gradients-popup");
return dialogs_dockable_new (view,
_("Gradients"), NULL,
@ -541,7 +544,8 @@ dialogs_palette_grid_view_new (GimpDialogFactory *factory,
dialogs_edit_palette_func,
context,
preview_size, 1,
factory->menu_factory, "<Palettes>");
factory->menu_factory, "<Palettes>",
"/palettes-popup");
return dialogs_dockable_new (view,
_("Palettes"), NULL,
@ -647,7 +651,8 @@ dialogs_layer_list_view_new (GimpDialogFactory *factory,
(GimpEditItemFunc) layers_edit_layer_query,
(GimpNewItemFunc) layers_new_layer_query,
(GimpActivateItemFunc) layers_text_tool,
factory->menu_factory, "<Layers>");
factory->menu_factory, "<Layers>",
"/layers-popup");
dockable = dialogs_dockable_new (view,
_("Layers"), NULL,
@ -678,7 +683,8 @@ dialogs_channel_list_view_new (GimpDialogFactory *factory,
(GimpEditItemFunc) channels_edit_channel_query,
(GimpNewItemFunc) channels_new_channel_query,
(GimpActivateItemFunc) channels_edit_channel_query,
factory->menu_factory, "<Channels>");
factory->menu_factory, "<Channels>",
"/channels-popup");
dockable = dialogs_dockable_new (view,
_("Channels"), NULL,
@ -710,7 +716,8 @@ dialogs_vectors_list_view_new (GimpDialogFactory *factory,
(GimpEditItemFunc) vectors_edit_vectors_query,
(GimpNewItemFunc) vectors_new_vectors_query,
(GimpActivateItemFunc) vectors_vectors_tool,
factory->menu_factory, "<Vectors>");
factory->menu_factory, "<Vectors>",
"/vectors-popup");
vectors_view = GIMP_VECTORS_TREE_VIEW (view);

View File

@ -32,6 +32,7 @@
#include "core/gimplist.h"
#include "widgets/gimpitemfactory.h"
#include "widgets/gimpuimanager.h"
#include "tools/gimptool.h"
#include "tools/tool_manager.h"
@ -511,6 +512,7 @@ gimp_display_flush_whenever (GimpDisplay *gdisp,
GimpContext *user_context;
gimp_item_factory_update (shell->menubar_factory, shell);
gimp_ui_manager_update (shell->menubar_manager, shell);
user_context = gimp_get_user_context (gdisp->gimage->gimp);

View File

@ -59,6 +59,7 @@
#include "widgets/gimphelp-ids.h"
#include "widgets/gimpitemfactory.h"
#include "widgets/gimpmenufactory.h"
#include "widgets/gimpuimanager.h"
#include "widgets/gimpwidgets-utils.h"
#include "gui/info-window.h"
@ -207,6 +208,7 @@ gimp_display_shell_init (GimpDisplayShell *shell)
{
shell->gdisp = NULL;
shell->menubar_factory = NULL;
shell->menubar_manager = NULL;
shell->popup_factory = NULL;
shell->qmask_factory = NULL;
@ -374,6 +376,12 @@ gimp_display_shell_destroy (GtkObject *object)
shell->menubar_factory = NULL;
}
if (shell->menubar_manager)
{
g_object_unref (shell->menubar_manager);
shell->menubar_manager = NULL;
}
shell->popup_factory = NULL;
if (shell->qmask_factory)
@ -478,6 +486,7 @@ gimp_display_shell_real_scaled (GimpDisplayShell *shell)
/* update the <Image>/View/Zoom menu */
gimp_item_factory_update (shell->menubar_factory, shell);
gimp_ui_manager_update (shell->menubar_manager, shell);
user_context = gimp_get_user_context (shell->gdisp->gimage->gimp);
@ -594,6 +603,10 @@ gimp_display_shell_new (GimpDisplay *gdisp,
GTK_TYPE_MENU_BAR,
gdisp,
FALSE);
shell->menubar_manager = gimp_menu_factory_manager_new (menu_factory,
"<Image>",
gdisp,
FALSE);
shell->popup_factory = popup_factory;
@ -603,6 +616,7 @@ gimp_display_shell_new (GimpDisplay *gdisp,
shell,
FALSE);
/* The accelerator table for images */
gtk_window_add_accel_group (GTK_WINDOW (shell),
GTK_ITEM_FACTORY (shell->menubar_factory)->accel_group);
@ -658,6 +672,13 @@ gimp_display_shell_new (GimpDisplay *gdisp,
if (shell->options->show_menubar)
gtk_widget_show (menubar);
#if 0
menubar = gimp_ui_manager_ui_create (shell->menubar_manager,
"/image-menubar");
gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
gtk_widget_show (menubar);
#endif
/* make sure we can activate accels even if the menubar is invisible
* (see http://bugzilla.gnome.org/show_bug.cgi?id=137151)
*/

View File

@ -71,6 +71,8 @@ struct _GimpDisplayShell
GimpDisplay *gdisp;
GimpItemFactory *menubar_factory;
GimpUIManager *menubar_manager;
GimpItemFactory *popup_factory;
GimpItemFactory *qmask_factory;

View File

@ -314,7 +314,8 @@ dialogs_gradient_list_view_new (GimpDialogFactory *factory,
dialogs_edit_gradient_func,
context,
preview_size, 1,
factory->menu_factory, "<Gradients>");
factory->menu_factory, "<Gradients>",
"/gradients-popup");
return dialogs_dockable_new (view,
_("Gradients"), NULL,
@ -334,7 +335,8 @@ dialogs_palette_list_view_new (GimpDialogFactory *factory,
dialogs_edit_palette_func,
context,
preview_size, 1,
factory->menu_factory, "<Palettes>");
factory->menu_factory, "<Palettes>",
"/palettes-popup");
return dialogs_dockable_new (view,
_("Palettes"), NULL,
@ -521,7 +523,8 @@ dialogs_gradient_grid_view_new (GimpDialogFactory *factory,
dialogs_edit_gradient_func,
context,
preview_size, 1,
factory->menu_factory, "<Gradients>");
factory->menu_factory, "<Gradients>",
"/gradients-popup");
return dialogs_dockable_new (view,
_("Gradients"), NULL,
@ -541,7 +544,8 @@ dialogs_palette_grid_view_new (GimpDialogFactory *factory,
dialogs_edit_palette_func,
context,
preview_size, 1,
factory->menu_factory, "<Palettes>");
factory->menu_factory, "<Palettes>",
"/palettes-popup");
return dialogs_dockable_new (view,
_("Palettes"), NULL,
@ -647,7 +651,8 @@ dialogs_layer_list_view_new (GimpDialogFactory *factory,
(GimpEditItemFunc) layers_edit_layer_query,
(GimpNewItemFunc) layers_new_layer_query,
(GimpActivateItemFunc) layers_text_tool,
factory->menu_factory, "<Layers>");
factory->menu_factory, "<Layers>",
"/layers-popup");
dockable = dialogs_dockable_new (view,
_("Layers"), NULL,
@ -678,7 +683,8 @@ dialogs_channel_list_view_new (GimpDialogFactory *factory,
(GimpEditItemFunc) channels_edit_channel_query,
(GimpNewItemFunc) channels_new_channel_query,
(GimpActivateItemFunc) channels_edit_channel_query,
factory->menu_factory, "<Channels>");
factory->menu_factory, "<Channels>",
"/channels-popup");
dockable = dialogs_dockable_new (view,
_("Channels"), NULL,
@ -710,7 +716,8 @@ dialogs_vectors_list_view_new (GimpDialogFactory *factory,
(GimpEditItemFunc) vectors_edit_vectors_query,
(GimpNewItemFunc) vectors_new_vectors_query,
(GimpActivateItemFunc) vectors_vectors_tool,
factory->menu_factory, "<Vectors>");
factory->menu_factory, "<Vectors>",
"/vectors-popup");
vectors_view = GIMP_VECTORS_TREE_VIEW (view);

View File

@ -137,7 +137,8 @@ gradient_select_new (Gimp *gimp,
dialogs_edit_gradient_func,
gsp->context,
GIMP_PREVIEW_SIZE_MEDIUM, 1,
global_menu_factory, "<Gradients>");
global_menu_factory, "<Gradients>",
"/gradients-popup");
gimp_container_view_set_size_request (GIMP_CONTAINER_VIEW (GIMP_CONTAINER_EDITOR (gsp->view)->view),
6 * (GIMP_PREVIEW_SIZE_MEDIUM + 2),

View File

@ -33,6 +33,7 @@
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimperrorconsole.h"
#include "widgets/gimpitemfactory.h"
#include "widgets/gimpuimanager.h"
#include "widgets/gimpwidgets-utils.h"
#include "display/gimpdisplay.h"
@ -199,6 +200,7 @@ gui_display_new (GimpImage *gimage,
gimp_context_set_display (gimp_get_user_context (gimage->gimp), gdisp);
gimp_item_factory_update (shell->menubar_factory, shell);
gimp_ui_manager_update (shell->menubar_manager, shell);
return GIMP_OBJECT (gdisp);
}

View File

@ -127,9 +127,22 @@ menus_init (Gimp *gimp)
n_image_menu_entries,
image_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Image>",
"file", "edit", "select", "view",
"image", "drawable", "layers", "vectors",
"tools", "dialogs", "plug-in", NULL);
"file",
"edit",
"select",
"view",
"image",
"drawable",
"layers",
"vectors",
"tools",
"dialogs",
"plug-in",
NULL,
"/toolbox-menubar", "toolbox-menu.xml",
"/image-menubar", "image-menu.xml",
"/qmask-popup", "qmask-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Load>",
_("Open Menu"),
@ -152,6 +165,11 @@ menus_init (Gimp *gimp)
NULL, layers_menu_update, TRUE,
n_layers_menu_entries,
layers_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Layers>",
"layers",
NULL,
"/layers-popup", "layers-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Channels>",
_("Channels Menu"),
@ -159,6 +177,11 @@ menus_init (Gimp *gimp)
NULL, channels_menu_update, TRUE,
n_channels_menu_entries,
channels_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Channels>",
"channels",
NULL,
"/channels-popup", "channels-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Vectors>",
_("Paths Menu"),
@ -166,6 +189,11 @@ menus_init (Gimp *gimp)
NULL, vectors_menu_update, TRUE,
n_vectors_menu_entries,
vectors_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Vectors>",
"vectors",
NULL,
"/vectors-popup", "vectors-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Dialogs>",
_("Dialogs Menu"),
@ -173,6 +201,11 @@ menus_init (Gimp *gimp)
NULL, dialogs_menu_update, TRUE,
n_dialogs_menu_entries,
dialogs_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Dialogs>",
"dockable",
NULL,
"/dockable-popup", "dockable-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Brushes>",
_("Brushes Menu"),
@ -180,6 +213,11 @@ menus_init (Gimp *gimp)
NULL, brushes_menu_update, TRUE,
n_brushes_menu_entries,
brushes_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Brushes>",
"brushes",
NULL,
"/brushes-popup", "brushes-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Patterns>",
_("Patterns Menu"),
@ -187,6 +225,11 @@ menus_init (Gimp *gimp)
NULL, patterns_menu_update, TRUE,
n_patterns_menu_entries,
patterns_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Patterns>",
"patterns",
NULL,
"/patterns-popup", "patterns-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Gradients>",
_("Gradients Menu"),
@ -194,6 +237,11 @@ menus_init (Gimp *gimp)
NULL, gradients_menu_update, TRUE,
n_gradients_menu_entries,
gradients_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Gradients>",
"gradients",
NULL,
"/gradients-popup", "gradients-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Palettes>",
_("Palettes Menu"),
@ -201,6 +249,11 @@ menus_init (Gimp *gimp)
NULL, palettes_menu_update, TRUE,
n_palettes_menu_entries,
palettes_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Palettes>",
"palettes",
NULL,
"/palettes-popup", "palettes-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Fonts>",
_("Fonts Menu"),
@ -208,6 +261,11 @@ menus_init (Gimp *gimp)
NULL, fonts_menu_update, TRUE,
n_fonts_menu_entries,
fonts_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Fonts>",
"fonts",
NULL,
"/fonts-popup", "fonts-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Buffers>",
_("Buffers Menu"),
@ -215,6 +273,11 @@ menus_init (Gimp *gimp)
NULL, buffers_menu_update, TRUE,
n_buffers_menu_entries,
buffers_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Buffers>",
"buffers",
NULL,
"/buffers-popup", "buffers-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Documents>",
_("Documents Menu"),
@ -222,6 +285,11 @@ menus_init (Gimp *gimp)
NULL, documents_menu_update, TRUE,
n_documents_menu_entries,
documents_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Documents>",
"documents",
NULL,
"/documents-popup", "documents-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Templates>",
_("Templates Menu"),
@ -229,6 +297,11 @@ menus_init (Gimp *gimp)
NULL, templates_menu_update, TRUE,
n_templates_menu_entries,
templates_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Templates>",
"templates",
NULL,
"/templates-popup", "templates-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Images>",
_("Images Menu"),
@ -236,6 +309,11 @@ menus_init (Gimp *gimp)
NULL, images_menu_update, TRUE,
n_images_menu_entries,
images_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Images>",
"images",
NULL,
"/images-popup", "images-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<GradientEditor>",
_("Gradient Editor Menu"),
@ -243,6 +321,12 @@ menus_init (Gimp *gimp)
NULL, gradient_editor_menu_update, TRUE,
n_gradient_editor_menu_entries,
gradient_editor_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<GradientEditor>",
"gradient-editor",
NULL,
"/gradient-editor-popup",
"gradient-editor-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<PaletteEditor>",
_("Palette Editor Menu"),
@ -250,6 +334,12 @@ menus_init (Gimp *gimp)
NULL, palette_editor_menu_update, TRUE,
n_palette_editor_menu_entries,
palette_editor_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<PaletteEditor>",
"pelette-editor",
NULL,
"/palette-editor-popup",
"palette-editor-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<ColormapEditor>",
_("Indexed Palette Menu"),
@ -257,6 +347,12 @@ menus_init (Gimp *gimp)
NULL, colormap_editor_menu_update, TRUE,
n_colormap_editor_menu_entries,
colormap_editor_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<ColormapEditor>",
"colormap-editor",
NULL,
"/colormap-editor-popup",
"colormap-editor-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<QMask>",
_("QuickMask Menu"),
@ -264,6 +360,12 @@ menus_init (Gimp *gimp)
NULL, qmask_menu_update, TRUE,
n_qmask_menu_entries,
qmask_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<QMask>",
"qmask",
NULL,
"/qmask-popup",
"qmask-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<ErrorConsole>",
_("Error Console Menu"),
@ -271,6 +373,12 @@ menus_init (Gimp *gimp)
NULL, error_console_menu_update, TRUE,
n_error_console_menu_entries,
error_console_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<ErrorConsole>",
"error-console",
NULL,
"/error-console-popup",
"error-console-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<ToolOptions>",
_("Tool Options Menu"),
@ -279,6 +387,12 @@ menus_init (Gimp *gimp)
tool_options_menu_update, TRUE,
n_tool_options_menu_entries,
tool_options_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<ToolOptions>",
"tool-options",
NULL,
"/tool-options-popup",
"tool-options-menu.xml",
NULL);
}
void

View File

@ -139,7 +139,8 @@ palette_select_new (Gimp *gimp,
dialogs_edit_palette_func,
psp->context,
GIMP_PREVIEW_SIZE_MEDIUM, 1,
global_menu_factory, "<Palettes>");
global_menu_factory, "<Palettes>",
"/palettes-popup");
gimp_container_view_set_size_request (GIMP_CONTAINER_VIEW (GIMP_CONTAINER_EDITOR (psp->view)->view),
5 * (GIMP_PREVIEW_SIZE_MEDIUM + 2),

View File

@ -135,7 +135,8 @@ pattern_select_new (Gimp *gimp,
NULL,
psp->context,
GIMP_PREVIEW_SIZE_MEDIUM, 1,
global_menu_factory, "<Patterns>");
global_menu_factory, "<Patterns>",
"/patterns-popup");
gimp_container_view_set_size_request (GIMP_CONTAINER_VIEW (GIMP_CONTAINER_EDITOR (psp->view)->view),
6 * (GIMP_PREVIEW_SIZE_MEDIUM + 2),

View File

@ -127,9 +127,22 @@ menus_init (Gimp *gimp)
n_image_menu_entries,
image_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Image>",
"file", "edit", "select", "view",
"image", "drawable", "layers", "vectors",
"tools", "dialogs", "plug-in", NULL);
"file",
"edit",
"select",
"view",
"image",
"drawable",
"layers",
"vectors",
"tools",
"dialogs",
"plug-in",
NULL,
"/toolbox-menubar", "toolbox-menu.xml",
"/image-menubar", "image-menu.xml",
"/qmask-popup", "qmask-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Load>",
_("Open Menu"),
@ -152,6 +165,11 @@ menus_init (Gimp *gimp)
NULL, layers_menu_update, TRUE,
n_layers_menu_entries,
layers_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Layers>",
"layers",
NULL,
"/layers-popup", "layers-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Channels>",
_("Channels Menu"),
@ -159,6 +177,11 @@ menus_init (Gimp *gimp)
NULL, channels_menu_update, TRUE,
n_channels_menu_entries,
channels_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Channels>",
"channels",
NULL,
"/channels-popup", "channels-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Vectors>",
_("Paths Menu"),
@ -166,6 +189,11 @@ menus_init (Gimp *gimp)
NULL, vectors_menu_update, TRUE,
n_vectors_menu_entries,
vectors_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Vectors>",
"vectors",
NULL,
"/vectors-popup", "vectors-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Dialogs>",
_("Dialogs Menu"),
@ -173,6 +201,11 @@ menus_init (Gimp *gimp)
NULL, dialogs_menu_update, TRUE,
n_dialogs_menu_entries,
dialogs_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Dialogs>",
"dockable",
NULL,
"/dockable-popup", "dockable-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Brushes>",
_("Brushes Menu"),
@ -180,6 +213,11 @@ menus_init (Gimp *gimp)
NULL, brushes_menu_update, TRUE,
n_brushes_menu_entries,
brushes_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Brushes>",
"brushes",
NULL,
"/brushes-popup", "brushes-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Patterns>",
_("Patterns Menu"),
@ -187,6 +225,11 @@ menus_init (Gimp *gimp)
NULL, patterns_menu_update, TRUE,
n_patterns_menu_entries,
patterns_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Patterns>",
"patterns",
NULL,
"/patterns-popup", "patterns-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Gradients>",
_("Gradients Menu"),
@ -194,6 +237,11 @@ menus_init (Gimp *gimp)
NULL, gradients_menu_update, TRUE,
n_gradients_menu_entries,
gradients_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Gradients>",
"gradients",
NULL,
"/gradients-popup", "gradients-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Palettes>",
_("Palettes Menu"),
@ -201,6 +249,11 @@ menus_init (Gimp *gimp)
NULL, palettes_menu_update, TRUE,
n_palettes_menu_entries,
palettes_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Palettes>",
"palettes",
NULL,
"/palettes-popup", "palettes-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Fonts>",
_("Fonts Menu"),
@ -208,6 +261,11 @@ menus_init (Gimp *gimp)
NULL, fonts_menu_update, TRUE,
n_fonts_menu_entries,
fonts_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Fonts>",
"fonts",
NULL,
"/fonts-popup", "fonts-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Buffers>",
_("Buffers Menu"),
@ -215,6 +273,11 @@ menus_init (Gimp *gimp)
NULL, buffers_menu_update, TRUE,
n_buffers_menu_entries,
buffers_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Buffers>",
"buffers",
NULL,
"/buffers-popup", "buffers-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Documents>",
_("Documents Menu"),
@ -222,6 +285,11 @@ menus_init (Gimp *gimp)
NULL, documents_menu_update, TRUE,
n_documents_menu_entries,
documents_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Documents>",
"documents",
NULL,
"/documents-popup", "documents-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Templates>",
_("Templates Menu"),
@ -229,6 +297,11 @@ menus_init (Gimp *gimp)
NULL, templates_menu_update, TRUE,
n_templates_menu_entries,
templates_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Templates>",
"templates",
NULL,
"/templates-popup", "templates-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<Images>",
_("Images Menu"),
@ -236,6 +309,11 @@ menus_init (Gimp *gimp)
NULL, images_menu_update, TRUE,
n_images_menu_entries,
images_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<Images>",
"images",
NULL,
"/images-popup", "images-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<GradientEditor>",
_("Gradient Editor Menu"),
@ -243,6 +321,12 @@ menus_init (Gimp *gimp)
NULL, gradient_editor_menu_update, TRUE,
n_gradient_editor_menu_entries,
gradient_editor_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<GradientEditor>",
"gradient-editor",
NULL,
"/gradient-editor-popup",
"gradient-editor-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<PaletteEditor>",
_("Palette Editor Menu"),
@ -250,6 +334,12 @@ menus_init (Gimp *gimp)
NULL, palette_editor_menu_update, TRUE,
n_palette_editor_menu_entries,
palette_editor_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<PaletteEditor>",
"pelette-editor",
NULL,
"/palette-editor-popup",
"palette-editor-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<ColormapEditor>",
_("Indexed Palette Menu"),
@ -257,6 +347,12 @@ menus_init (Gimp *gimp)
NULL, colormap_editor_menu_update, TRUE,
n_colormap_editor_menu_entries,
colormap_editor_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<ColormapEditor>",
"colormap-editor",
NULL,
"/colormap-editor-popup",
"colormap-editor-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<QMask>",
_("QuickMask Menu"),
@ -264,6 +360,12 @@ menus_init (Gimp *gimp)
NULL, qmask_menu_update, TRUE,
n_qmask_menu_entries,
qmask_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<QMask>",
"qmask",
NULL,
"/qmask-popup",
"qmask-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<ErrorConsole>",
_("Error Console Menu"),
@ -271,6 +373,12 @@ menus_init (Gimp *gimp)
NULL, error_console_menu_update, TRUE,
n_error_console_menu_entries,
error_console_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<ErrorConsole>",
"error-console",
NULL,
"/error-console-popup",
"error-console-menu.xml",
NULL);
gimp_menu_factory_menu_register (global_menu_factory, "<ToolOptions>",
_("Tool Options Menu"),
@ -279,6 +387,12 @@ menus_init (Gimp *gimp)
tool_options_menu_update, TRUE,
n_tool_options_menu_entries,
tool_options_menu_entries);
gimp_menu_factory_manager_register (global_menu_factory, "<ToolOptions>",
"tool-options",
NULL,
"/tool-options-popup",
"tool-options-menu.xml",
NULL);
}
void

View File

@ -200,6 +200,8 @@ libappwidgets_a_sources = \
gimptooldialog.h \
gimptooloptionseditor.c \
gimptooloptionseditor.h \
gimpuimanager.c \
gimpuimanager.h \
gimpundoeditor.c \
gimpundoeditor.h \
gimpvectorstreeview.c \

View File

@ -226,7 +226,7 @@ gimp_brush_editor_new (Gimp *gimp)
if (! gimp_data_editor_construct (GIMP_DATA_EDITOR (brush_editor),
gimp->brush_factory,
NULL, NULL))
NULL, NULL, NULL))
{
g_object_unref (brush_editor);
return NULL;

View File

@ -174,7 +174,8 @@ gimp_brush_factory_view_new (GimpViewType view_type,
edit_func,
context,
preview_size, preview_border_width,
menu_factory, "<Brushes>"))
menu_factory, "<Brushes>",
"/brushes-popup"))
{
g_object_unref (factory_view);
return NULL;

View File

@ -104,9 +104,7 @@ gimp_buffer_view_get_type (void)
static void
gimp_buffer_view_class_init (GimpBufferViewClass *klass)
{
GimpContainerEditorClass *editor_class;
editor_class = GIMP_CONTAINER_EDITOR_CLASS (klass);
GimpContainerEditorClass *editor_class = GIMP_CONTAINER_EDITOR_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
@ -141,7 +139,8 @@ gimp_buffer_view_new (GimpViewType view_type,
container,context,
preview_size, preview_border_width,
TRUE, /* reorderable */
menu_factory, "<Buffers>"))
menu_factory, "<Buffers>",
"/buffers-popup"))
{
g_object_unref (buffer_view);
return NULL;

View File

@ -339,7 +339,8 @@ gimp_colormap_editor_new (GimpImage *gimage,
editor = g_object_new (GIMP_TYPE_COLORMAP_EDITOR, NULL);
gimp_editor_create_menu (GIMP_EDITOR (editor),
menu_factory, "<ColormapEditor>", editor);
menu_factory, "<ColormapEditor>",
"/colormap-editor-popup", editor);
/* The palette frame */
frame = gtk_frame_new (NULL);

View File

@ -284,7 +284,8 @@ gimp_component_editor_new (gint preview_size,
gimp_component_editor_set_preview_size (editor, preview_size);
gimp_editor_create_menu (GIMP_EDITOR (editor),
menu_factory, "<Channels>", editor);
menu_factory, "<Channels>",
"/channels-popup", editor);
return GTK_WIDGET (editor);
}

View File

@ -142,7 +142,8 @@ gimp_container_editor_construct (GimpContainerEditor *editor,
gint preview_border_width,
gboolean reorderable,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier)
const gchar *menu_identifier,
const gchar *ui_identifier)
{
g_return_val_if_fail (GIMP_IS_CONTAINER_EDITOR (editor), FALSE);
g_return_val_if_fail (GIMP_IS_CONTAINER (container), FALSE);
@ -180,9 +181,10 @@ gimp_container_editor_construct (GimpContainerEditor *editor,
return FALSE;
}
if (menu_factory && menu_identifier)
if (menu_factory && menu_identifier && ui_identifier)
gimp_editor_create_menu (GIMP_EDITOR (editor->view),
menu_factory, menu_identifier, editor);
menu_factory, menu_identifier, ui_identifier,
editor);
gtk_container_add (GTK_CONTAINER (editor), GTK_WIDGET (editor->view));
gtk_widget_show (GTK_WIDGET (editor->view));

View File

@ -69,7 +69,8 @@ gboolean gimp_container_editor_construct (GimpContainerEditor *editor,
gint preview_border_width,
gboolean reorderable,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier);
const gchar *menu_identifier,
const gchar *ui_identifier);
#endif /* __GIMP_CONTAINER_EDITOR_H__ */

View File

@ -485,7 +485,7 @@ gimp_container_popup_create_view (GimpContainerPopup *popup)
popup->preview_size,
popup->preview_border_width,
FALSE, /* reorderable */
NULL, NULL);
NULL, NULL, NULL);
gimp_container_view_set_size_request (GIMP_CONTAINER_VIEW (GIMP_CONTAINER_EDITOR (popup->editor)->view),
6 * (popup->default_preview_size +

View File

@ -272,7 +272,8 @@ gboolean
gimp_data_editor_construct (GimpDataEditor *editor,
GimpDataFactory *data_factory,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier)
const gchar *menu_identifier,
const gchar *ui_identifier)
{
GimpData *data;
@ -285,9 +286,10 @@ gimp_data_editor_construct (GimpDataEditor *editor,
editor->data_factory = data_factory;
if (menu_factory && menu_identifier)
if (menu_factory && menu_identifier && ui_identifier)
gimp_editor_create_menu (GIMP_EDITOR (editor),
menu_factory, menu_identifier, editor);
menu_factory, menu_identifier, ui_identifier,
editor);
data = (GimpData *)
gimp_context_get_by_type (gimp_get_user_context (data_factory->gimp),

View File

@ -66,7 +66,8 @@ GType gimp_data_editor_get_type (void) G_GNUC_CONST;
gboolean gimp_data_editor_construct (GimpDataEditor *editor,
GimpDataFactory *data_factory,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier);
const gchar *menu_identifier,
const gchar *ui_identifier);
void gimp_data_editor_set_data (GimpDataEditor *editor,
GimpData *data);

View File

@ -133,7 +133,8 @@ gimp_data_factory_view_new (GimpViewType view_type,
gint preview_size,
gint preview_border_width,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier)
const gchar *menu_identifier,
const gchar *ui_identifier)
{
GimpDataFactoryView *factory_view;
@ -147,7 +148,8 @@ gimp_data_factory_view_new (GimpViewType view_type,
preview_size,
preview_border_width,
menu_factory,
menu_identifier))
menu_identifier,
ui_identifier))
{
g_object_unref (factory_view);
return NULL;
@ -165,7 +167,8 @@ gimp_data_factory_view_construct (GimpDataFactoryView *factory_view,
gint preview_size,
gint preview_border_width,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier)
const gchar *menu_identifier,
const gchar *ui_identifier)
{
GimpContainerEditor *editor;
@ -185,7 +188,8 @@ gimp_data_factory_view_construct (GimpDataFactoryView *factory_view,
factory->container, context,
preview_size, preview_border_width,
FALSE, /* reorderable */
menu_factory, menu_identifier))
menu_factory, menu_identifier,
ui_identifier))
{
return FALSE;
}

View File

@ -70,7 +70,8 @@ GtkWidget * gimp_data_factory_view_new (GimpViewType view_type,
gint preview_size,
gint preview_border_width,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier);
const gchar *menu_identifier,
const gchar *ui_identifier);
/* protected */
@ -83,7 +84,8 @@ gboolean gimp_data_factory_view_construct (GimpDataFactoryView *factory_view,
gint preview_size,
gint preview_border_width,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier);
const gchar *menu_identifier,
const gchar *ui_identifier);
#endif /* __GIMP_DATA_FACTORY_VIEW_H__ */

View File

@ -155,7 +155,8 @@ gimp_document_view_new (GimpViewType view_type,
container, context,
preview_size, preview_border_width,
TRUE, /* reorderable */
menu_factory, "<Documents>"))
menu_factory, "<Documents>",
"/documents-popup"))
{
g_object_unref (document_view);
return NULL;

View File

@ -137,6 +137,7 @@ gimp_editor_init (GimpEditor *editor)
{
editor->menu_factory = NULL;
editor->item_factory = NULL;
editor->ui_manager = NULL;
editor->item_factory_data = NULL;
editor->button_box = NULL;
}
@ -150,9 +151,7 @@ gimp_editor_docked_iface_init (GimpDockedInterface *docked_iface)
static void
gimp_editor_destroy (GtkObject *object)
{
GimpEditor *editor;
editor = GIMP_EDITOR (object);
GimpEditor *editor = GIMP_EDITOR (object);
if (editor->item_factory)
{
@ -160,6 +159,12 @@ gimp_editor_destroy (GtkObject *object)
editor->item_factory = NULL;
}
if (editor->ui_manager)
{
g_object_unref (editor->ui_manager);
editor->ui_manager = NULL;
}
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
@ -206,11 +211,13 @@ void
gimp_editor_create_menu (GimpEditor *editor,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier,
const gchar *ui_identifier,
gpointer callback_data)
{
g_return_if_fail (GIMP_IS_EDITOR (editor));
g_return_if_fail (GIMP_IS_MENU_FACTORY (menu_factory));
g_return_if_fail (menu_identifier != NULL);
g_return_if_fail (ui_identifier != NULL);
if (editor->item_factory)
g_object_unref (editor->item_factory);
@ -222,6 +229,14 @@ gimp_editor_create_menu (GimpEditor *editor,
callback_data,
FALSE);
editor->item_factory_data = callback_data;
if (editor->ui_manager)
g_object_unref (editor->ui_manager);
editor->ui_manager = gimp_menu_factory_manager_new (menu_factory,
menu_identifier,
callback_data,
FALSE);
}
GtkWidget *

View File

@ -42,6 +42,7 @@ struct _GimpEditor
GimpMenuFactory *menu_factory;
GimpItemFactory *item_factory;
GimpUIManager *ui_manager;
gpointer item_factory_data;
GtkWidget *button_box;
@ -60,6 +61,7 @@ GtkWidget * gimp_editor_new (void);
void gimp_editor_create_menu (GimpEditor *editor,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier,
const gchar *ui_identifier,
gpointer callback_data);
GtkWidget * gimp_editor_add_button (GimpEditor *editor,

View File

@ -234,7 +234,8 @@ gimp_error_console_new (Gimp *gimp,
console->gimp = gimp;
gimp_editor_create_menu (GIMP_EDITOR (console),
menu_factory, "<ErrorConsole>", console);
menu_factory, "<ErrorConsole>",
"/error-console-popup", console);
console->gimp->message_handler = GIMP_ERROR_CONSOLE;

View File

@ -120,7 +120,8 @@ gimp_font_view_new (GimpViewType view_type,
container,context,
preview_size, preview_border_width,
FALSE, /* reorderable */
menu_factory, "<Fonts>"))
menu_factory, "<Fonts>",
"/fonts-popup"))
{
g_object_unref (font_view);
return NULL;

View File

@ -472,7 +472,8 @@ gimp_gradient_editor_new (Gimp *gimp,
if (! gimp_data_editor_construct (GIMP_DATA_EDITOR (editor),
gimp->gradient_factory,
menu_factory, "<GradientEditor>"))
menu_factory, "<GradientEditor>",
"/gradient-editor-popup"))
{
g_object_unref (editor);
return NULL;

View File

@ -125,7 +125,8 @@ gimp_image_view_new (GimpViewType view_type,
container, context,
preview_size, preview_border_width,
TRUE, /* reorderable */
menu_factory, "<Images>"))
menu_factory, "<Images>",
"/images-popup"))
{
g_object_unref (image_view);
return NULL;

View File

@ -613,7 +613,8 @@ gimp_item_tree_view_new (gint preview_size,
GimpNewItemFunc new_item_func,
GimpActivateItemFunc activate_item_func,
GimpMenuFactory *menu_factory,
const gchar *menu_identifier)
const gchar *menu_identifier,
const gchar *ui_identifier)
{
GimpItemTreeView *item_view;
GimpContainerView *view;
@ -632,6 +633,7 @@ gimp_item_tree_view_new (gint preview_size,
g_return_val_if_fail (activate_item_func != NULL, NULL);
g_return_val_if_fail (GIMP_IS_MENU_FACTORY (menu_factory), NULL);
g_return_val_if_fail (menu_identifier != NULL, NULL);
g_return_val_if_fail (ui_identifier != NULL, NULL);
if (item_type == GIMP_TYPE_LAYER)
{
@ -669,7 +671,8 @@ gimp_item_tree_view_new (gint preview_size,
item_view->activate_item_func = activate_item_func;
gimp_editor_create_menu (GIMP_EDITOR (item_view),
menu_factory, menu_identifier, item_view);
menu_factory, menu_identifier, ui_identifier,
item_view);
gimp_item_tree_view_set_image (item_view, gimage);

View File

@ -139,7 +139,8 @@ GtkWidget * gimp_item_tree_view_new (gint preview_size,
GimpNewItemFunc new_item_func,
GimpActivateItemFunc activate_item_func,
GimpMenuFactory *menu_facotry,
const gchar *menu_identifier);
const gchar *menu_identifier,
const gchar *ui_identifier);
void gimp_item_tree_view_set_image (GimpItemTreeView *view,
GimpImage *gimage);

View File

@ -34,6 +34,7 @@
#include "gimpactionfactory.h"
#include "gimpmenufactory.h"
#include "gimpitemfactory.h"
#include "gimpuimanager.h"
static void gimp_menu_factory_class_init (GimpMenuFactoryClass *klass);
@ -231,6 +232,8 @@ gimp_menu_factory_manager_register (GimpMenuFactory *factory,
if (! strcmp (entry->identifier, identifier))
{
const gchar *group;
const gchar *ui_identifier;
const gchar *ui_basename;
va_list args;
g_return_if_fail (entry->action_groups == NULL);
@ -245,10 +248,31 @@ gimp_menu_factory_manager_register (GimpMenuFactory *factory,
g_strdup (group));
}
va_end (args);
entry->action_groups = g_list_reverse (entry->action_groups);
ui_identifier = va_arg (args, const gchar *);
while (ui_identifier)
{
GimpUIManagerUIEntry *ui_entry;
ui_basename = va_arg (args, const gchar *);
ui_entry = g_new0 (GimpUIManagerUIEntry, 1);
ui_entry->identifier = g_strdup (ui_identifier);
ui_entry->basename = g_strdup (ui_basename);
entry->managed_uis = g_list_prepend (entry->managed_uis,
ui_entry);
ui_identifier = va_arg (args, const gchar *);
}
entry->managed_uis = g_list_reverse (entry->managed_uis);
va_end (args);
return;
}
}
@ -257,7 +281,7 @@ gimp_menu_factory_manager_register (GimpMenuFactory *factory,
G_STRFUNC, identifier);
}
GtkUIManager *
GimpUIManager *
gimp_menu_factory_manager_new (GimpMenuFactory *factory,
const gchar *identifier,
gpointer callback_data,
@ -274,11 +298,12 @@ gimp_menu_factory_manager_new (GimpMenuFactory *factory,
if (! strcmp (entry->identifier, identifier))
{
GtkUIManager *manager;
GList *list;
GimpUIManager *manager;
GList *list;
manager = gtk_ui_manager_new ();
gtk_ui_manager_set_add_tearoffs (manager, create_tearoff);
manager = gimp_ui_manager_new (factory->gimp);
gtk_ui_manager_set_add_tearoffs (GTK_UI_MANAGER (manager),
create_tearoff);
for (list = entry->action_groups; list; list = g_list_next (list))
{
@ -287,12 +312,21 @@ gimp_menu_factory_manager_new (GimpMenuFactory *factory,
group = gimp_action_factory_group_new (factory->action_factory,
(const gchar *) list->data,
callback_data);
gtk_ui_manager_insert_action_group (manager,
gtk_ui_manager_insert_action_group (GTK_UI_MANAGER (manager),
GTK_ACTION_GROUP (group),
-1);
g_object_unref (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->identifier,
ui_entry->basename);
}
return manager;
}
}

View File

@ -40,6 +40,7 @@ struct _GimpMenuFactoryEntry
GimpItemFactoryEntry *entries;
GList *action_groups;
GList *managed_uis;
};
@ -95,7 +96,7 @@ void gimp_menu_factory_manager_register (GimpMenuFactory *factory,
const gchar *first_group,
...);
GtkUIManager * gimp_menu_factory_manager_new (GimpMenuFactory *factory,
GimpUIManager * gimp_menu_factory_manager_new (GimpMenuFactory *factory,
const gchar *identifier,
gpointer callback_data,
gboolean create_tearoff);

View File

@ -522,7 +522,8 @@ gimp_palette_editor_new (Gimp *gimp,
if (! gimp_data_editor_construct (GIMP_DATA_EDITOR (palette_editor),
gimp->palette_factory,
menu_factory, "<PaletteEditor>"))
menu_factory, "<PaletteEditor>",
"/palette-editor-popup"))
{
g_object_unref (palette_editor);
return NULL;

View File

@ -90,7 +90,8 @@ gimp_pattern_factory_view_new (GimpViewType view_type,
edit_func,
context,
preview_size, preview_border_width,
menu_factory, "<Patterns>"))
menu_factory, "<Patterns>",
"/patterns-popup"))
{
g_object_unref (factory_view);
return NULL;

View File

@ -148,7 +148,8 @@ gimp_template_view_new (GimpViewType view_type,
container, context,
preview_size, preview_border_width,
TRUE, /* reorderable */
menu_factory, "<Templates>"))
menu_factory, "<Templates>",
"/templates-popup"))
{
g_object_unref (template_view);
return NULL;

View File

@ -286,8 +286,8 @@ gimp_tool_options_editor_new (Gimp *gimp,
gtk_widget_set_size_request (GTK_WIDGET (editor), -1, 200);
gimp_editor_create_menu (GIMP_EDITOR (editor),
menu_factory, "<ToolOptions>",
gimp_editor_create_menu (GIMP_EDITOR (editor), menu_factory,
"<ToolOptions>", "/tool-options-popup",
editor);
g_signal_connect_object (user_context, "tool_changed",

306
app/widgets/gimpuimanager.c Normal file
View File

@ -0,0 +1,306 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpuimanager.c
* Copyright (C) 2004 Michael Natterer <mitch@gimp.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <string.h>
#include <gtk/gtk.h>
#include "libgimpbase/gimpbase.h"
#include "widgets-types.h"
#include "core/gimp.h"
#include "gimpactiongroup.h"
#include "gimpuimanager.h"
enum
{
PROP_0,
PROP_GIMP
};
static void gimp_ui_manager_init (GimpUIManager *manager);
static void gimp_ui_manager_class_init (GimpUIManagerClass *klass);
static void gimp_ui_manager_finalize (GObject *object);
static void gimp_ui_manager_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_ui_manager_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
static GtkUIManagerClass *parent_class = NULL;
GType
gimp_ui_manager_get_type (void)
{
static GType type = 0;
if (!type)
{
static const GTypeInfo type_info =
{
sizeof (GimpUIManagerClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) gimp_ui_manager_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (GimpUIManager),
0, /* n_preallocs */
(GInstanceInitFunc) gimp_ui_manager_init,
};
type = g_type_register_static (GTK_TYPE_UI_MANAGER,
"GimpUIManager",
&type_info, 0);
}
return type;
}
static void
gimp_ui_manager_class_init (GimpUIManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->finalize = gimp_ui_manager_finalize;
object_class->set_property = gimp_ui_manager_set_property;
object_class->get_property = gimp_ui_manager_get_property;
g_object_class_install_property (object_class, PROP_GIMP,
g_param_spec_object ("gimp",
NULL, NULL,
GIMP_TYPE_GIMP,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
}
static void
gimp_ui_manager_init (GimpUIManager *manager)
{
manager->gimp = NULL;
}
static void
gimp_ui_manager_finalize (GObject *object)
{
GimpUIManager *manager = GIMP_UI_MANAGER (object);
GList *list;
for (list = manager->registered_uis; list; list = g_list_next (list))
{
GimpUIManagerUIEntry *entry = list->data;
g_free (entry->identifier);
g_free (entry->basename);
g_free (entry);
}
g_list_free (manager->registered_uis);
manager->registered_uis = NULL;
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static void
gimp_ui_manager_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
GimpUIManager *manager = GIMP_UI_MANAGER (object);
switch (prop_id)
{
case PROP_GIMP:
manager->gimp = g_value_get_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gimp_ui_manager_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GimpUIManager *manager = GIMP_UI_MANAGER (object);
switch (prop_id)
{
case PROP_GIMP:
g_value_set_object (value, manager->gimp);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/**
* gimp_ui_manager_new:
* @gimp: the @Gimp instance this ui manager belongs to
*
* Creates a new #GimpUIManager object.
*
* Returns: the new #GimpUIManager
*/
GimpUIManager *
gimp_ui_manager_new (Gimp *gimp)
{
GimpUIManager *manager;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
manager = g_object_new (GIMP_TYPE_UI_MANAGER,
"gimp", gimp,
NULL);
return manager;
}
void
gimp_ui_manager_update (GimpUIManager *manager,
gpointer update_data)
{
GList *list;
g_return_if_fail (GIMP_IS_UI_MANAGER (manager));
for (list = gtk_ui_manager_get_action_groups (GTK_UI_MANAGER (manager));
list;
list = g_list_next (list))
{
gimp_action_group_update (list->data, update_data);
}
}
void
gimp_ui_manager_ui_register (GimpUIManager *manager,
const gchar *identifier,
const gchar *basename)
{
GimpUIManagerUIEntry *entry;
g_return_if_fail (GIMP_IS_UI_MANAGER (manager));
g_return_if_fail (identifier != NULL);
g_return_if_fail (basename != NULL);
entry = g_new0 (GimpUIManagerUIEntry, 1);
entry->identifier = g_strdup (identifier);
entry->basename = g_strdup (basename);
manager->registered_uis = g_list_prepend (manager->registered_uis, entry);
#if 0
{
gchar *filename;
GError *error = NULL;
filename = g_build_filename (gimp_data_directory (), "menus",
entry->basename, NULL);
g_print ("loading menu: %s for %s\n", filename,
entry->identifier);
entry->merge_id =
gtk_ui_manager_add_ui_from_file (GTK_UI_MANAGER (manager),
filename, &error);
g_free (filename);
if (! entry->merge_id)
{
g_message (error->message);
g_clear_error (&error);
}
}
#endif
}
GtkWidget *
gimp_ui_manager_ui_create (GimpUIManager *manager,
const gchar *identifier)
{
GList *list;
g_return_val_if_fail (GIMP_IS_UI_MANAGER (manager), NULL);
g_return_val_if_fail (identifier != NULL, NULL);
for (list = manager->registered_uis; list; list = g_list_next (list))
{
GimpUIManagerUIEntry *entry = list->data;
if (! strcmp (entry->identifier, identifier))
{
if (! entry->merge_id)
{
gchar *filename;
GError *error = NULL;
filename = g_build_filename (gimp_data_directory (), "menus",
entry->basename, NULL);
g_print ("loading menu: %s for %s\n", filename,
entry->identifier);
entry->merge_id =
gtk_ui_manager_add_ui_from_file (GTK_UI_MANAGER (manager),
filename, &error);
g_free (filename);
if (! entry->merge_id)
{
g_message (error->message);
g_clear_error (&error);
return NULL;
}
}
return gtk_ui_manager_get_widget (GTK_UI_MANAGER (manager),
entry->identifier);
}
}
g_warning ("%s: no entry registered for \"%s\"",
G_STRFUNC, identifier);
return NULL;
}

View File

@ -0,0 +1,75 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimpuimanager.h
* Copyright (C) 2004 Michael Natterer <mitch@gimp.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __GIMP_UI_MANAGER_H__
#define __GIMP_UI_MANAGER_H__
#include <gtk/gtkuimanager.h>
typedef struct _GimpUIManagerUIEntry GimpUIManagerUIEntry;
struct _GimpUIManagerUIEntry
{
gchar *identifier;
gchar *basename;
guint merge_id;
};
#define GIMP_TYPE_UI_MANAGER (gimp_ui_manager_get_type ())
#define GIMP_UI_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_UI_MANAGER, GimpUIManager))
#define GIMP_UI_MANAGER_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), GIMP_TYPE_UI_MANAGER, GimpUIManagerClass))
#define GIMP_IS_UI_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_UI_MANAGER))
#define GIMP_IS_UI_MANAGER_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), GIMP_TYPE_UI_MANAGER))
#define GIMP_UI_MANAGER_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), GIMP_TYPE_UI_MANAGER, GimpUIManagerClass))
typedef struct _GimpUIManagerClass GimpUIManagerClass;
struct _GimpUIManager
{
GtkUIManager parent_instance;
Gimp *gimp;
GList *registered_uis;
};
struct _GimpUIManagerClass
{
GtkUIManagerClass parent_class;
};
GType gimp_ui_manager_get_type (void);
GimpUIManager * gimp_ui_manager_new (Gimp *gimp);
void gimp_ui_manager_update (GimpUIManager *manager,
gpointer update_data);
void gimp_ui_manager_ui_register (GimpUIManager *manager,
const gchar *identifier,
const gchar *basename);
GtkWidget * gimp_ui_manager_ui_create (GimpUIManager *manager,
const gchar *identifier);
#endif /* __GIMP_UI_MANAGER_H__ */

View File

@ -37,6 +37,7 @@ typedef struct _GimpActionFactory GimpActionFactory;
typedef struct _GimpActionGroup GimpActionGroup;
typedef struct _GimpEnumAction GimpEnumAction;
typedef struct _GimpStringAction GimpStringAction;
typedef struct _GimpUIManager GimpUIManager;
typedef struct _GimpEnumStore GimpEnumStore;