summaryrefslogtreecommitdiff
path: root/gtk/gtkradiomenuitem.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkradiomenuitem.c')
-rw-r--r--gtk/gtkradiomenuitem.c55
1 files changed, 42 insertions, 13 deletions
diff --git a/gtk/gtkradiomenuitem.c b/gtk/gtkradiomenuitem.c
index e74ba09a62..2297161196 100644
--- a/gtk/gtkradiomenuitem.c
+++ b/gtk/gtkradiomenuitem.c
@@ -55,30 +55,59 @@ GtkWidget*
gtk_radio_menu_item_new (GSList *group)
{
GtkRadioMenuItem *radio_menu_item;
- GtkRadioMenuItem *tmp_menu_item;
- GSList *tmp_list;
radio_menu_item = gtk_type_new (gtk_radio_menu_item_get_type ());
- tmp_list = group;
- radio_menu_item->group = g_slist_prepend (group, radio_menu_item);
+ gtk_radio_menu_item_set_group (radio_menu_item, group);
+
+ return GTK_WIDGET (radio_menu_item);
+}
- if (tmp_list)
+void
+gtk_radio_menu_item_set_group (GtkRadioMenuItem *radio_menu_item,
+ GSList *group)
+{
+ g_return_if_fail (radio_menu_item != NULL);
+ g_return_if_fail (GTK_IS_RADIO_MENU_ITEM (radio_menu_item));
+ g_return_if_fail (!g_slist_find (group, radio_menu_item));
+
+ if (radio_menu_item->group)
{
- while (tmp_list)
+ GSList *slist;
+
+ radio_menu_item->group = g_slist_remove (radio_menu_item->group, radio_menu_item);
+
+ for (slist = radio_menu_item->group; slist; slist = slist->next)
{
- tmp_menu_item = tmp_list->data;
- tmp_list = tmp_list->next;
-
- tmp_menu_item->group = radio_menu_item->group;
+ GtkRadioMenuItem *tmp_item;
+
+ tmp_item = slist->data;
+
+ tmp_item->group = radio_menu_item->group;
+ }
+ }
+
+ radio_menu_item->group = g_slist_prepend (group, radio_menu_item);
+
+ if (group)
+ {
+ GSList *slist;
+
+ for (slist = group; slist; slist = slist->next)
+ {
+ GtkRadioMenuItem *tmp_item;
+
+ tmp_item = slist->data;
+
+ tmp_item->group = radio_menu_item->group;
}
}
else
{
GTK_CHECK_MENU_ITEM (radio_menu_item)->active = TRUE;
+ /* gtk_widget_set_state (GTK_WIDGET (radio_menu_item), GTK_STATE_ACTIVE);
+ */
}
-
- return GTK_WIDGET (radio_menu_item);
}
GtkWidget*
@@ -125,7 +154,7 @@ gtk_radio_menu_item_class_init (GtkRadioMenuItemClass *klass)
static void
gtk_radio_menu_item_init (GtkRadioMenuItem *radio_menu_item)
{
- radio_menu_item->group = NULL;
+ radio_menu_item->group = g_slist_prepend (NULL, radio_menu_item);
}
static void