X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkactiongroup.c;h=98327dc6c727ef1301a8bba24ff91be37ed04051;hb=ed2fc95be9ded4d397ba0de88065ddacee72462b;hp=8af5aaead064e34b4e6d21cfc1b47dfa8197fe60;hpb=805abff3cfb818d42520a24735b71d09a82e816f;p=~andy%2Fgtk diff --git a/gtk/gtkactiongroup.c b/gtk/gtkactiongroup.c index 8af5aaead..98327dc6c 100644 --- a/gtk/gtkactiongroup.c +++ b/gtk/gtkactiongroup.c @@ -31,12 +31,16 @@ #include #include "gtkactiongroup.h" +#include "gtkiconfactory.h" +#include "gtkicontheme.h" #include "gtkstock.h" #include "gtktoggleaction.h" #include "gtkradioaction.h" #include "gtkaccelmap.h" #include "gtkmarshalers.h" +#include "gtkprivate.h" #include "gtkintl.h" +#include "gtkalias.h" #define GTK_ACTION_GROUP_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_ACTION_GROUP, GtkActionGroupPrivate)) @@ -104,7 +108,7 @@ gtk_action_group_get_type (void) (GInstanceInitFunc) gtk_action_group_init, }; - type = g_type_register_static (G_TYPE_OBJECT, "GtkActionGroup", + type = g_type_register_static (G_TYPE_OBJECT, I_("GtkActionGroup"), &type_info, 0); } @@ -133,25 +137,24 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) P_("Name"), P_("A name for the action group."), NULL, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY)); + GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (gobject_class, PROP_SENSITIVE, g_param_spec_boolean ("sensitive", P_("Sensitive"), P_("Whether the action group is enabled."), TRUE, - G_PARAM_READWRITE)); + GTK_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_VISIBLE, g_param_spec_boolean ("visible", P_("Visible"), P_("Whether the action group is visible."), TRUE, - G_PARAM_READWRITE)); + GTK_PARAM_READWRITE)); /** - * GtkGroupAction::connect-proxy: + * GtkActionGroup::connect-proxy: * @action_group: the group * @action: the action * @proxy: the proxy @@ -171,7 +174,7 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) * Since: 2.4 */ action_group_signals[CONNECT_PROXY] = - g_signal_new ("connect_proxy", + g_signal_new (I_("connect_proxy"), G_OBJECT_CLASS_TYPE (klass), 0, 0, NULL, NULL, _gtk_marshal_VOID__OBJECT_OBJECT, @@ -179,7 +182,7 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) GTK_TYPE_ACTION, GTK_TYPE_WIDGET); /** - * GtkAction::disconnect-proxy: + * GtkActionGroup::disconnect-proxy: * @action_group: the group * @action: the action * @proxy: the proxy @@ -194,7 +197,7 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) * Since: 2.4 */ action_group_signals[DISCONNECT_PROXY] = - g_signal_new ("disconnect_proxy", + g_signal_new (I_("disconnect_proxy"), G_OBJECT_CLASS_TYPE (klass), 0, 0, NULL, NULL, _gtk_marshal_VOID__OBJECT_OBJECT, @@ -202,7 +205,7 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) GTK_TYPE_ACTION, GTK_TYPE_WIDGET); /** - * GtkActionGroup::pre_activate: + * GtkActionGroup::pre-activate: * @action_group: the group * @action: the action * @@ -215,7 +218,7 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) * Since: 2.4 */ action_group_signals[PRE_ACTIVATE] = - g_signal_new ("pre_activate", + g_signal_new (I_("pre_activate"), G_OBJECT_CLASS_TYPE (klass), 0, 0, NULL, NULL, _gtk_marshal_VOID__OBJECT, @@ -223,7 +226,7 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) GTK_TYPE_ACTION); /** - * GtkActionGroup::post_activate: + * GtkActionGroup::post-activate: * @action_group: the group * @action: the action * @@ -236,7 +239,7 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) * Since: 2.4 */ action_group_signals[POST_ACTIVATE] = - g_signal_new ("post_activate", + g_signal_new (I_("post_activate"), G_OBJECT_CLASS_TYPE (klass), 0, 0, NULL, NULL, _gtk_marshal_VOID__OBJECT, @@ -250,7 +253,7 @@ gtk_action_group_class_init (GtkActionGroupClass *klass) static void remove_action (GtkAction *action) { - g_object_set (action, "action_group", NULL, NULL); + g_object_set (action, I_("action-group"), NULL, NULL); g_object_unref (action); } @@ -386,7 +389,7 @@ gtk_action_group_real_get_action (GtkActionGroup *self, * * Since: 2.4 */ -const gchar * +G_CONST_RETURN gchar * gtk_action_group_get_name (GtkActionGroup *action_group) { g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), NULL); @@ -416,12 +419,13 @@ gtk_action_group_get_sensitive (GtkActionGroup *action_group) } static void -cb_set_action_sensitivity (const gchar *name, GtkAction *action) +cb_set_action_sensitivity (const gchar *name, + GtkAction *action) { - /* Minor optimization, the action_groups state only effects actions that are - * themselves sensitive */ + /* Minor optimization, the action_groups state only affects actions + * that are themselves sensitive */ if (gtk_action_get_sensitive (action)) - g_object_notify (G_OBJECT (action), "sensitive"); + _gtk_action_sync_sensitive (action); } /** @@ -434,15 +438,20 @@ cb_set_action_sensitivity (const gchar *name, GtkAction *action) * Since: 2.4 */ void -gtk_action_group_set_sensitive (GtkActionGroup *action_group, gboolean sensitive) +gtk_action_group_set_sensitive (GtkActionGroup *action_group, + gboolean sensitive) { g_return_if_fail (GTK_IS_ACTION_GROUP (action_group)); - if (action_group->private_data->sensitive ^ sensitive) + sensitive = sensitive != FALSE; + + if (action_group->private_data->sensitive != sensitive) { action_group->private_data->sensitive = sensitive; g_hash_table_foreach (action_group->private_data->actions, (GHFunc) cb_set_action_sensitivity, NULL); + + g_object_notify (G_OBJECT (action_group), "sensitive"); } } @@ -455,7 +464,7 @@ gtk_action_group_set_sensitive (GtkActionGroup *action_group, gboolean sensitive * they are visible (see gtk_action_get_visible()) and their group * is visible. * - * Return value: %TRUE if the group is sensitive. + * Return value: %TRUE if the group is visible. * * Since: 2.4 */ @@ -468,12 +477,13 @@ gtk_action_group_get_visible (GtkActionGroup *action_group) } static void -cb_set_action_visiblity (const gchar *name, GtkAction *action) +cb_set_action_visiblity (const gchar *name, + GtkAction *action) { - /* Minor optimization, the action_groups state only effects actions that are - * themselves sensitive */ + /* Minor optimization, the action_groups state only affects actions + * that are themselves visible */ if (gtk_action_get_visible (action)) - g_object_notify (G_OBJECT (action), "visible"); + _gtk_action_sync_visible (action); } /** @@ -486,15 +496,20 @@ cb_set_action_visiblity (const gchar *name, GtkAction *action) * Since: 2.4 */ void -gtk_action_group_set_visible (GtkActionGroup *action_group, gboolean visible) +gtk_action_group_set_visible (GtkActionGroup *action_group, + gboolean visible) { g_return_if_fail (GTK_IS_ACTION_GROUP (action_group)); - if (action_group->private_data->visible ^ visible) + visible = visible != FALSE; + + if (action_group->private_data->visible != visible) { action_group->private_data->visible = visible; g_hash_table_foreach (action_group->private_data->actions, (GHFunc) cb_set_action_visiblity, NULL); + + g_object_notify (G_OBJECT (action_group), "visible"); } } @@ -545,7 +560,7 @@ gtk_action_group_add_action (GtkActionGroup *action_group, g_hash_table_insert (action_group->private_data->actions, g_strdup (gtk_action_get_name (action)), g_object_ref (action)); - g_object_set (G_OBJECT (action), "action_group", action_group, NULL); + g_object_set (action, I_("action-group"), action_group, NULL); } /** @@ -553,13 +568,13 @@ gtk_action_group_add_action (GtkActionGroup *action_group, * @action_group: the action group * @action: the action to add * @accelerator: the accelerator for the action, in - * the format understood by gtk_accelerator_parse(), or %NULL to use the - * stock accelerator + * the format understood by gtk_accelerator_parse(), or "" for no accelerator, or + * %NULL to use the stock accelerator * * Adds an action object to the action group and sets up the accelerator. * * If @accelerator is %NULL, attempts to use the accelerator associated - * with the stock_id of the action. + * with the stock_id of the action. * * Accel paths are set to * <Actions>/group-name/action-name. @@ -568,8 +583,8 @@ gtk_action_group_add_action (GtkActionGroup *action_group, */ void gtk_action_group_add_action_with_accel (GtkActionGroup *action_group, - GtkAction *action, - const gchar *accelerator) + GtkAction *action, + const gchar *accelerator) { gchar *accel_path; guint accel_key = 0; @@ -578,17 +593,22 @@ gtk_action_group_add_action_with_accel (GtkActionGroup *action_group, gchar *name; gchar *stock_id; - g_object_get (action, "name", &name, "stock_id", &stock_id, NULL); + g_object_get (action, "name", &name, "stock-id", &stock_id, NULL); accel_path = g_strconcat ("/", action_group->private_data->name, "/", name, NULL); if (accelerator) { - gtk_accelerator_parse (accelerator, &accel_key, &accel_mods); - if (accel_key == 0) - g_warning ("Unable to parse accelerator '%s' for action '%s'", - accelerator, name); + if (accelerator[0] == 0) + accel_key = 0; + else + { + gtk_accelerator_parse (accelerator, &accel_key, &accel_mods); + if (accel_key == 0) + g_warning ("Unable to parse accelerator '%s' for action '%s'", + accelerator, name); + } } else if (stock_id && gtk_stock_lookup (stock_id, &stock_item)) { @@ -679,10 +699,10 @@ gtk_action_group_list_actions (GtkActionGroup *action_group) * Since: 2.4 */ void -gtk_action_group_add_actions (GtkActionGroup *action_group, - GtkActionEntry *entries, - guint n_entries, - gpointer user_data) +gtk_action_group_add_actions (GtkActionGroup *action_group, + const GtkActionEntry *entries, + guint n_entries, + gpointer user_data) { gtk_action_group_add_actions_full (action_group, entries, n_entries, @@ -708,7 +728,7 @@ shared_data_unref (gpointer data) if (shared_data->destroy) (*shared_data->destroy) (shared_data->data); - g_free (shared_data); + g_slice_free (SharedData, shared_data); } } @@ -727,11 +747,11 @@ shared_data_unref (gpointer data) * Since: 2.4 */ void -gtk_action_group_add_actions_full (GtkActionGroup *action_group, - GtkActionEntry *entries, - guint n_entries, - gpointer user_data, - GDestroyNotify destroy) +gtk_action_group_add_actions_full (GtkActionGroup *action_group, + const GtkActionEntry *entries, + guint n_entries, + gpointer user_data, + GDestroyNotify destroy) { /* Keep this in sync with the other @@ -742,7 +762,7 @@ gtk_action_group_add_actions_full (GtkActionGroup *action_group, g_return_if_fail (GTK_IS_ACTION_GROUP (action_group)); - shared_data = g_new0 (SharedData, 1); + shared_data = g_slice_new0 (SharedData); shared_data->ref_count = 1; shared_data->data = user_data; shared_data->destroy = destroy; @@ -759,8 +779,16 @@ gtk_action_group_add_actions_full (GtkActionGroup *action_group, action = gtk_action_new (entries[i].name, label, tooltip, - entries[i].stock_id); + NULL); + if (entries[i].stock_id) + { + g_object_set (action, "stock-id", entries[i].stock_id, NULL); + if (gtk_icon_theme_has_icon (gtk_icon_theme_get_default (), + entries[i].stock_id)) + g_object_set (action, "icon-name", entries[i].stock_id, NULL); + } + if (entries[i].callback) { GClosure *closure; @@ -799,10 +827,10 @@ gtk_action_group_add_actions_full (GtkActionGroup *action_group, * Since: 2.4 */ void -gtk_action_group_add_toggle_actions (GtkActionGroup *action_group, - GtkToggleActionEntry *entries, - guint n_entries, - gpointer user_data) +gtk_action_group_add_toggle_actions (GtkActionGroup *action_group, + const GtkToggleActionEntry *entries, + guint n_entries, + gpointer user_data) { gtk_action_group_add_toggle_actions_full (action_group, entries, n_entries, @@ -824,11 +852,11 @@ gtk_action_group_add_toggle_actions (GtkActionGroup *action_group, * Since: 2.4 */ void -gtk_action_group_add_toggle_actions_full (GtkActionGroup *action_group, - GtkToggleActionEntry *entries, - guint n_entries, - gpointer user_data, - GDestroyNotify destroy) +gtk_action_group_add_toggle_actions_full (GtkActionGroup *action_group, + const GtkToggleActionEntry *entries, + guint n_entries, + gpointer user_data, + GDestroyNotify destroy) { /* Keep this in sync with the other * gtk_action_group_add_..._actions_full() functions. @@ -838,7 +866,7 @@ gtk_action_group_add_toggle_actions_full (GtkActionGroup *action_group, g_return_if_fail (GTK_IS_ACTION_GROUP (action_group)); - shared_data = g_new0 (SharedData, 1); + shared_data = g_slice_new0 (SharedData); shared_data->ref_count = 1; shared_data->data = user_data; shared_data->destroy = destroy; @@ -855,7 +883,15 @@ gtk_action_group_add_toggle_actions_full (GtkActionGroup *action_group, action = gtk_toggle_action_new (entries[i].name, label, tooltip, - entries[i].stock_id); + NULL); + + if (entries[i].stock_id) + { + if (gtk_icon_factory_lookup_default (entries[i].stock_id)) + g_object_set (action, "stock-id", entries[i].stock_id, NULL); + else + g_object_set (action, "icon-name", entries[i].stock_id, NULL); + } gtk_toggle_action_set_active (action, entries[i].is_active); @@ -900,12 +936,12 @@ gtk_action_group_add_toggle_actions_full (GtkActionGroup *action_group, * Since: 2.4 **/ void -gtk_action_group_add_radio_actions (GtkActionGroup *action_group, - GtkRadioActionEntry *entries, - guint n_entries, - gint value, - GCallback on_change, - gpointer user_data) +gtk_action_group_add_radio_actions (GtkActionGroup *action_group, + const GtkRadioActionEntry *entries, + guint n_entries, + gint value, + GCallback on_change, + gpointer user_data) { gtk_action_group_add_radio_actions_full (action_group, entries, n_entries, @@ -930,13 +966,13 @@ gtk_action_group_add_radio_actions (GtkActionGroup *action_group, * Since: 2.4 **/ void -gtk_action_group_add_radio_actions_full (GtkActionGroup *action_group, - GtkRadioActionEntry *entries, - guint n_entries, - gint value, - GCallback on_change, - gpointer user_data, - GDestroyNotify destroy) +gtk_action_group_add_radio_actions_full (GtkActionGroup *action_group, + const GtkRadioActionEntry *entries, + guint n_entries, + gint value, + GCallback on_change, + gpointer user_data, + GDestroyNotify destroy) { /* Keep this in sync with the other * gtk_action_group_add_..._actions_full() functions. @@ -959,9 +995,17 @@ gtk_action_group_add_radio_actions_full (GtkActionGroup *action_group, action = gtk_radio_action_new (entries[i].name, label, tooltip, - entries[i].stock_id, + NULL, entries[i].value); + if (entries[i].stock_id) + { + if (gtk_icon_factory_lookup_default (entries[i].stock_id)) + g_object_set (action, "stock-id", entries[i].stock_id, NULL); + else + g_object_set (action, "icon-name", entries[i].stock_id, NULL); + } + if (i == 0) first_action = action; @@ -1000,10 +1044,10 @@ gtk_action_group_add_radio_actions_full (GtkActionGroup *action_group, * Since: 2.4 **/ void -gtk_action_group_set_translate_func (GtkActionGroup *action_group, - GtkTranslateFunc func, - gpointer data, - GtkDestroyNotify notify) +gtk_action_group_set_translate_func (GtkActionGroup *action_group, + GtkTranslateFunc func, + gpointer data, + GtkDestroyNotify notify) { g_return_if_fail (GTK_IS_ACTION_GROUP (action_group)); @@ -1019,7 +1063,11 @@ static gchar * dgettext_swapped (const gchar *msgid, const gchar *domainname) { - return dgettext (domainname, msgid); + /* Pass through dgettext if and only if msgid is nonempty. */ + if (msgid && *msgid) + return dgettext (domainname, msgid); + else + return (gchar*) msgid; } /** @@ -1048,30 +1096,34 @@ gtk_action_group_set_translation_domain (GtkActionGroup *action_group, g_free); } + /** * gtk_action_group_translate_string: * @action_group: a #GtkActionGroup * @string: a string * * Translates a string using the specified translate_func(). This - * is mainly intended for language bindings. + * is mainly intended for language bindings. * * Returns: the translation of @string * * Since: 2.6 **/ -gchar * +G_CONST_RETURN gchar * gtk_action_group_translate_string (GtkActionGroup *action_group, const gchar *string) { GtkTranslateFunc translate_func; gpointer translate_data; - + g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), string); + + if (string == NULL) + return NULL; translate_func = action_group->private_data->translate_func; translate_data = action_group->private_data->translate_data; - + if (translate_func) return translate_func (string, translate_data); else @@ -1106,7 +1158,10 @@ _gtk_action_group_emit_pre_activate (GtkActionGroup *action_group, void _gtk_action_group_emit_post_activate (GtkActionGroup *action_group, - GtkAction *action) + GtkAction *action) { g_signal_emit (action_group, action_group_signals[POST_ACTIVATE], 0, action); } + +#define __GTK_ACTION_GROUP_C__ +#include "gtkaliasdef.c"