59
static void gimp_ui_manager_init (GimpUIManager *manager);
60
static void gimp_ui_manager_class_init (GimpUIManagerClass *klass);
62
static GObject * gimp_ui_manager_constructor (GType type,
64
GObjectConstructParam *params);
65
static void gimp_ui_manager_dispose (GObject *object);
66
static void gimp_ui_manager_finalize (GObject *object);
67
static void gimp_ui_manager_set_property (GObject *object,
71
static void gimp_ui_manager_get_property (GObject *object,
75
static void gimp_ui_manager_connect_proxy (GtkUIManager *manager,
78
static void gimp_ui_manager_real_update (GimpUIManager *manager,
79
gpointer update_data);
80
static GimpUIManagerUIEntry *
81
gimp_ui_manager_entry_get (GimpUIManager *manager,
82
const gchar *ui_path);
83
static gboolean gimp_ui_manager_entry_load (GimpUIManager *manager,
84
GimpUIManagerUIEntry *entry,
86
static void gimp_ui_manager_menu_position (GtkMenu *menu,
90
static void gimp_ui_manager_menu_pos (GtkMenu *menu,
61
static GObject * gimp_ui_manager_constructor (GType type,
63
GObjectConstructParam *params);
64
static void gimp_ui_manager_dispose (GObject *object);
65
static void gimp_ui_manager_finalize (GObject *object);
66
static void gimp_ui_manager_set_property (GObject *object,
70
static void gimp_ui_manager_get_property (GObject *object,
74
static void gimp_ui_manager_connect_proxy (GtkUIManager *manager,
77
static GtkWidget * gimp_ui_manager_get_widget (GtkUIManager *manager,
79
static GtkAction * gimp_ui_manager_get_action (GtkUIManager *manager,
81
static void gimp_ui_manager_real_update (GimpUIManager *manager,
82
gpointer update_data);
83
static GimpUIManagerUIEntry *
84
gimp_ui_manager_entry_get (GimpUIManager *manager,
85
const gchar *ui_path);
86
static gboolean gimp_ui_manager_entry_load (GimpUIManager *manager,
87
GimpUIManagerUIEntry *entry,
89
static GimpUIManagerUIEntry *
90
gimp_ui_manager_entry_ensure (GimpUIManager *manager,
92
static void gimp_ui_manager_menu_position (GtkMenu *menu,
96
static void gimp_ui_manager_menu_pos (GtkMenu *menu,
96
gimp_ui_manager_delete_popdown_data (GtkObject *object,
97
GimpUIManager *manager);
98
static void gimp_ui_manager_item_realize (GtkWidget *widget,
99
GimpUIManager *manager);
100
static gboolean gimp_ui_manager_item_key_press (GtkWidget *widget,
102
GimpUIManager *manager);
102
gimp_ui_manager_delete_popdown_data (GtkObject *object,
103
GimpUIManager *manager);
104
static void gimp_ui_manager_item_realize (GtkWidget *widget,
105
GimpUIManager *manager);
106
static void gimp_ui_manager_menu_item_select (GtkWidget *widget,
107
GimpUIManager *manager);
108
static void gimp_ui_manager_menu_item_deselect (GtkWidget *widget,
109
GimpUIManager *manager);
110
static gboolean gimp_ui_manager_item_key_press (GtkWidget *widget,
112
GimpUIManager *manager);
115
G_DEFINE_TYPE (GimpUIManager, gimp_ui_manager, GTK_TYPE_UI_MANAGER)
117
#define parent_class gimp_ui_manager_parent_class
105
119
static guint manager_signals[LAST_SIGNAL] = { 0 };
107
static GtkUIManagerClass *parent_class = NULL;
111
gimp_ui_manager_get_type (void)
113
static GType type = 0;
117
static const GTypeInfo type_info =
119
sizeof (GimpUIManagerClass),
120
NULL, /* base_init */
121
NULL, /* base_finalize */
122
(GClassInitFunc) gimp_ui_manager_class_init,
123
NULL, /* class_finalize */
124
NULL, /* class_data */
125
sizeof (GimpUIManager),
127
(GInstanceInitFunc) gimp_ui_manager_init,
130
type = g_type_register_static (GTK_TYPE_UI_MANAGER,
139
123
gimp_ui_manager_class_init (GimpUIManagerClass *klass)
150
132
object_class->get_property = gimp_ui_manager_get_property;
152
134
manager_class->connect_proxy = gimp_ui_manager_connect_proxy;
135
manager_class->get_widget = gimp_ui_manager_get_widget;
136
manager_class->get_action = gimp_ui_manager_get_action;
154
138
klass->update = gimp_ui_manager_real_update;
156
140
manager_signals[UPDATE] =
157
141
g_signal_new ("update",
158
G_TYPE_FROM_CLASS (klass),
160
G_STRUCT_OFFSET (GimpUIManagerClass, update),
162
gimp_marshal_VOID__POINTER,
142
G_TYPE_FROM_CLASS (klass),
144
G_STRUCT_OFFSET (GimpUIManagerClass, update),
146
gimp_marshal_VOID__POINTER,
150
manager_signals[SHOW_TOOLTIP] =
151
g_signal_new ("show-tooltip",
152
G_TYPE_FROM_CLASS (klass),
154
G_STRUCT_OFFSET (GimpUIManagerClass, show_tooltip),
156
gimp_marshal_VOID__STRING,
160
manager_signals[HIDE_TOOLTIP] =
161
g_signal_new ("hide-tooltip",
162
G_TYPE_FROM_CLASS (klass),
164
G_STRUCT_OFFSET (GimpUIManagerClass, hide_tooltip),
166
gimp_marshal_VOID__VOID,
166
170
g_object_class_install_property (object_class, PROP_NAME,
167
171
g_param_spec_string ("name",
174
GIMP_PARAM_READWRITE |
171
175
G_PARAM_CONSTRUCT_ONLY));
173
177
g_object_class_install_property (object_class, PROP_GIMP,
174
178
g_param_spec_object ("gimp",
181
GIMP_PARAM_READWRITE |
178
182
G_PARAM_CONSTRUCT_ONLY));
180
184
klass->managers = g_hash_table_new_full (g_str_hash, g_str_equal,
335
339
if (GTK_IS_MENU_ITEM (proxy))
336
g_signal_connect_after (proxy, "realize",
337
G_CALLBACK (gimp_ui_manager_item_realize),
341
g_signal_connect (proxy, "select",
342
G_CALLBACK (gimp_ui_manager_menu_item_select),
344
g_signal_connect (proxy, "deselect",
345
G_CALLBACK (gimp_ui_manager_menu_item_deselect),
348
g_signal_connect_after (proxy, "realize",
349
G_CALLBACK (gimp_ui_manager_item_realize),
355
gimp_ui_manager_get_widget (GtkUIManager *manager,
358
GimpUIManagerUIEntry *entry;
360
entry = gimp_ui_manager_entry_ensure (GIMP_UI_MANAGER (manager), path);
364
if (! strcmp (entry->ui_path, path))
365
return entry->widget;
367
return GTK_UI_MANAGER_CLASS (parent_class)->get_widget (manager, path);
374
gimp_ui_manager_get_action (GtkUIManager *manager,
377
if (gimp_ui_manager_entry_ensure (GIMP_UI_MANAGER (manager), path))
378
return GTK_UI_MANAGER_CLASS (parent_class)->get_action (manager, path);
431
473
const gchar *action_name)
433
475
GimpActionGroup *group;
476
GtkAction *action = NULL;
435
478
g_return_val_if_fail (GIMP_IS_UI_MANAGER (manager), NULL);
436
g_return_val_if_fail (group_name != NULL, NULL);
437
479
g_return_val_if_fail (action_name != NULL, NULL);
439
group = gimp_ui_manager_get_action_group (manager, group_name);
442
return gtk_action_group_get_action (GTK_ACTION_GROUP (group), action_name);
483
group = gimp_ui_manager_get_action_group (manager, group_name);
486
action = gtk_action_group_get_action (GTK_ACTION_GROUP (group),
493
for (list = gtk_ui_manager_get_action_groups (GTK_UI_MANAGER (manager));
495
list = g_list_next (list))
499
action = gtk_action_group_get_action (GTK_ACTION_GROUP (group),
511
gimp_ui_manager_activate_action (GimpUIManager *manager,
512
const gchar *group_name,
513
const gchar *action_name)
517
g_return_val_if_fail (GIMP_IS_UI_MANAGER (manager), FALSE);
518
g_return_val_if_fail (action_name != NULL, FALSE);
520
action = gimp_ui_manager_find_action (manager, group_name, action_name);
523
gtk_action_activate (action);
525
return (action != NULL);
448
530
gimp_ui_manager_ui_register (GimpUIManager *manager,
468
550
manager->registered_uis = g_list_prepend (manager->registered_uis, entry);
472
gimp_ui_manager_ui_get (GimpUIManager *manager,
473
const gchar *ui_path)
475
GimpUIManagerUIEntry *entry;
477
g_return_val_if_fail (GIMP_IS_UI_MANAGER (manager), NULL);
478
g_return_val_if_fail (ui_path != NULL, NULL);
480
entry = gimp_ui_manager_entry_get (manager, ui_path);
484
g_warning ("%s: no entry registered for \"%s\"", G_STRFUNC, ui_path);
488
if (! entry->merge_id)
490
GError *error = NULL;
492
if (! gimp_ui_manager_entry_load (manager, entry, &error))
494
g_message ("%s\n\n%s\n\n%s",
495
_("Your GIMP installation is incomplete:"),
497
_("Plase make sure the menu XML files are correctly "
499
g_clear_error (&error);
506
entry->widget = gtk_ui_manager_get_widget (GTK_UI_MANAGER (manager),
511
g_object_ref (entry->widget);
513
/* take ownership of popup menus */
514
if (GTK_IS_MENU (entry->widget))
515
gtk_object_sink (GTK_OBJECT (entry->widget));
517
if (entry->setup_func)
518
entry->setup_func (manager, entry->ui_path);
522
g_warning ("%s: \"%s\" does not contain registered toplevel "
524
G_STRFUNC, entry->basename, entry->ui_path);
529
if (! strcmp (entry->ui_path, ui_path))
530
return entry->widget;
532
return gtk_ui_manager_get_widget (GTK_UI_MANAGER (manager), ui_path);
700
static GimpUIManagerUIEntry *
701
gimp_ui_manager_entry_ensure (GimpUIManager *manager,
704
GimpUIManagerUIEntry *entry;
706
entry = gimp_ui_manager_entry_get (manager, path);
710
g_warning ("%s: no entry registered for \"%s\"", G_STRFUNC, path);
714
if (! entry->merge_id)
716
GError *error = NULL;
718
if (! gimp_ui_manager_entry_load (manager, entry, &error))
720
if (error->domain == G_FILE_ERROR &&
721
error->code == G_FILE_ERROR_EXIST)
723
gimp_message (manager->gimp, NULL, GIMP_MESSAGE_ERROR,
725
_("Your GIMP installation is incomplete:"),
727
_("Plase make sure the menu XML files are correctly "
732
gimp_message (manager->gimp, NULL, GIMP_MESSAGE_ERROR,
733
_("There was an error parsing the menu definition "
735
gimp_filename_to_utf8 (entry->basename),
739
g_clear_error (&error);
746
GtkUIManager *gtk_manager = GTK_UI_MANAGER (manager);
749
GTK_UI_MANAGER_CLASS (parent_class)->get_widget (gtk_manager,
754
g_object_ref (entry->widget);
756
/* take ownership of popup menus */
757
if (GTK_IS_MENU (entry->widget))
759
g_object_ref_sink (entry->widget);
760
g_object_unref (entry->widget);
763
if (entry->setup_func)
764
entry->setup_func (manager, entry->ui_path);
768
g_warning ("%s: \"%s\" does not contain registered toplevel "
770
G_STRFUNC, entry->basename, entry->ui_path);
680
779
gimp_ui_manager_menu_position (GtkMenu *menu,
893
gimp_ui_manager_menu_item_select (GtkWidget *widget,
894
GimpUIManager *manager)
896
GtkAction *action = g_object_get_data (G_OBJECT (widget), "gtk-action");
902
g_object_get (action, "tooltip", &tooltip, NULL);
906
g_signal_emit (manager, manager_signals[SHOW_TOOLTIP], 0,
914
gimp_ui_manager_menu_item_deselect (GtkWidget *widget,
915
GimpUIManager *manager)
917
g_signal_emit (manager, manager_signals[HIDE_TOOLTIP], 0);
794
921
gimp_ui_manager_item_key_press (GtkWidget *widget,
795
922
GdkEventKey *kevent,