removed gimp_ui_manager_ui_get() and implement the new virtual functions

2005-02-08  Michael Natterer  <mitch@gimp.org>

	* app/widgets/gimpuimanager.[ch]: removed gimp_ui_manager_ui_get()
	and implement the new virtual functions GtkUIManager::get_widget()
	and ::get_action() instead. Menu loading happens transparently now.

	* app/display/gimpdisplayshell.c
	* app/widgets/gimpdockable.c
	* app/widgets/gimptexteditor.c
	* app/widgets/gimptoolbox.c
	* app/widgets/gimptooloptionseditor.c: use
	gtk_ui_manager_get_widget() instead of the removed
	gimp_ui_manager_ui_get().
This commit is contained in:
Michael Natterer
2005-02-08 20:55:00 +00:00
committed by Michael Natterer
parent 8c83ddc063
commit cb7f1dbe56
8 changed files with 137 additions and 87 deletions

View File

@ -1,3 +1,17 @@
2005-02-08 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpuimanager.[ch]: removed gimp_ui_manager_ui_get()
and implement the new virtual functions GtkUIManager::get_widget()
and ::get_action() instead. Menu loading happens transparently now.
* app/display/gimpdisplayshell.c
* app/widgets/gimpdockable.c
* app/widgets/gimptexteditor.c
* app/widgets/gimptoolbox.c
* app/widgets/gimptooloptionseditor.c: use
gtk_ui_manager_get_widget() instead of the removed
gimp_ui_manager_ui_get().
2005-02-08 Sven Neumann <sven@gimp.org>
Applied a patch from Patrice Tremblay that makes (almost) all

View File

