Some cleanup to make plug-in menu creation less hackish and finally enable

2005-01-31  Michael Natterer  <mitch@gimp.org>

	Some cleanup to make plug-in menu creation less hackish and
	finally enable registering plug-in menu entries in much more UI
	managers (not only in the image and toolbox menus):

	* app/menus/menus.c: added a <Toolbox> UI manager instead of
	creating the toolbox menu from the <Image> UI manager.

	* app/widgets/gimpimagedock.[ch]: removed the ui_manager and the
	signal connections to update it...

	* app/widgets/gimpdock.[ch]: ...and added them here so all docks
	have their own UI manager. Determine which manager to create from
	looking at GimpDockClass::ui_manager_name (defaults to <Dock>).

	* app/widgets/gimptoolbox.c: set ui_manager_name to <Toolbox> and
	use the UI manager created by our parent class instead of using
	the <Image> one.

	(toolbox_create_tools): use gimp_action_get_accel_closure()
	instead of doing evil hacks.

	* app/gui/gui-vtable.c
	* app/menus/plug-in-menus.c: removed lots of special casing of the
	<Image> UI manager. The code is almost ready for allowing plug-in
	menus under <Layers>, <Channels>, <Brushes> etc.
This commit is contained in:
Michael Natterer 2005-01-31 16:09:52 +00:00 committed by Michael Natterer
parent 843490a152
commit f3e0792dcf
11 changed files with 310 additions and 355 deletions

View File

@ -1,3 +1,31 @@
2005-01-31 Michael Natterer <mitch@gimp.org>
Some cleanup to make plug-in menu creation less hackish and
finally enable registering plug-in menu entries in much more UI
managers (not only in the image and toolbox menus):
* app/menus/menus.c: added a <Toolbox> UI manager instead of
creating the toolbox menu from the <Image> UI manager.
* app/widgets/gimpimagedock.[ch]: removed the ui_manager and the
signal connections to update it...
* app/widgets/gimpdock.[ch]: ...and added them here so all docks
have their own UI manager. Determine which manager to create from
looking at GimpDockClass::ui_manager_name (defaults to <Dock>).
* app/widgets/gimptoolbox.c: set ui_manager_name to <Toolbox> and
use the UI manager created by our parent class instead of using
the <Image> one.
(toolbox_create_tools): use gimp_action_get_accel_closure()
instead of doing evil hacks.
* app/gui/gui-vtable.c
* app/menus/plug-in-menus.c: removed lots of special casing of the
<Image> UI manager. The code is almost ready for allowing plug-in
menus under <Layers>, <Channels>, <Brushes> etc.
2005-01-30 Sven Neumann <sven@gimp.org>
* app/core/gimpimagemap.c: formatting.

View File

