2 * GTK - The GIMP Toolkit
3 * Copyright (C) 1998, 1999 Red Hat, Inc.
6 * This Library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
11 * This Library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public
17 * License along with the Gnome Library; see the file COPYING.LIB. If not,
18 * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
23 * Author: James Henstridge <james@daa.com.au>
25 * Modified by the GTK+ Team and others 2003. See the AUTHORS
26 * file for a list of people on the GTK+ Team. See the ChangeLog
27 * files for a list of changes. These files are distributed with
28 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
33 #include "gtkactiongroup.h"
35 #include "gtktoggleaction.h"
36 #include "gtkradioaction.h"
37 #include "gtkaccelmap.h"
38 #include "gtkmarshalers.h"
41 #define GTK_ACTION_GROUP_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_ACTION_GROUP, GtkActionGroupPrivate))
43 struct _GtkActionGroupPrivate
50 GtkTranslateFunc translate_func;
51 gpointer translate_data;
52 GtkDestroyNotify translate_notify;
72 static void gtk_action_group_init (GtkActionGroup *self);
73 static void gtk_action_group_class_init (GtkActionGroupClass *class);
74 static void gtk_action_group_finalize (GObject *object);
75 static void gtk_action_group_set_property (GObject *object,
79 static void gtk_action_group_get_property (GObject *object,
83 static GtkAction *gtk_action_group_real_get_action (GtkActionGroup *self,
88 gtk_action_group_get_type (void)
90 static GType type = 0;
94 static const GTypeInfo type_info =
96 sizeof (GtkActionGroupClass),
98 NULL, /* base_finalize */
99 (GClassInitFunc) gtk_action_group_class_init,
100 NULL, /* class_finalize */
101 NULL, /* class_data */
102 sizeof (GtkActionGroup),
104 (GInstanceInitFunc) gtk_action_group_init,
107 type = g_type_register_static (G_TYPE_OBJECT, "GtkActionGroup",
114 static GObjectClass *parent_class = NULL;
115 static guint action_group_signals[LAST_SIGNAL] = { 0 };
118 gtk_action_group_class_init (GtkActionGroupClass *klass)
120 GObjectClass *gobject_class;
122 gobject_class = G_OBJECT_CLASS (klass);
123 parent_class = g_type_class_peek_parent (klass);
125 gobject_class->finalize = gtk_action_group_finalize;
126 gobject_class->set_property = gtk_action_group_set_property;
127 gobject_class->get_property = gtk_action_group_get_property;
128 klass->get_action = gtk_action_group_real_get_action;
130 g_object_class_install_property (gobject_class,
132 g_param_spec_string ("name",
134 P_("A name for the action group."),
137 G_PARAM_CONSTRUCT_ONLY));
138 g_object_class_install_property (gobject_class,
140 g_param_spec_boolean ("sensitive",
142 P_("Whether the action group is enabled."),
145 g_object_class_install_property (gobject_class,
147 g_param_spec_boolean ("visible",
149 P_("Whether the action group is visible."),
154 * GtkGroupAction::connect-proxy:
155 * @action_group: the group
156 * @action: the action
159 * The connect_proxy signal is emitted after connecting a proxy to
160 * an action in the group. Note that the proxy may have been connected
161 * to a different action before.
163 * This is intended for simple customizations for which a custom action
164 * class would be too clumsy, e.g. showing tooltips for menuitems in the
167 * #GtkUIManager proxies the signal and provides global notification
168 * just before any action is connected to a proxy, which is probably more
173 action_group_signals[CONNECT_PROXY] =
174 g_signal_new ("connect_proxy",
175 G_OBJECT_CLASS_TYPE (klass),
177 _gtk_marshal_VOID__OBJECT_OBJECT,
179 GTK_TYPE_ACTION, GTK_TYPE_WIDGET);
182 * GtkAction::disconnect-proxy:
183 * @action_group: the group
184 * @action: the action
187 * The disconnect_proxy signal is emitted after disconnecting a proxy
188 * from an action in the group.
190 * #GtkUIManager proxies the signal and provides global notification
191 * just before any action is connected to a proxy, which is probably more
196 action_group_signals[DISCONNECT_PROXY] =
197 g_signal_new ("disconnect_proxy",
198 G_OBJECT_CLASS_TYPE (klass),
200 _gtk_marshal_VOID__OBJECT_OBJECT,
202 GTK_TYPE_ACTION, GTK_TYPE_WIDGET);
205 * GtkActionGroup::pre_activate:
206 * @action_group: the group
207 * @action: the action
209 * The pre_activate signal is emitted just before the @action in the
210 * @action_group is activated
212 * This is intended for #GtkUIManager to proxy the signal and provide global
213 * notification just before any action is activated.
217 action_group_signals[PRE_ACTIVATE] =
218 g_signal_new ("pre_activate",
219 G_OBJECT_CLASS_TYPE (klass),
221 _gtk_marshal_VOID__OBJECT,
226 * GtkActionGroup::post_activate:
227 * @action_group: the group
228 * @action: the action
230 * The post_activate signal is emitted just after the @action in the
231 * @action_group is activated
233 * This is intended for #GtkUIManager to proxy the signal and provide global
234 * notification just after any action is activated.
238 action_group_signals[POST_ACTIVATE] =
239 g_signal_new ("post_activate",
240 G_OBJECT_CLASS_TYPE (klass),
242 _gtk_marshal_VOID__OBJECT,
246 g_type_class_add_private (gobject_class, sizeof (GtkActionGroupPrivate));
250 gtk_action_group_init (GtkActionGroup *self)
252 self->private_data = GTK_ACTION_GROUP_GET_PRIVATE (self);
253 self->private_data->name = NULL;
254 self->private_data->sensitive = TRUE;
255 self->private_data->visible = TRUE;
256 self->private_data->actions = g_hash_table_new_full (g_str_hash, g_str_equal,
257 (GDestroyNotify) g_free,
258 (GDestroyNotify) g_object_unref);
259 self->private_data->translate_func = NULL;
260 self->private_data->translate_data = NULL;
261 self->private_data->translate_notify = NULL;
265 * gtk_action_group_new:
266 * @name: the name of the action group.
268 * Creates a new #GtkActionGroup object. The name of the action group
269 * is used when associating <link linkend="Action-Accel">keybindings</link>
272 * Returns: the new #GtkActionGroup
277 gtk_action_group_new (const gchar *name)
279 GtkActionGroup *self;
281 self = g_object_new (GTK_TYPE_ACTION_GROUP, NULL);
282 self->private_data->name = g_strdup (name);
288 gtk_action_group_finalize (GObject *object)
290 GtkActionGroup *self;
292 self = GTK_ACTION_GROUP (object);
294 g_free (self->private_data->name);
295 self->private_data->name = NULL;
297 g_hash_table_destroy (self->private_data->actions);
298 self->private_data->actions = NULL;
300 if (self->private_data->translate_notify)
301 self->private_data->translate_notify (self->private_data->translate_data);
303 if (parent_class->finalize)
304 (* parent_class->finalize) (object);
308 gtk_action_group_set_property (GObject *object,
313 GtkActionGroup *self;
316 self = GTK_ACTION_GROUP (object);
321 tmp = self->private_data->name;
322 self->private_data->name = g_value_dup_string (value);
326 gtk_action_group_set_sensitive (self, g_value_get_boolean (value));
329 gtk_action_group_set_visible (self, g_value_get_boolean (value));
332 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
338 gtk_action_group_get_property (GObject *object,
343 GtkActionGroup *self;
345 self = GTK_ACTION_GROUP (object);
350 g_value_set_string (value, self->private_data->name);
353 g_value_set_boolean (value, self->private_data->sensitive);
356 g_value_set_boolean (value, self->private_data->visible);
359 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
365 gtk_action_group_real_get_action (GtkActionGroup *self,
366 const gchar *action_name)
368 return g_hash_table_lookup (self->private_data->actions, action_name);
372 * gtk_action_group_get_name:
373 * @action_group: the action group
375 * Gets the name of the action group.
377 * Returns: the name of the action group.
382 gtk_action_group_get_name (GtkActionGroup *action_group)
384 g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), NULL);
386 return action_group->private_data->name;
390 * gtk_action_group_get_sensitive:
391 * @action_group: the action group
393 * Returns %TRUE if the group is sensitive. The constituent actions
394 * can only be logically sensitive (see gtk_action_is_sensitive()) if
395 * they are sensitive (see gtk_action_get_sensitive()) and their group
398 * Return value: %TRUE if the group is sensitive.
403 gtk_action_group_get_sensitive (GtkActionGroup *action_group)
405 g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), FALSE);
407 return action_group->private_data->sensitive;
411 cb_set_action_sensitivity (const gchar *name, GtkAction *action)
413 /* Minor optimization, the action_groups state only effects actions that are
414 * themselves sensitive */
415 if (gtk_action_get_sensitive (action))
416 g_object_notify (G_OBJECT (action), "sensitive");
420 * gtk_action_group_set_sensitive:
421 * @action_group: the action group
422 * @sensitive: new sensitivity
424 * Changes the sensitivity of @action_group
429 gtk_action_group_set_sensitive (GtkActionGroup *action_group, gboolean sensitive)
431 g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
433 if (action_group->private_data->sensitive ^ sensitive)
435 action_group->private_data->sensitive = sensitive;
436 g_hash_table_foreach (action_group->private_data->actions,
437 (GHFunc) cb_set_action_sensitivity, NULL);
442 * gtk_action_group_get_visible:
443 * @action_group: the action group
445 * Returns %TRUE if the group is visible. The constituent actions
446 * can only be logically visible (see gtk_action_is_visible()) if
447 * they are visible (see gtk_action_get_visible()) and their group
450 * Return value: %TRUE if the group is sensitive.
455 gtk_action_group_get_visible (GtkActionGroup *action_group)
457 g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), FALSE);
459 return action_group->private_data->visible;
463 cb_set_action_visiblity (const gchar *name, GtkAction *action)
465 /* Minor optimization, the action_groups state only effects actions that are
466 * themselves sensitive */
467 if (gtk_action_get_visible (action))
468 g_object_notify (G_OBJECT (action), "visible");
472 * gtk_action_group_set_visible:
473 * @action_group: the action group
474 * @visible: new visiblity
476 * Changes the visible of @action_group.
481 gtk_action_group_set_visible (GtkActionGroup *action_group, gboolean visible)
483 g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
485 if (action_group->private_data->visible ^ visible)
487 action_group->private_data->visible = visible;
488 g_hash_table_foreach (action_group->private_data->actions,
489 (GHFunc) cb_set_action_visiblity, NULL);
494 * gtk_action_group_get_action:
495 * @action_group: the action group
496 * @action_name: the name of the action
498 * Looks up an action in the action group by name.
500 * Returns: the action, or %NULL if no action by that name exists
505 gtk_action_group_get_action (GtkActionGroup *action_group,
506 const gchar *action_name)
508 g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), NULL);
509 g_return_val_if_fail (GTK_ACTION_GROUP_GET_CLASS (action_group)->get_action != NULL, NULL);
511 return (* GTK_ACTION_GROUP_GET_CLASS (action_group)->get_action)
512 (action_group, action_name);
516 * gtk_action_group_add_action:
517 * @action_group: the action group
520 * Adds an action object to the action group.
525 gtk_action_group_add_action (GtkActionGroup *action_group,
528 g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
529 g_return_if_fail (GTK_IS_ACTION (action));
530 g_return_if_fail (gtk_action_get_name (action) != NULL);
532 g_hash_table_insert (action_group->private_data->actions,
533 g_strdup (gtk_action_get_name (action)),
534 g_object_ref (action));
535 g_object_set (G_OBJECT (action), "action_group", action_group, NULL);
539 * gtk_action_group_add_action_with_accel:
540 * @action_group: the action group
541 * @action: the action to add
542 * @accelerator: the accelerator for the action, in
543 * the format understood by gtk_accelerator_parse(), or %NULL to use the
546 * Adds an action object to the action group and sets up the accelerator.
548 * If @accelerator is %NULL, attempts to use the accelerator associated
549 * with the stock_id of the action.
551 * Accel paths are set to
552 * <literal><Actions>/<replaceable>group-name</replaceable>/<replaceable>action-name</replaceable></literal>.
557 gtk_action_group_add_action_with_accel (GtkActionGroup *action_group,
559 const gchar *accelerator)
563 GdkModifierType accel_mods;
564 GtkStockItem stock_item;
568 g_object_get (action, "name", &name, "stock_id", &stock_id, NULL);
570 accel_path = g_strconcat ("<Actions>/",
571 action_group->private_data->name, "/", name, NULL);
574 gtk_accelerator_parse (accelerator, &accel_key, &accel_mods);
575 else if (stock_id && gtk_stock_lookup (stock_id, &stock_item))
577 accel_key = stock_item.keyval;
578 accel_mods = stock_item.modifier;
582 gtk_accel_map_add_entry (accel_path, accel_key, accel_mods);
584 gtk_action_set_accel_path (action, accel_path);
585 gtk_action_group_add_action (action_group, action);
593 * gtk_action_group_remove_action:
594 * @action_group: the action group
597 * Removes an action object from the action group.
602 gtk_action_group_remove_action (GtkActionGroup *action_group,
605 g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
606 g_return_if_fail (GTK_IS_ACTION (action));
607 g_return_if_fail (gtk_action_get_name (action) != NULL);
609 /* extra protection to make sure action->name is valid */
610 g_object_ref (action);
611 g_hash_table_remove (action_group->private_data->actions, gtk_action_get_name (action));
612 g_object_set (G_OBJECT (action), "action_group", NULL, NULL);
613 g_object_unref (action);
617 add_single_action (gpointer key,
621 GList **list = user_data;
623 *list = g_list_prepend (*list, value);
627 * gtk_action_group_list_actions:
628 * @action_group: the action group
630 * Lists the actions in the action group.
632 * Returns: an allocated list of the action objects in the action group
637 gtk_action_group_list_actions (GtkActionGroup *action_group)
639 GList *actions = NULL;
640 g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), NULL);
642 g_hash_table_foreach (action_group->private_data->actions, add_single_action, &actions);
644 return g_list_reverse (actions);
649 * gtk_action_group_add_actions:
650 * @action_group: the action group
651 * @entries: an array of action descriptions
652 * @n_entries: the number of entries
653 * @user_data: data to pass to the action callbacks
655 * This is a convenience function to create a number of actions and add them
656 * to the action group.
658 * The "activate" signals of the actions are connected to the callbacks and
659 * their accel paths are set to
660 * <literal><Actions>/<replaceable>group-name</replaceable>/<replaceable>action-name</replaceable></literal>.
665 gtk_action_group_add_actions (GtkActionGroup *action_group,
666 GtkActionEntry *entries,
670 gtk_action_group_add_actions_full (action_group,
677 * gtk_action_group_add_actions_full:
678 * @action_group: the action group
679 * @entries: an array of action descriptions
680 * @n_entries: the number of entries
681 * @user_data: data to pass to the action callbacks
682 * @destroy: destroy notification callback for @user_data
684 * This variant of gtk_action_group_add_actions() adds a #GDestroyNotify
685 * callback for @user_data.
690 gtk_action_group_add_actions_full (GtkActionGroup *action_group,
691 GtkActionEntry *entries,
694 GDestroyNotify destroy)
697 /* Keep this in sync with the other
698 * gtk_action_group_add_..._actions_full() functions.
701 GtkTranslateFunc translate_func;
702 gpointer translate_data;
704 g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
706 translate_func = action_group->private_data->translate_func;
707 translate_data = action_group->private_data->translate_data;
709 for (i = 0; i < n_entries; i++)
713 const gchar *tooltip;
717 label = translate_func (entries[i].label, translate_data);
718 tooltip = translate_func (entries[i].tooltip, translate_data);
722 label = entries[i].label;
723 tooltip = entries[i].tooltip;
726 action = gtk_action_new (entries[i].name,
729 entries[i].stock_id);
731 if (entries[i].callback)
732 g_signal_connect_data (action, "activate",
734 user_data, (GClosureNotify)destroy, 0);
736 gtk_action_group_add_action_with_accel (action_group,
738 entries[i].accelerator);
739 g_object_unref (action);
744 * gtk_action_group_add_toggle_actions:
745 * @action_group: the action group
746 * @entries: an array of toggle action descriptions
747 * @n_entries: the number of entries
748 * @user_data: data to pass to the action callbacks
750 * This is a convenience function to create a number of toggle actions and add them
751 * to the action group.
753 * The "activate" signals of the actions are connected to the callbacks and
754 * their accel paths are set to
755 * <literal><Actions>/<replaceable>group-name</replaceable>/<replaceable>action-name</replaceable></literal>.
760 gtk_action_group_add_toggle_actions (GtkActionGroup *action_group,
761 GtkToggleActionEntry *entries,
765 gtk_action_group_add_toggle_actions_full (action_group,
772 * gtk_action_group_add_toggle_actions_full:
773 * @action_group: the action group
774 * @entries: an array of toggle action descriptions
775 * @n_entries: the number of entries
776 * @user_data: data to pass to the action callbacks
777 * @destroy: destroy notification callback for @user_data
779 * This variant of gtk_action_group_add_toggle_actions() adds a
780 * #GDestroyNotify callback for @user_data.
785 gtk_action_group_add_toggle_actions_full (GtkActionGroup *action_group,
786 GtkToggleActionEntry *entries,
789 GDestroyNotify destroy)
791 /* Keep this in sync with the other
792 * gtk_action_group_add_..._actions_full() functions.
795 GtkTranslateFunc translate_func;
796 gpointer translate_data;
798 g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
800 translate_func = action_group->private_data->translate_func;
801 translate_data = action_group->private_data->translate_data;
803 for (i = 0; i < n_entries; i++)
805 GtkToggleAction *action;
807 const gchar *tooltip;
811 label = translate_func (entries[i].label, translate_data);
812 tooltip = translate_func (entries[i].tooltip, translate_data);
816 label = entries[i].label;
817 tooltip = entries[i].tooltip;
820 action = gtk_toggle_action_new (entries[i].name,
823 entries[i].stock_id);
825 gtk_toggle_action_set_active (action, entries[i].is_active);
827 if (entries[i].callback)
828 g_signal_connect_data (action, "activate",
830 user_data, (GClosureNotify)destroy, 0);
832 gtk_action_group_add_action_with_accel (action_group,
834 entries[i].accelerator);
835 g_object_unref (action);
840 * gtk_action_group_add_radio_actions:
841 * @action_group: the action group
842 * @entries: an array of radio action descriptions
843 * @n_entries: the number of entries
844 * @value: the value of the action to activate initially, or -1 if
845 * no action should be activated
846 * @on_change: the callback to connect to the changed signal
847 * @user_data: data to pass to the action callbacks
849 * This is a convenience routine to create a group of radio actions and
850 * add them to the action group.
852 * The "changed" signal of the first radio action is connected to the
853 * @on_change callback and the accel paths of the actions are set to
854 * <literal><Actions>/<replaceable>group-name</replaceable>/<replaceable>action-name</replaceable></literal>.
859 gtk_action_group_add_radio_actions (GtkActionGroup *action_group,
860 GtkRadioActionEntry *entries,
866 gtk_action_group_add_radio_actions_full (action_group,
869 on_change, user_data, NULL);
873 * gtk_action_group_add_radio_actions_full:
874 * @action_group: the action group
875 * @entries: an array of radio action descriptions
876 * @n_entries: the number of entries
877 * @value: the value of the action to activate initially, or -1 if
878 * no action should be activated
879 * @on_change: the callback to connect to the changed signal
880 * @user_data: data to pass to the action callbacks
881 * @destroy: destroy notification callback for @user_data
883 * This variant of gtk_action_group_add_radio_actions() adds a
884 * #GDestroyNotify callback for @user_data.
889 gtk_action_group_add_radio_actions_full (GtkActionGroup *action_group,
890 GtkRadioActionEntry *entries,
895 GDestroyNotify destroy)
897 /* Keep this in sync with the other
898 * gtk_action_group_add_..._actions_full() functions.
901 GtkTranslateFunc translate_func;
902 gpointer translate_data;
903 GSList *group = NULL;
904 GtkRadioAction *first_action = NULL;
906 g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
908 translate_func = action_group->private_data->translate_func;
909 translate_data = action_group->private_data->translate_data;
911 for (i = 0; i < n_entries; i++)
913 GtkRadioAction *action;
915 const gchar *tooltip;
919 label = translate_func (entries[i].label, translate_data);
920 tooltip = translate_func (entries[i].tooltip, translate_data);
924 label = entries[i].label;
925 tooltip = entries[i].tooltip;
928 action = gtk_radio_action_new (entries[i].name,
935 first_action = action;
937 gtk_radio_action_set_group (action, group);
938 group = gtk_radio_action_get_group (action);
940 if (value == entries[i].value)
941 gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
943 gtk_action_group_add_action_with_accel (action_group,
945 entries[i].accelerator);
946 g_object_unref (action);
949 if (on_change && first_action)
950 g_signal_connect_data (first_action, "changed",
951 on_change, user_data,
952 (GClosureNotify)destroy, 0);
956 * gtk_action_group_set_translate_func:
957 * @action_group: a #GtkActionGroup
958 * @func: a #GtkTranslateFunc
959 * @data: data to be passed to @func and @notify
960 * @notify: a #GtkDestroyNotify function to be called when @action_group is
961 * destroyed and when the translation function is changed again
963 * Sets a function to be used for translating the @label and @tooltip of
964 * #GtkActionGroupEntry<!-- -->s added by gtk_action_group_add_actions().
966 * If you're using gettext(), it is enough to set the translation domain
967 * with gtk_action_group_set_translation_domain().
972 gtk_action_group_set_translate_func (GtkActionGroup *action_group,
973 GtkTranslateFunc func,
975 GtkDestroyNotify notify)
977 g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
979 if (action_group->private_data->translate_notify)
980 action_group->private_data->translate_notify (action_group->private_data->translate_data);
982 action_group->private_data->translate_func = func;
983 action_group->private_data->translate_data = data;
984 action_group->private_data->translate_notify = notify;
988 dgettext_swapped (const gchar *msgid,
989 const gchar *domainname)
991 return dgettext (domainname, msgid);
995 * gtk_action_group_set_translation_domain:
996 * @action_group: a #GtkActionGroup
997 * @domain: the translation domain to use for dgettext() calls
999 * Sets the translation domain and uses dgettext() for translating the
1000 * @label and @tooltip of #GtkActionEntry<!-- -->s added by
1001 * gtk_action_group_add_actions().
1003 * If you're not using gettext() for localization, see
1004 * gtk_action_group_set_translate_func().
1009 gtk_action_group_set_translation_domain (GtkActionGroup *action_group,
1010 const gchar *domain)
1012 g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
1014 gtk_action_group_set_translate_func (action_group,
1015 (GtkTranslateFunc)dgettext_swapped,
1020 /* Protected for use by GtkAction */
1022 _gtk_action_group_emit_connect_proxy (GtkActionGroup *action_group,
1026 g_signal_emit (action_group, action_group_signals[CONNECT_PROXY], 0,
1031 _gtk_action_group_emit_disconnect_proxy (GtkActionGroup *action_group,
1035 g_signal_emit (action_group, action_group_signals[DISCONNECT_PROXY], 0,
1040 _gtk_action_group_emit_pre_activate (GtkActionGroup *action_group,
1043 g_signal_emit (action_group, action_group_signals[PRE_ACTIVATE], 0, action);
1047 _gtk_action_group_emit_post_activate (GtkActionGroup *action_group,
1050 g_signal_emit (action_group, action_group_signals[POST_ACTIVATE], 0, action);