summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2006-01-16 19:07:13 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2006-01-16 19:07:13 +0000
commit7f9b4a9615d10faf8adab1495eded22977e1833f (patch)
tree8b82d3d32083d710ace0e68776c5b4989e24d603 /gtk
parentc1d8923d29d1e801a4f970a6a19f637e8f2cfdd1 (diff)
downloadgtk+-7f9b4a9615d10faf8adab1495eded22977e1833f.tar.gz
Add a current-value property and a setter for it. (#322735, Jorn Baayen)
2006-01-16 Matthias Clasen <mclasen@redhat.com> * gtk/gtk.symbols: * gtk/gtkradioaction.[hc]: Add a current-value property and a setter for it. (#322735, Jorn Baayen)
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtk.symbols1
-rw-r--r--gtk/gtkradioaction.c71
-rw-r--r--gtk/gtkradioaction.h3
3 files changed, 73 insertions, 2 deletions
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);
@@ -160,6 +161,24 @@ gtk_radio_action_class_init (GtkRadioActionClass *klass)
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
* @current: the member of @action<!-- -->s group which has just been activated
@@ -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