From 7f9b4a9615d10faf8adab1495eded22977e1833f Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 16 Jan 2006 19:07:13 +0000 Subject: [PATCH] Add a current-value property and a setter for it. (#322735, Jorn Baayen) 2006-01-16 Matthias Clasen * gtk/gtk.symbols: * gtk/gtkradioaction.[hc]: Add a current-value property and a setter for it. (#322735, Jorn Baayen) --- ChangeLog | 6 +++ ChangeLog.pre-2-10 | 6 +++ docs/reference/gtk/gtk-sections.txt | 1 + gtk/gtk.symbols | 1 + gtk/gtkradioaction.c | 71 ++++++++++++++++++++++++++++- gtk/gtkradioaction.h | 3 +- 6 files changed, 86 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 616db4e89b..dd45ed5660 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-01-16 Matthias Clasen + + * gtk/gtk.symbols: + * gtk/gtkradioaction.[hc]: Add a current-value property and a + setter for it. (#322735, Jorn Baayen) + 2006-01-16 Michael Natterer * gtk/gtkbutton.c: applied patch from maemo-gtk which adds a diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 616db4e89b..dd45ed5660 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2006-01-16 Matthias Clasen + + * gtk/gtk.symbols: + * gtk/gtkradioaction.[hc]: Add a current-value property and a + setter for it. (#322735, Jorn Baayen) + 2006-01-16 Michael Natterer * gtk/gtkbutton.c: applied patch from maemo-gtk which adds a diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt index 2e043e571d..fe379700a1 100644 --- a/docs/reference/gtk/gtk-sections.txt +++ b/docs/reference/gtk/gtk-sections.txt @@ -2585,6 +2585,7 @@ gtk_radio_action_new gtk_radio_action_get_group gtk_radio_action_set_group gtk_radio_action_get_current_value +gtk_radio_action_set_current_value GTK_TYPE_RADIO_ACTION GTK_RADIO_ACTION diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index 9099cfed70..cfe5043151 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -2448,6 +2448,7 @@ gtk_radio_action_get_current_value gtk_radio_action_get_group gtk_radio_action_get_type G_GNUC_CONST gtk_radio_action_new +gtk_radio_action_set_current_value gtk_radio_action_set_group #endif #endif diff --git a/gtk/gtkradioaction.c b/gtk/gtkradioaction.c index b2f60b46c5..8d243f163c 100644 --- a/gtk/gtkradioaction.c +++ b/gtk/gtkradioaction.c @@ -56,7 +56,8 @@ enum { PROP_0, PROP_VALUE, - PROP_GROUP + PROP_GROUP, + PROP_CURRENT_VALUE }; static void gtk_radio_action_init (GtkRadioAction *action); @@ -159,6 +160,24 @@ gtk_radio_action_class_init (GtkRadioActionClass *klass) GTK_TYPE_RADIO_ACTION, GTK_PARAM_WRITABLE)); + /** + * GtkRadioAction:current-value: + * + * The value property of the currently active member of the group to which + * this action belongs. + * + * Since: 2.10 + */ + g_object_class_install_property (gobject_class, + PROP_CURRENT_VALUE, + g_param_spec_int ("current-value", + P_("The current value"), + P_("The value property of the currently active member of the group to which this action belongs."), + G_MININT, + G_MAXINT, + 0, + GTK_PARAM_READWRITE)); + /** * GtkRadioAction::changed: * @action: the action on which the signal is emitted @@ -278,6 +297,10 @@ gtk_radio_action_set_property (GObject *object, } } break; + case PROP_CURRENT_VALUE: + gtk_radio_action_set_current_value (radio_action, + g_value_get_int (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -299,6 +322,10 @@ gtk_radio_action_get_property (GObject *object, case PROP_VALUE: g_value_set_int (value, radio_action->private_data->value); break; + case PROP_CURRENT_VALUE: + g_value_set_int (value, + gtk_radio_action_get_current_value (radio_action)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -355,6 +382,8 @@ gtk_radio_action_activate (GtkAction *action) tmp_action = tmp_list->data; tmp_list = tmp_list->next; + g_object_notify (G_OBJECT (tmp_action), "current-value"); + g_signal_emit (tmp_action, radio_action_signals[CHANGED], 0, radio_action); } } @@ -485,5 +514,45 @@ gtk_radio_action_get_current_value (GtkRadioAction *action) return action->private_data->value; } +/** + * gtk_radio_action_set_current_value: + * @action: a #GtkRadioAction + * @current_value: the new value + * + * Sets the currently active group member to the member with value + * property @current_value. + * + * Since: 2.10 + **/ +void +gtk_radio_action_set_current_value (GtkRadioAction *action, + gint current_value) +{ + GSList *slist; + + g_return_if_fail (GTK_IS_RADIO_ACTION (action)); + + if (action->private_data->group) + { + for (slist = action->private_data->group; slist; slist = slist->next) + { + GtkRadioAction *radio_action = slist->data; + + if (radio_action->private_data->value == current_value) + { + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (radio_action), + TRUE); + return; + } + } + } + + if (action->private_data->value == current_value) + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); + else + g_warning ("Radio group does not contain an action with value '%d'", + current_value); +} + #define __GTK_RADIO_ACTION_C__ #include "gtkaliasdef.c" diff --git a/gtk/gtkradioaction.h b/gtk/gtkradioaction.h index 75a079819b..d39648b458 100644 --- a/gtk/gtkradioaction.h +++ b/gtk/gtkradioaction.h @@ -77,7 +77,8 @@ GSList *gtk_radio_action_get_group (GtkRadioAction *actio void gtk_radio_action_set_group (GtkRadioAction *action, GSList *group); gint gtk_radio_action_get_current_value (GtkRadioAction *action); - +void gtk_radio_action_set_current_value (GtkRadioAction *action, + gint current_value); G_END_DECLS