@ -719,8 +719,9 @@ gimp_display_shell_new (GimpDisplay *gdisp,
main_vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (shell), main_vbox);
shell->menubar = gimp_ui_manager_ui_get (shell->menubar_manager,
"/image-menubar");
shell->menubar =
gtk_ui_manager_get_widget (GTK_UI_MANAGER (shell->menubar_manager),
"/image-menubar");
if (shell->menubar)
{

View File

@ -974,10 +974,9 @@ gimp_dockable_menu_end (GimpDockable *dockable)
if (dialog_ui_manager && dialog_ui_path)
{
GtkWidget *child_menu_widget;
child_menu_widget = gimp_ui_manager_ui_get (dialog_ui_manager,
dialog_ui_path);
GtkWidget *child_menu_widget =
gtk_ui_manager_get_widget (GTK_UI_MANAGER (dialog_ui_manager),
dialog_ui_path);
if (child_menu_widget)
gtk_menu_detach (GTK_MENU (child_menu_widget));
@ -1002,8 +1001,8 @@ gimp_dockable_show_menu (GimpDockable *dockable)
return FALSE;
parent_menu_widget =
gimp_ui_manager_ui_get (dockbook_ui_manager,
"/dockable-popup/dockable-menu");
gtk_ui_manager_get_widget (GTK_UI_MANAGER (dockbook_ui_manager),
"/dockable-popup/dockable-menu");
parent_menu_action =
gtk_ui_manager_get_action (GTK_UI_MANAGER (dockbook_ui_manager),
@ -1023,7 +1022,8 @@ gimp_dockable_show_menu (GimpDockable *dockable)
const gchar *label;
child_menu_widget =
gimp_ui_manager_ui_get (dialog_ui_manager, dialog_ui_path);
gtk_ui_manager_get_widget (GTK_UI_MANAGER (dialog_ui_manager),
dialog_ui_path);
child_menu_action =
gtk_ui_manager_get_action (GTK_UI_MANAGER (dialog_ui_manager),

View File

@ -163,8 +163,8 @@ gimp_text_editor_new (const gchar *title,
"<TextEditor>",
editor, FALSE);
toolbar = gimp_ui_manager_ui_get (editor->ui_manager,
"/text-editor-toolbar");
toolbar = gtk_ui_manager_get_widget (GTK_UI_MANAGER (editor->ui_manager),
"/text-editor-toolbar");
if (toolbar)
{

View File

@ -198,7 +198,7 @@ gimp_toolbox_constructor (GType type,
GimpToolbox *toolbox;
GimpContext *context;
GimpGuiConfig *config;
GimpUIManager *manager;
GtkUIManager *manager;
GtkWidget *main_vbox;
GtkWidget *vbox;
GdkDisplay *display;
@ -220,9 +220,9 @@ gimp_toolbox_constructor (GType type,
gtk_box_reorder_child (GTK_BOX (main_vbox), vbox, 0);
gtk_widget_show (vbox);
manager = GIMP_DOCK (toolbox)->ui_manager;
manager = GTK_UI_MANAGER (GIMP_DOCK (toolbox)->ui_manager);
toolbox->menu_bar = gimp_ui_manager_ui_get (manager, "/toolbox-menubar");
toolbox->menu_bar = gtk_ui_manager_get_widget (manager, "/toolbox-menubar");
if (toolbox->menu_bar)
{

View File

@ -333,7 +333,8 @@ gimp_tool_options_editor_menu_popup (GimpToolOptionsEditor *editor,
{
GimpEditor *gimp_editor = GIMP_EDITOR (editor);
gimp_ui_manager_ui_get (gimp_editor->ui_manager, gimp_editor->ui_path);
gtk_ui_manager_get_widget (GTK_UI_MANAGER (gimp_editor->ui_manager),
gimp_editor->ui_path);
gimp_ui_manager_update (gimp_editor->ui_manager, gimp_editor->popup_data);
gimp_ui_manager_ui_popup (gimp_editor->ui_manager, path,

View File

@ -75,6 +75,10 @@ static void gimp_ui_manager_get_property (GObject *object,
static void gimp_ui_manager_connect_proxy (GtkUIManager *manager,
GtkAction *action,
GtkWidget *proxy);
static GtkWidget * gimp_ui_manager_get_widget (GtkUIManager *manager,
const gchar *path);
static GtkAction * gimp_ui_manager_get_action (GtkUIManager *manager,
const gchar *path);
static void gimp_ui_manager_real_update (GimpUIManager *manager,
gpointer update_data);
static GimpUIManagerUIEntry *
@ -83,6 +87,9 @@ static GimpUIManagerUIEntry *
static gboolean gimp_ui_manager_entry_load (GimpUIManager *manager,
GimpUIManagerUIEntry *entry,
GError **error);
static GimpUIManagerUIEntry *
gimp_ui_manager_entry_ensure (GimpUIManager *manager,
const gchar *path);
static void gimp_ui_manager_menu_position (GtkMenu *menu,
gint *x,
gint *y,
@ -150,6 +157,8 @@ gimp_ui_manager_class_init (GimpUIManagerClass *klass)
object_class->get_property = gimp_ui_manager_get_property;
manager_class->connect_proxy = gimp_ui_manager_connect_proxy;
manager_class->get_widget = gimp_ui_manager_get_widget;
manager_class->get_action = gimp_ui_manager_get_action;
klass->update = gimp_ui_manager_real_update;
@ -338,6 +347,35 @@ gimp_ui_manager_connect_proxy (GtkUIManager *manager,
manager);
}
static GtkWidget *
gimp_ui_manager_get_widget (GtkUIManager *manager,
const gchar *path)
{
GimpUIManagerUIEntry *entry;
entry = gimp_ui_manager_entry_ensure (GIMP_UI_MANAGER (manager), path);
if (entry)
{
if (! strcmp (entry->ui_path, path))
return entry->widget;
return GTK_UI_MANAGER_CLASS (parent_class)->get_widget (manager, path);
}
return NULL;
}
static GtkAction *
gimp_ui_manager_get_action (GtkUIManager *manager,
const gchar *path)
{
if (gimp_ui_manager_entry_ensure (GIMP_UI_MANAGER (manager), path))
return GTK_UI_MANAGER_CLASS (parent_class)->get_action (manager, path);
return NULL;
}
static void
gimp_ui_manager_real_update (GimpUIManager *manager,
gpointer update_data)
@ -404,8 +442,8 @@ gimp_ui_manager_update (GimpUIManager *manager,
}
GimpActionGroup *
gimp_ui_manager_get_action_group (GimpUIManager *manager,
const gchar *name)
gimp_ui_manager_get_action_group (GimpUIManager *manager,
const gchar *name)
{
GList *list;
@ -413,12 +451,12 @@ gimp_ui_manager_get_action_group (GimpUIManager *manager,
g_return_val_if_fail (name != NULL, NULL);
for (list = gtk_ui_manager_get_action_groups (GTK_UI_MANAGER (manager));
list;
list = g_list_next (list))
list;
list = g_list_next (list))
{
GimpActionGroup *group = list->data;
if (! strcmp (gtk_action_group_get_name (GTK_ACTION_GROUP (group)), name))
if (! strcmp (name, gtk_action_group_get_name (GTK_ACTION_GROUP (group))))
return group;
}
@ -468,70 +506,6 @@ gimp_ui_manager_ui_register (GimpUIManager *manager,
manager->registered_uis = g_list_prepend (manager->registered_uis, entry);
}
GtkWidget *
gimp_ui_manager_ui_get (GimpUIManager *manager,
const gchar *ui_path)
{
GimpUIManagerUIEntry *entry;
g_return_val_if_fail (GIMP_IS_UI_MANAGER (manager), NULL);
g_return_val_if_fail (ui_path != NULL, NULL);
entry = gimp_ui_manager_entry_get (manager, ui_path);
if (! entry)
{
g_warning ("%s: no entry registered for \"%s\"", G_STRFUNC, ui_path);
return NULL;
}
if (! entry->merge_id)
{
GError *error = NULL;
if (! gimp_ui_manager_entry_load (manager, entry, &error))
{
g_message ("%s\n\n%s\n\n%s",
_("Your GIMP installation is incomplete:"),
error->message,
_("Plase make sure the menu XML files are correctly "
"installed."));
g_clear_error (&error);
return NULL;
}
}
if (! entry->widget)
{
entry->widget = gtk_ui_manager_get_widget (GTK_UI_MANAGER (manager),
entry->ui_path);
if (entry->widget)
{
g_object_ref (entry->widget);
/* take ownership of popup menus */
if (GTK_IS_MENU (entry->widget))
gtk_object_sink (GTK_OBJECT (entry->widget));
if (entry->setup_func)
entry->setup_func (manager, entry->ui_path);
}
else
{
g_warning ("%s: \"%s\" does not contain registered toplevel "
"widget \"%s\"",
G_STRFUNC, entry->basename, entry->ui_path);
return NULL;
}
}
if (! strcmp (entry->ui_path, ui_path))
return entry->widget;
return gtk_ui_manager_get_widget (GTK_UI_MANAGER (manager), ui_path);
}
typedef struct
{
guint x;
@ -558,7 +532,7 @@ gimp_ui_manager_ui_popup (GimpUIManager *manager,
g_return_if_fail (ui_path != NULL);
g_return_if_fail (parent == NULL || GTK_IS_WIDGET (parent));
widget = gimp_ui_manager_ui_get (manager, ui_path);
widget = gtk_ui_manager_get_widget (GTK_UI_MANAGER (manager), ui_path);
if (GTK_IS_MENU_ITEM (widget))
widget = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
@ -676,6 +650,67 @@ gimp_ui_manager_entry_load (GimpUIManager *manager,
return TRUE;
}
static GimpUIManagerUIEntry *
gimp_ui_manager_entry_ensure (GimpUIManager *manager,
const gchar *path)
{
GimpUIManagerUIEntry *entry;
entry = gimp_ui_manager_entry_get (manager, path);
if (! entry)
{
g_warning ("%s: no entry registered for \"%s\"", G_STRFUNC, path);
return NULL;
}
if (! entry->merge_id)
{
GError *error = NULL;
if (! gimp_ui_manager_entry_load (manager, entry, &error))
{
g_message ("%s\n\n%s\n\n%s",
_("Your GIMP installation is incomplete:"),
error->message,
_("Plase make sure the menu XML files are correctly "
"installed."));
g_clear_error (&error);
return NULL;
}
}
if (! entry->widget)
{
GtkUIManager *gtk_manager = GTK_UI_MANAGER (manager);
entry->widget =
GTK_UI_MANAGER_CLASS (parent_class)->get_widget (gtk_manager,
entry->ui_path);
if (entry->widget)
{
g_object_ref (entry->widget);
/* take ownership of popup menus */
if (GTK_IS_MENU (entry->widget))
gtk_object_sink (GTK_OBJECT (entry->widget));
if (entry->setup_func)
entry->setup_func (manager, entry->ui_path);
}
else
{
g_warning ("%s: \"%s\" does not contain registered toplevel "
"widget \"%s\"",
G_STRFUNC, entry->basename, entry->ui_path);
return NULL;
}
}
return entry;
}
static void
gimp_ui_manager_menu_position (GtkMenu *menu,
gint *x,

View File

@ -77,6 +77,7 @@ void gimp_ui_manager_update (GimpUIManager *manager,
gpointer update_data);
GimpActionGroup * gimp_ui_manager_get_action_group (GimpUIManager *manager,
const gchar *name);
GtkAction * gimp_ui_manager_find_action (GimpUIManager *manager,
const gchar *group_name,
const gchar *action_name);
@ -85,8 +86,6 @@ void gimp_ui_manager_ui_register (GimpUIManager *manager,
const gchar *ui_path,
const gchar *basename,
GimpUIManagerSetupFunc setup_func);
GtkWidget * gimp_ui_manager_ui_get (GimpUIManager *manager,
const gchar *ui_path);
void gimp_ui_manager_ui_popup (GimpUIManager *manager,
const gchar *ui_path,