@ -335,7 +335,6 @@ gui_display_create (GimpImage *gimage,
gdisp = gimp_display_new (gimage, unit, scale,
global_menu_factory,
image_managers->data);
gimp_context_set_display (gimp_get_user_context (gimage->gimp), gdisp);
@ -368,6 +367,73 @@ gui_menus_init (Gimp *gimp,
plug_in_menus_init (gimp, plug_in_defs, std_plugins_domain);
}
static void
gui_menus_add_proc (Gimp *gimp,
PlugInProcDef *proc_def,
const gchar *menu_path)
{
gchar *name;
gchar *p;
GList *list;
name = g_strdup (menu_path);
p = strchr (name, '>');
if (p)
{
p[1] = '\0';
for (list = gimp_ui_managers_from_name (name);
list;
list = g_list_next (list))
{
if (! strncmp (menu_path, "<Image>", 7))
{
plug_in_menus_add_proc (list->data, "/image-menubar",
proc_def, menu_path);
plug_in_menus_add_proc (list->data, "/dummy-menubar/image-popup",
proc_def, menu_path);
}
else if (! strncmp (menu_path, "<Toolbox>", 9))
{
plug_in_menus_add_proc (list->data, "/toolbox-menubar",
proc_def, menu_path);
}
}
}
g_free (name);
}
static void
gui_menus_delete_proc (Gimp *gimp,
PlugInProcDef *proc_def,
const gchar *menu_path)
{
gchar *name;
gchar *p;
GList *list;
name = g_strdup (menu_path);
p = strchr (name, '>');
if (p)
{
p[1] = '\0';
for (list = gimp_ui_managers_from_name (name);
list;
list = g_list_next (list))
{
plug_in_menus_remove_proc (list->data, proc_def);
}
}
g_free (name);
}
static void
gui_menus_create_entry (Gimp *gimp,
PlugInProcDef *proc_def,
@ -389,45 +455,14 @@ gui_menus_create_entry (Gimp *gimp,
}
}
for (list = gimp_ui_managers_from_name ("<Image>");
list;
list = g_list_next (list))
if (menu_path == NULL)
{
if (menu_path == NULL)
{
GList *path;
for (path = proc_def->menu_paths; path; path = g_list_next (path))
{
if (! strncmp (path->data, "<Toolbox>", 9))
{
plug_in_menus_add_proc (list->data, "/toolbox-menubar",
proc_def, path->data);
}
else if (! strncmp (path->data, "<Image>", 7))
{
plug_in_menus_add_proc (list->data, "/image-menubar",
proc_def, path->data);
plug_in_menus_add_proc (list->data, "/dummy-menubar/image-popup",
proc_def, path->data);
}
}
}
else
{
if (! strncmp (menu_path, "<Toolbox>", 9))
{
plug_in_menus_add_proc (list->data, "/toolbox-menubar",
proc_def, menu_path);
}
else if (! strncmp (menu_path, "<Image>", 7))
{
plug_in_menus_add_proc (list->data, "/image-menubar",
proc_def, menu_path);
plug_in_menus_add_proc (list->data, "/dummy-menubar/image-popup",
proc_def, menu_path);
}
}
for (list = proc_def->menu_paths; list; list = g_list_next (list))
gui_menus_add_proc (gimp, proc_def, list->data);
}
else
{
gui_menus_add_proc (gimp, proc_def, menu_path);
}
}
@ -437,12 +472,8 @@ gui_menus_delete_entry (Gimp *gimp,
{
GList *list;
for (list = gimp_ui_managers_from_name ("<Image>");
list;
list = g_list_next (list))
{
plug_in_menus_remove_proc (list->data, proc_def);
}
for (list = proc_def->menu_paths; list; list = g_list_next (list))
gui_menus_delete_proc (gimp, proc_def, list->data);
for (list = gimp_action_groups_from_name ("plug-in");
list;

View File

@ -87,8 +87,6 @@ menus_init (Gimp *gimp,
gimp_menu_factory_manager_register (global_menu_factory, "<Image>",
"file",
"context",
"debug",
"help",
"edit",
"select",
"view",
@ -102,8 +100,6 @@ menus_init (Gimp *gimp,
"plug-in",
"qmask",
NULL,
"/toolbox-menubar",
"toolbox-menu.xml", toolbox_menu_setup,
"/image-menubar",
"image-menu.xml", image_menu_setup,
"/dummy-menubar",
@ -112,6 +108,27 @@ menus_init (Gimp *gimp,
"qmask-menu.xml", NULL,
NULL);
gimp_menu_factory_manager_register (global_menu_factory, "<Toolbox>",
"file",
"context",
"debug",
"help",
"edit",
"select",
"image",
"drawable",
"layers",
"channels",
"vectors",
"tools",
"dialogs",
"plug-in",
"qmask",
NULL,
"/toolbox-menubar",
"toolbox-menu.xml", toolbox_menu_setup,
NULL);
gimp_menu_factory_manager_register (global_menu_factory, "<Dock>",
"file",
"context",

View File

@ -142,11 +142,7 @@ plug_in_menus_setup (GimpUIManager *manager,
for (path = proc_def->menu_paths; path; path = g_list_next (path))
{
if ((! strncmp (path->data, "<Toolbox>", 9) &&
! strcmp (ui_path, "/toolbox-menubar")) ||
(! strncmp (path->data, "<Image>", 7) &&
(! strcmp (ui_path, "/image-menubar") ||
! strcmp (ui_path, "/dummy-menubar/image-popup"))))
if (! strncmp (path->data, manager->name, strlen (manager->name)))
{
PlugInMenuEntry *entry = g_new0 (PlugInMenuEntry, 1);
const gchar *progname;

View File

@ -30,6 +30,7 @@
#include "config/gimpguiconfig.h"
#include "core/gimp.h"
#include "core/gimpcontainer.h"
#include "core/gimpcontext.h"
#include "core/gimpmarshal.h"
@ -39,8 +40,10 @@
#include "gimpdockable.h"
#include "gimpdockbook.h"
#include "gimphelp-ids.h"
#include "gimpmenufactory.h"
#include "gimpmessagebox.h"
#include "gimpmessagedialog.h"
#include "gimpuimanager.h"
#include "gimpwidgets-utils.h"
#include "gimp-intl.h"
@ -94,6 +97,12 @@ static void gimp_dock_real_book_added (GimpDock *dock,
static void gimp_dock_real_book_removed (GimpDock *dock,
GimpDockbook *dockbook);
static void gimp_dock_display_changed (GimpContext *context,
GimpObject *display,
GimpDock *dock);
static void gimp_dock_image_flush (GimpImage *image,
GimpDock *dock);
static GtkWidget * gimp_dock_separator_new (GimpDock *dock);
static void gimp_dock_separator_drag_leave (GtkWidget *widget,
GdkDragContext *context,
@ -152,13 +161,9 @@ gimp_dock_get_type (void)
static void
gimp_dock_class_init (GimpDockClass *klass)
{
GObjectClass *object_class;
GtkObjectClass *gtk_object_class;
GtkWidgetClass *widget_class;
object_class = G_OBJECT_CLASS (klass);
gtk_object_class = GTK_OBJECT_CLASS (klass);
widget_class = GTK_WIDGET_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
@ -196,6 +201,8 @@ gimp_dock_class_init (GimpDockClass *klass)
klass->book_added = gimp_dock_real_book_added;
klass->book_removed = gimp_dock_real_book_removed;
klass->ui_manager_name = "<Dock>";
g_object_class_install_property (object_class, PROP_CONTEXT,
g_param_spec_object ("context", NULL, NULL,
GIMP_TYPE_CONTEXT,
@ -246,6 +253,50 @@ gimp_dock_init (GimpDock *dock)
gtk_widget_show (separator);
}
static GObject *
gimp_dock_constructor (GType type,
guint n_params,
GObjectConstructParam *params)
{
GObject *object;
GimpDock *dock;
GimpGuiConfig *config;
GtkAccelGroup *accel_group;
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
dock = GIMP_DOCK (object);
g_assert (GIMP_IS_CONTEXT (dock->context));
g_assert (GIMP_IS_DIALOG_FACTORY (dock->dialog_factory));
config = GIMP_GUI_CONFIG (dock->context->gimp->config);
gimp_window_set_hint (GTK_WINDOW (dock), config->dock_window_hint);
dock->ui_manager =
gimp_menu_factory_manager_new (dock->dialog_factory->menu_factory,
GIMP_DOCK_GET_CLASS (dock)->ui_manager_name,
dock,
config->tearoff_menus);
accel_group =
gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (dock->ui_manager));
gtk_window_add_accel_group (GTK_WINDOW (object), accel_group);
dock->image_flush_handler_id =
gimp_container_add_handler (dock->context->gimp->images, "flush",
G_CALLBACK (gimp_dock_image_flush),
dock);
g_signal_connect_object (dock->context, "display-changed",
G_CALLBACK (gimp_dock_display_changed),
dock, 0);
return object;
}
static void
gimp_dock_set_property (GObject *object,
guint property_id,
@ -270,9 +321,9 @@ gimp_dock_set_property (GObject *object,
static void
gimp_dock_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
guint property_id,
GValue *value,
GParamSpec *pspec)
{
GimpDock *dock = GIMP_DOCK (object);
@ -290,29 +341,6 @@ gimp_dock_get_property (GObject *object,
}
}
static GObject *
gimp_dock_constructor (GType type,
guint n_params,
GObjectConstructParam *params)
{
GObject *object;
GimpDock *dock;
GimpGuiConfig *config;
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
dock = GIMP_DOCK (object);
g_assert (GIMP_IS_CONTEXT (dock->context));
g_assert (GIMP_IS_DIALOG_FACTORY (dock->dialog_factory));
config = GIMP_GUI_CONFIG (dock->context->gimp->config);
gimp_window_set_hint (GTK_WINDOW (dock), config->dock_window_hint);
return object;
}
static void
gimp_dock_destroy (GtkObject *object)
{
@ -321,6 +349,19 @@ gimp_dock_destroy (GtkObject *object)
while (dock->dockbooks)
gimp_dock_remove_book (dock, GIMP_DOCKBOOK (dock->dockbooks->data));
if (dock->image_flush_handler_id)
{
gimp_container_remove_handler (dock->context->gimp->images,
dock->image_flush_handler_id);
dock->image_flush_handler_id = 0;
}
if (dock->ui_manager)
{
g_object_unref (dock->ui_manager);
dock->ui_manager = NULL;
}
if (dock->context)
{
g_object_unref (dock->context);
@ -448,49 +489,8 @@ gimp_dock_real_book_removed (GimpDock *dock,
gtk_widget_destroy (GTK_WIDGET (dock));
}
static GtkWidget *
gimp_dock_separator_new (GimpDock *dock)
{
GtkWidget *event_box;
GtkWidget *frame;
gint separator_height;
event_box = gtk_event_box_new ();
gtk_widget_set_name (event_box, "gimp-dock-separator");
gtk_widget_style_get (GTK_WIDGET (dock),
"separator_height", &separator_height,
NULL);
gtk_widget_set_size_request (event_box, -1, separator_height);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
gtk_container_add (GTK_CONTAINER (event_box), frame);
gtk_widget_show (frame);
gimp_help_set_help_data (event_box,
_("You can drop dockable dialogs here."),
GIMP_HELP_DOCK_SEPARATOR);
gtk_drag_dest_set (GTK_WIDGET (event_box),
GTK_DEST_DEFAULT_ALL,
dialog_target_table, G_N_ELEMENTS (dialog_target_table),
GDK_ACTION_MOVE);
g_signal_connect (event_box, "drag_leave",
G_CALLBACK (gimp_dock_separator_drag_leave),
NULL);
g_signal_connect (event_box, "drag_motion",
G_CALLBACK (gimp_dock_separator_drag_motion),
NULL);
g_signal_connect (event_box, "drag_drop",
G_CALLBACK (gimp_dock_separator_drag_drop),
dock);
return event_box;
}
/* public functions */
void
gimp_dock_setup (GimpDock *dock,
@ -710,6 +710,74 @@ gimp_dock_remove_book (GimpDock *dock,
g_object_unref (dockbook);
}
/* private functions */
static void
gimp_dock_display_changed (GimpContext *context,
GimpObject *display,
GimpDock *dock)
{
gimp_ui_manager_update (dock->ui_manager, display);
}
static void
gimp_dock_image_flush (GimpImage *image,
GimpDock *dock)
{
if (image == gimp_context_get_image (dock->context))
{
GimpObject *display = gimp_context_get_display (dock->context);
if (display)
gimp_ui_manager_update (dock->ui_manager, display);
}
}
static GtkWidget *
gimp_dock_separator_new (GimpDock *dock)
{
GtkWidget *event_box;
GtkWidget *frame;
gint separator_height;
event_box = gtk_event_box_new ();
gtk_widget_set_name (event_box, "gimp-dock-separator");
gtk_widget_style_get (GTK_WIDGET (dock),
"separator_height", &separator_height,
NULL);
gtk_widget_set_size_request (event_box, -1, separator_height);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
gtk_container_add (GTK_CONTAINER (event_box), frame);
gtk_widget_show (frame);
gimp_help_set_help_data (event_box,
_("You can drop dockable dialogs here."),
GIMP_HELP_DOCK_SEPARATOR);
gtk_drag_dest_set (GTK_WIDGET (event_box),
GTK_DEST_DEFAULT_ALL,
dialog_target_table, G_N_ELEMENTS (dialog_target_table),
GDK_ACTION_MOVE);
g_signal_connect (event_box, "drag_leave",
G_CALLBACK (gimp_dock_separator_drag_leave),
NULL);
g_signal_connect (event_box, "drag_motion",
G_CALLBACK (gimp_dock_separator_drag_motion),
NULL);
g_signal_connect (event_box, "drag_drop",
G_CALLBACK (gimp_dock_separator_drag_drop),
dock);
return event_box;
}
static void
gimp_dock_separator_drag_leave (GtkWidget *widget,
GdkDragContext *context,

View File

@ -43,6 +43,9 @@ struct _GimpDock
GimpDialogFactory *dialog_factory;
GimpContext *context;
GimpUIManager *ui_manager;
GQuark image_flush_handler_id;
GtkWidget *main_vbox;
GtkWidget *vbox;
@ -65,6 +68,8 @@ struct _GimpDockClass
GimpDockbook *dockbook);
void (* book_removed) (GimpDock *dock,
GimpDockbook *dockbook);
const gchar *ui_manager_name;
};

View File

@ -43,9 +43,7 @@
#include "gimpdockable.h"
#include "gimpdockbook.h"
#include "gimphelp-ids.h"
#include "gimpmenufactory.h"
#include "gimpsessioninfo.h"
#include "gimpuimanager.h"
#include "gimp-intl.h"
@ -86,16 +84,11 @@ static void gimp_image_dock_factory_display_changed (GimpContext *context,
static void gimp_image_dock_factory_image_changed (GimpContext *context,
GimpImage *gimage,
GimpDock *dock);
static void gimp_image_dock_display_changed (GimpContext *context,
GimpObject *display,
GimpDock *dock);
static void gimp_image_dock_image_changed (GimpContext *context,
GimpImage *gimage,
GimpDock *dock);
static void gimp_image_dock_auto_clicked (GtkWidget *widget,
GimpDock *dock);
static void gimp_image_dock_image_flush (GimpImage *gimage,
GimpDock *dock);
static GimpDockClass *parent_class = NULL;
@ -132,15 +125,10 @@ gimp_image_dock_get_type (void)
static void
gimp_image_dock_class_init (GimpImageDockClass *klass)
{
GObjectClass *object_class;
GtkObjectClass *gtk_object_class;
GtkWidgetClass *widget_class;
GimpDockClass *dock_class;
object_class = G_OBJECT_CLASS (klass);
gtk_object_class = GTK_OBJECT_CLASS (klass);
widget_class = GTK_WIDGET_CLASS (klass);
dock_class = GIMP_DOCK_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GimpDockClass *dock_class = GIMP_DOCK_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
@ -202,13 +190,13 @@ gimp_image_dock_init (GimpImageDock *dock)
dock->auto_button = gtk_toggle_button_new_with_label (_("Auto"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dock->auto_button),
dock->auto_follow_active);
dock->auto_follow_active);
gtk_box_pack_start (GTK_BOX (hbox), dock->auto_button, FALSE, FALSE, 0);
gtk_widget_show (dock->auto_button);
g_signal_connect (dock->auto_button, "clicked",
G_CALLBACK (gimp_image_dock_auto_clicked),
dock);
G_CALLBACK (gimp_image_dock_auto_clicked),
dock);
gimp_help_set_help_data (dock->auto_button,
_("When enabled the dialog automatically "
@ -221,27 +209,13 @@ gimp_image_dock_constructor (GType type,
guint n_params,
GObjectConstructParam *params)
{
GObject *object;
GimpImageDock *dock;
GimpMenuFactory *menu_factory;
GtkUIManager *ui_manager;
GtkAccelGroup *accel_group;
GObject *object;
GimpImageDock *dock;
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
dock = GIMP_IMAGE_DOCK (object);
menu_factory = GIMP_DOCK (object)->dialog_factory->menu_factory;
dock->ui_manager = gimp_menu_factory_manager_new (menu_factory, "<Dock>",
dock, FALSE);
ui_manager = GTK_UI_MANAGER (dock->ui_manager);
accel_group = gtk_ui_manager_get_accel_group (ui_manager);
gtk_window_add_accel_group (GTK_WINDOW (object), accel_group);
return object;
}
@ -256,19 +230,6 @@ gimp_image_dock_destroy (GtkObject *object)
dock->update_title_idle_id = 0;
}
if (dock->image_flush_handler_id)
{
gimp_container_remove_handler (dock->image_container,
dock->image_flush_handler_id);
dock->image_flush_handler_id = 0;
}
if (dock->ui_manager)
{
g_object_unref (dock->ui_manager);
dock->ui_manager = NULL;
}
/* remove the image menu and the auto button manually here because
* of weird cross-connections with GimpDock's context
*/
@ -277,7 +238,7 @@ gimp_image_dock_destroy (GtkObject *object)
dock->image_combo->parent)
{
gtk_container_remove (GTK_CONTAINER (GIMP_DOCK (dock)->main_vbox),
dock->image_combo->parent);
dock->image_combo->parent);
}
GTK_OBJECT_CLASS (parent_class)->destroy (object);
@ -305,7 +266,7 @@ gimp_image_dock_style_set (GtkWidget *widget,
gtk_widget_style_get (widget,
"minimal_width", &minimal_width,
"menu_preview_size", &menu_preview_size,
NULL);
NULL);
screen = gtk_widget_get_screen (image_dock->image_combo);
gtk_icon_size_lookup_for_settings (gtk_settings_get_for_screen (screen),
@ -316,7 +277,7 @@ gimp_image_dock_style_set (GtkWidget *widget,
gtk_widget_style_get (image_dock->auto_button,
"focus_line_width", &focus_line_width,
"focus_padding", &focus_padding,
NULL);
NULL);
ythickness = image_dock->auto_button->style->ythickness;
@ -439,7 +400,7 @@ gimp_image_dock_book_removed (GimpDock *dock,
GtkWidget *
gimp_image_dock_new (GimpDialogFactory *dialog_factory,
GimpContainer *image_container,
GimpContainer *image_container,
GimpContainer *display_container)
{
GimpImageDock *image_dock;
@ -463,11 +424,6 @@ gimp_image_dock_new (GimpDialogFactory *dialog_factory,
image_dock->image_container = image_container;
image_dock->display_container = display_container;
image_dock->image_flush_handler_id =
gimp_container_add_handler (image_container, "flush",
G_CALLBACK (gimp_image_dock_image_flush),
image_dock);
gimp_help_connect (GTK_WIDGET (image_dock), gimp_standard_help_func,
GIMP_HELP_DOCK, NULL);
@ -497,10 +453,6 @@ gimp_image_dock_new (GimpDialogFactory *dialog_factory,
image_dock,
0);
g_signal_connect_object (context, "display_changed",
G_CALLBACK (gimp_image_dock_display_changed),
image_dock,
0);
g_signal_connect_object (context, "image_changed",
G_CALLBACK (gimp_image_dock_image_changed),
image_dock,
@ -629,16 +581,6 @@ gimp_image_dock_factory_image_changed (GimpContext *context,
gimp_context_set_image (dock->context, gimage);
}
static void
gimp_image_dock_display_changed (GimpContext *context,
GimpObject *display,
GimpDock *dock)
{
GimpImageDock *image_dock = GIMP_IMAGE_DOCK (dock);
gimp_ui_manager_update (image_dock->ui_manager, display);
}
static void
gimp_image_dock_image_changed (GimpContext *context,
GimpImage *gimage,
@ -742,21 +684,3 @@ gimp_image_dock_auto_clicked (GtkWidget *widget,
GIMP_CONTEXT_PROP_IMAGE);
}
}
static void
gimp_image_dock_image_flush (GimpImage *gimage,
GimpDock *dock)
{
GimpImageDock *image_dock = GIMP_IMAGE_DOCK (dock);
GimpImage *dock_image;
dock_image = gimp_context_get_image (dock->context);
if (dock_image == gimage)
{
GimpObject *display = gimp_context_get_display (dock->context);
if (display)
gimp_ui_manager_update (image_dock->ui_manager, display);
}
}

View File

@ -46,9 +46,6 @@ struct _GimpImageDock
gboolean show_image_menu;
gboolean auto_follow_active;
GimpUIManager *ui_manager;
GQuark image_flush_handler_id;
GtkWidget *image_combo;
GtkWidget *auto_button;

View File

@ -43,9 +43,7 @@
#include "gimpdockable.h"
#include "gimpdockbook.h"
#include "gimphelp-ids.h"
#include "gimpmenufactory.h"
#include "gimpsessioninfo.h"
#include "gimpuimanager.h"
#include "gimp-intl.h"
@ -86,16 +84,11 @@ static void gimp_image_dock_factory_display_changed (GimpContext *context,
static void gimp_image_dock_factory_image_changed (GimpContext *context,
GimpImage *gimage,
GimpDock *dock);
static void gimp_image_dock_display_changed (GimpContext *context,
GimpObject *display,
GimpDock *dock);
static void gimp_image_dock_image_changed (GimpContext *context,
GimpImage *gimage,
GimpDock *dock);
static void gimp_image_dock_auto_clicked (GtkWidget *widget,
GimpDock *dock);
static void gimp_image_dock_image_flush (GimpImage *gimage,
GimpDock *dock);
static GimpDockClass *parent_class = NULL;
@ -132,15 +125,10 @@ gimp_image_dock_get_type (void)
static void
gimp_image_dock_class_init (GimpImageDockClass *klass)
{
GObjectClass *object_class;
GtkObjectClass *gtk_object_class;
GtkWidgetClass *widget_class;
GimpDockClass *dock_class;
object_class = G_OBJECT_CLASS (klass);
gtk_object_class = GTK_OBJECT_CLASS (klass);
widget_class = GTK_WIDGET_CLASS (klass);
dock_class = GIMP_DOCK_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GimpDockClass *dock_class = GIMP_DOCK_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
@ -202,13 +190,13 @@ gimp_image_dock_init (GimpImageDock *dock)
dock->auto_button = gtk_toggle_button_new_with_label (_("Auto"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dock->auto_button),
dock->auto_follow_active);
dock->auto_follow_active);
gtk_box_pack_start (GTK_BOX (hbox), dock->auto_button, FALSE, FALSE, 0);
gtk_widget_show (dock->auto_button);
g_signal_connect (dock->auto_button, "clicked",
G_CALLBACK (gimp_image_dock_auto_clicked),
dock);
G_CALLBACK (gimp_image_dock_auto_clicked),
dock);
gimp_help_set_help_data (dock->auto_button,
_("When enabled the dialog automatically "
@ -221,27 +209,13 @@ gimp_image_dock_constructor (GType type,
guint n_params,
GObjectConstructParam *params)
{
GObject *object;
GimpImageDock *dock;
GimpMenuFactory *menu_factory;
GtkUIManager *ui_manager;
GtkAccelGroup *accel_group;
GObject *object;
GimpImageDock *dock;
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
dock = GIMP_IMAGE_DOCK (object);
menu_factory = GIMP_DOCK (object)->dialog_factory->menu_factory;
dock->ui_manager = gimp_menu_factory_manager_new (menu_factory, "<Dock>",
dock, FALSE);
ui_manager = GTK_UI_MANAGER (dock->ui_manager);
accel_group = gtk_ui_manager_get_accel_group (ui_manager);
gtk_window_add_accel_group (GTK_WINDOW (object), accel_group);
return object;
}
@ -256,19 +230,6 @@ gimp_image_dock_destroy (GtkObject *object)
dock->update_title_idle_id = 0;
}
if (dock->image_flush_handler_id)
{
gimp_container_remove_handler (dock->image_container,
dock->image_flush_handler_id);
dock->image_flush_handler_id = 0;
}
if (dock->ui_manager)
{
g_object_unref (dock->ui_manager);
dock->ui_manager = NULL;
}
/* remove the image menu and the auto button manually here because
* of weird cross-connections with GimpDock's context
*/
@ -277,7 +238,7 @@ gimp_image_dock_destroy (GtkObject *object)
dock->image_combo->parent)
{
gtk_container_remove (GTK_CONTAINER (GIMP_DOCK (dock)->main_vbox),
dock->image_combo->parent);
dock->image_combo->parent);
}
GTK_OBJECT_CLASS (parent_class)->destroy (object);
@ -305,7 +266,7 @@ gimp_image_dock_style_set (GtkWidget *widget,
gtk_widget_style_get (widget,
"minimal_width", &minimal_width,
"menu_preview_size", &menu_preview_size,
NULL);
NULL);
screen = gtk_widget_get_screen (image_dock->image_combo);
gtk_icon_size_lookup_for_settings (gtk_settings_get_for_screen (screen),
@ -316,7 +277,7 @@ gimp_image_dock_style_set (GtkWidget *widget,
gtk_widget_style_get (image_dock->auto_button,
"focus_line_width", &focus_line_width,
"focus_padding", &focus_padding,
NULL);
NULL);
ythickness = image_dock->auto_button->style->ythickness;
@ -439,7 +400,7 @@ gimp_image_dock_book_removed (GimpDock *dock,
GtkWidget *
gimp_image_dock_new (GimpDialogFactory *dialog_factory,
GimpContainer *image_container,
GimpContainer *image_container,
GimpContainer *display_container)
{
GimpImageDock *image_dock;
@ -463,11 +424,6 @@ gimp_image_dock_new (GimpDialogFactory *dialog_factory,
image_dock->image_container = image_container;
image_dock->display_container = display_container;
image_dock->image_flush_handler_id =
gimp_container_add_handler (image_container, "flush",
G_CALLBACK (gimp_image_dock_image_flush),
image_dock);
gimp_help_connect (GTK_WIDGET (image_dock), gimp_standard_help_func,
GIMP_HELP_DOCK, NULL);
@ -497,10 +453,6 @@ gimp_image_dock_new (GimpDialogFactory *dialog_factory,
image_dock,
0);
g_signal_connect_object (context, "display_changed",
G_CALLBACK (gimp_image_dock_display_changed),
image_dock,
0);
g_signal_connect_object (context, "image_changed",
G_CALLBACK (gimp_image_dock_image_changed),
image_dock,
@ -629,16 +581,6 @@ gimp_image_dock_factory_image_changed (GimpContext *context,
gimp_context_set_image (dock->context, gimage);
}
static void
gimp_image_dock_display_changed (GimpContext *context,
GimpObject *display,
GimpDock *dock)
{
GimpImageDock *image_dock = GIMP_IMAGE_DOCK (dock);
gimp_ui_manager_update (image_dock->ui_manager, display);
}
static void
gimp_image_dock_image_changed (GimpContext *context,
GimpImage *gimage,
@ -742,21 +684,3 @@ gimp_image_dock_auto_clicked (GtkWidget *widget,
GIMP_CONTEXT_PROP_IMAGE);
}
}
static void
gimp_image_dock_image_flush (GimpImage *gimage,
GimpDock *dock)
{
GimpImageDock *image_dock = GIMP_IMAGE_DOCK (dock);
GimpImage *dock_image;
dock_image = gimp_context_get_image (dock->context);
if (dock_image == gimage)
{
GimpObject *display = gimp_context_get_display (dock->context);
if (display)
gimp_ui_manager_update (image_dock->ui_manager, display);
}
}

View File

@ -46,9 +46,6 @@ struct _GimpImageDock
gboolean show_image_menu;
gboolean auto_follow_active;
GimpUIManager *ui_manager;
GQuark image_flush_handler_id;
GtkWidget *image_combo;
GtkWidget *auto_button;

View File

@ -163,6 +163,8 @@ gimp_toolbox_class_init (GimpToolboxClass *klass)
dock_class->book_added = gimp_toolbox_book_added;
dock_class->book_removed = gimp_toolbox_book_removed;
dock_class->ui_manager_name = "<Toolbox>";
gtk_widget_class_install_style_property
(widget_class, g_param_spec_enum ("tool_icon_size",
NULL, NULL,
@ -218,7 +220,7 @@ gimp_toolbox_constructor (GType type,
gtk_box_reorder_child (GTK_BOX (main_vbox), vbox, 0);
gtk_widget_show (vbox);
manager = gimp_ui_managers_from_name ("<Image>")->data;
manager = GIMP_DOCK (toolbox)->ui_manager;
toolbox->menu_bar = gimp_ui_manager_ui_get (manager, "/toolbox-menubar");
@ -228,9 +230,6 @@ gimp_toolbox_constructor (GType type,
gtk_widget_show (toolbox->menu_bar);
}
gtk_window_add_accel_group (GTK_WINDOW (toolbox),
gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (manager)));
toolbox->tool_wbox = gtk_hwrap_box_new (FALSE);
gtk_wrap_box_set_justify (GTK_WRAP_BOX (toolbox->tool_wbox), GTK_JUSTIFY_TOP);
gtk_wrap_box_set_line_justify (GTK_WRAP_BOX (toolbox->tool_wbox),
@ -693,15 +692,9 @@ static void
toolbox_create_tools (GimpToolbox *toolbox,
GimpContext *context)
{
GimpUIManager *ui_manager;
GimpToolInfo *active_tool;
GList *list;
GSList *group = NULL;
ui_manager = gimp_ui_managers_from_name ("<Image>")->data;
if (ui_manager)
gimp_ui_manager_ui_get (ui_manager, "/dummy-menubar");
GimpToolInfo *active_tool;
GList *list;
GSList *group = NULL;
active_tool = gimp_context_get_tool (context);
@ -749,7 +742,7 @@ toolbox_create_tools (GimpToolbox *toolbox,
G_CALLBACK (toolbox_tool_button_press),
toolbox);
if (ui_manager)
if (GIMP_DOCK (toolbox)->ui_manager)
{
GtkAction *action;
const gchar *identifier;
@ -764,37 +757,12 @@ toolbox_create_tools (GimpToolbox *toolbox,
name = g_strdup_printf ("tools-%s", tmp);
g_free (tmp);
action = gimp_ui_manager_find_action (ui_manager, "tools", name);
action = gimp_ui_manager_find_action (GIMP_DOCK (toolbox)->ui_manager,
"tools", name);
g_free (name);
#if HAVE_GTK_ACTION_GET_ACCEL_CLOSURE
accel_closure = gtk_action_get_accel_closure (action);
#else
{
GSList *list;
for (list = gtk_action_get_proxies (action);
list;
list = g_slist_next (list))
{
if (GTK_IS_MENU_ITEM (list->data))
{
GtkWidget *label = GTK_BIN (list->data)->child;
if (GTK_IS_ACCEL_LABEL (label))
{
g_object_get (label,
"accel-closure", &accel_closure,
NULL);
if (accel_closure)
break;
}
}
}
}
#endif
accel_closure = gimp_action_get_accel_closure (action);
if (accel_closure)
{