X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkactiongroup.c;h=ac177e1ab3d2b6bfdf119af56b6321e03e12c735;hb=e54f8f4c623182b6870b27ef283cae2e71749662;hp=d0749f43b74de8bdfd79b791ac07e0c75c979c37;hpb=fa740ae012fc285833b5a1a425be7055cb4faeb7;p=~andy%2Fgtk diff --git a/gtk/gtkactiongroup.c b/gtk/gtkactiongroup.c index d0749f43b..ac177e1ab 100644 --- a/gtk/gtkactiongroup.c +++ b/gtk/gtkactiongroup.c @@ -14,9 +14,7 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ /* @@ -111,6 +109,7 @@ struct _GtkActionGroupPrivate gboolean sensitive; gboolean visible; GHashTable *actions; + GtkAccelGroup *accel_group; GtkTranslateFunc translate_func; gpointer translate_data; @@ -131,7 +130,8 @@ enum PROP_0, PROP_NAME, PROP_SENSITIVE, - PROP_VISIBLE + PROP_VISIBLE, + PROP_ACCEL_GROUP }; static void gtk_action_group_init (GtkActionGroup *self); @@ -243,6 +243,13 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) P_("Whether the action group is visible."), TRUE, GTK_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, + PROP_ACCEL_GROUP, + g_param_spec_object ("accel-group", + P_("Accelerator Group"), + P_("The accelerator group the actions of this group should use."), + GTK_TYPE_ACCEL_GROUP, + GTK_PARAM_READWRITE)); /** * GtkActionGroup::connect-proxy: @@ -557,6 +564,8 @@ gtk_action_group_finalize (GObject *object) g_hash_table_destroy (private->actions); private->actions = NULL; + g_clear_object (&private->accel_group); + if (private->translate_notify) private->translate_notify (private->translate_data); @@ -589,6 +598,9 @@ gtk_action_group_set_property (GObject *object, case PROP_VISIBLE: gtk_action_group_set_visible (self, g_value_get_boolean (value)); break; + case PROP_ACCEL_GROUP: + gtk_action_group_set_accel_group (self, g_value_get_object (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -618,6 +630,9 @@ gtk_action_group_get_property (GObject *object, case PROP_VISIBLE: g_value_set_boolean (value, private->visible); break; + case PROP_ACCEL_GROUP: + g_value_set_object (value, private->accel_group); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -645,7 +660,7 @@ gtk_action_group_real_get_action (GtkActionGroup *self, * * Since: 2.4 */ -G_CONST_RETURN gchar * +const gchar * gtk_action_group_get_name (GtkActionGroup *action_group) { GtkActionGroupPrivate *private; @@ -747,6 +762,25 @@ gtk_action_group_get_visible (GtkActionGroup *action_group) return private->visible; } +/** + * gtk_action_group_get_accel_group: + * @action_group: a #GtkActionGroup + * + * Gets the accelerator group. + * + * Returns: (transfer none): the accelerator group associated with this action + * group or %NULL if there is none. + * + * Since: 3.6 + */ +GtkAccelGroup * +gtk_action_group_get_accel_group (GtkActionGroup *action_group) +{ + g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), FALSE); + + return action_group->priv->accel_group; +} + static void cb_set_action_visiblity (const gchar *name, GtkAction *action) @@ -786,6 +820,47 @@ gtk_action_group_set_visible (GtkActionGroup *action_group, } } +static void +gtk_action_group_accel_group_foreach (gpointer key, gpointer val, gpointer data) +{ + gtk_action_set_accel_group (val, data); +} + +/** + * gtk_action_group_set_accel_group: + * @action_group: a #GtkActionGroup + * @accel_group: (allow-none): a #GtkAccelGroup to set or %NULL + * + * Sets the accelerator group to be used by every action in this group. + * + * Since: 3.6 + */ +void +gtk_action_group_set_accel_group (GtkActionGroup *action_group, + GtkAccelGroup *accel_group) +{ + GtkActionGroupPrivate *private; + + g_return_if_fail (GTK_IS_ACTION_GROUP (action_group)); + + private = action_group->priv; + + if (private->accel_group == accel_group) + return; + + g_clear_object (&private->accel_group); + + if (accel_group) + private->accel_group = g_object_ref (accel_group); + + /* Set the new accel group on every action */ + g_hash_table_foreach (private->actions, + gtk_action_group_accel_group_foreach, + accel_group); + + g_object_notify (G_OBJECT (action_group), "accel-group"); +} + /** * gtk_action_group_get_action: * @action_group: the action group @@ -863,6 +938,9 @@ gtk_action_group_add_action (GtkActionGroup *action_group, (gpointer) name, g_object_ref (action)); g_object_set (action, I_("action-group"), action_group, NULL); + + if (private->accel_group) + gtk_action_set_accel_group (action, private->accel_group); } /** @@ -1003,9 +1081,9 @@ gtk_action_group_list_actions (GtkActionGroup *action_group) /** - * gtk_action_group_add_actions: + * gtk_action_group_add_actions: (skip) * @action_group: the action group - * @entries: an array of action descriptions + * @entries: (array length=n_entries): an array of action descriptions * @n_entries: the number of entries * @user_data: data to pass to the action callbacks * @@ -1054,9 +1132,9 @@ shared_data_unref (gpointer data) /** - * gtk_action_group_add_actions_full: + * gtk_action_group_add_actions_full: (skip) * @action_group: the action group - * @entries: an array of action descriptions + * @entries: (array length=n_entries): an array of action descriptions * @n_entries: the number of entries * @user_data: data to pass to the action callbacks * @destroy: destroy notification callback for @user_data @@ -1134,9 +1212,9 @@ gtk_action_group_add_actions_full (GtkActionGroup *action_group, } /** - * gtk_action_group_add_toggle_actions: + * gtk_action_group_add_toggle_actions: (skip) * @action_group: the action group - * @entries: an array of toggle action descriptions + * @entries: (array length=n_entries): an array of toggle action descriptions * @n_entries: the number of entries * @user_data: data to pass to the action callbacks * @@ -1162,9 +1240,9 @@ gtk_action_group_add_toggle_actions (GtkActionGroup *action_group, /** - * gtk_action_group_add_toggle_actions_full: + * gtk_action_group_add_toggle_actions_full: (skip) * @action_group: the action group - * @entries: an array of toggle action descriptions + * @entries: (array length=n_entries): an array of toggle action descriptions * @n_entries: the number of entries * @user_data: data to pass to the action callbacks * @destroy: destroy notification callback for @user_data @@ -1243,9 +1321,9 @@ gtk_action_group_add_toggle_actions_full (GtkActionGroup *action_gro } /** - * gtk_action_group_add_radio_actions: + * gtk_action_group_add_radio_actions: (skip) * @action_group: the action group - * @entries: an array of radio action descriptions + * @entries: (array length=n_entries): an array of radio action descriptions * @n_entries: the number of entries * @value: the value of the action to activate initially, or -1 if * no action should be activated @@ -1276,9 +1354,9 @@ gtk_action_group_add_radio_actions (GtkActionGroup *action_group, } /** - * gtk_action_group_add_radio_actions_full: + * gtk_action_group_add_radio_actions_full: (skip) * @action_group: the action group - * @entries: an array of radio action descriptions + * @entries: (array length=n_entries): an array of radio action descriptions * @n_entries: the number of entries * @value: the value of the action to activate initially, or -1 if * no action should be activated @@ -1365,7 +1443,7 @@ gtk_action_group_add_radio_actions_full (GtkActionGroup *action_group * destroyed and when the translation function is changed again * * Sets a function to be used for translating the @label and @tooltip of - * #GtkActionGroupEntrys added by gtk_action_group_add_actions(). + * #GtkActionEntrys added by gtk_action_group_add_actions(). * * If you're using gettext(), it is enough to set the translation domain * with gtk_action_group_set_translation_domain(). @@ -1406,7 +1484,8 @@ dgettext_swapped (const gchar *msgid, /** * gtk_action_group_set_translation_domain: * @action_group: a #GtkActionGroup - * @domain: the translation domain to use for g_dgettext() calls + * @domain: (allow-none): the translation domain to use for g_dgettext() + * calls, or %NULL to use the domain set with textdomain() * * Sets the translation domain and uses g_dgettext() for translating the * @label and @tooltip of #GtkActionEntrys added by @@ -1435,14 +1514,15 @@ gtk_action_group_set_translation_domain (GtkActionGroup *action_group, * @action_group: a #GtkActionGroup * @string: a string * - * Translates a string using the specified translate_func(). This + * Translates a string using the function set with + * gtk_action_group_set_translate_func(). This * is mainly intended for language bindings. * * Returns: the translation of @string * * Since: 2.6 **/ -G_CONST_RETURN gchar * +const gchar * gtk_action_group_translate_string (GtkActionGroup *action_group, const gchar *string) {