add gtk_radio_button_join_group method for bindings

* this mirrors the committed change for gtk_radio_action_join_group in
  commit 85b53969b2
* Due to object ownership issues it is impossible to correctly use
  get_group/set_group from a GI binding
* join_group is safer because at the binding level it works with individual
  GtkRadioButton objects and not with the list of objects that gets
  modified in the library

https://bugzilla.gnome.org/show_bug.cgi?id=628935
This commit is contained in:
John (J5) Palmieri 2010-09-06 22:55:03 -04:00
parent 278957a5a4
commit 8a210673fb
2 changed files with 57 additions and 1 deletions

View File

@ -346,6 +346,61 @@ gtk_radio_button_set_group (GtkRadioButton *radio_button,
g_object_unref (radio_button); g_object_unref (radio_button);
} }
/**
* gtk_radio_button_join_group:
* @radio_button: the #GtkRadioButton object
* @group_source: (allow-none): a radio button object whos group we are
* joining, or %NULL to remove the radio button from its group
*
* Joins a #GtkRadioButton object to the group of another #GtkRadioButton object
*
* Use this in language bindings instead of the gtk_radio_button_get_group()
* and gtk_radio_button_set_group() methods
*
* A common way to set up a group of radio buttons is the following:
* |[
* GtkRadioButton *radio_button;
* GtkRadioButton *last_button;
*
* while (/* more buttons to add */)
* {
* radio_button = gtk_radio_button_new (...);
*
* gtk_radio_button_join_group (radio_button, last_button);
* last_button = radio_button;
* }
* ]|
*
* Since: 3.0
*/
void
gtk_radio_button_join_group (GtkRadioButton *radio_button,
GtkRadioButton *group_source)
{
g_return_if_fail (GTK_IS_RADIO_BUTTON (radio_button));
g_return_if_fail (group_source == NULL || GTK_IS_RADIO_BUTTON (group_source));
if (group_source)
{
GSList *group;
group = gtk_radio_button_get_group (group_source);
if (!group)
{
/* if we are not already part of a group we need to set up a new one
and then get the newly created group */
gtk_radio_button_set_group (group_source, NULL);
group = gtk_radio_button_get_group (group_source);
}
gtk_radio_button_set_group (radio_button, group);
}
else
{
gtk_radio_button_set_group (radio_button, NULL);
}
}
/** /**
* gtk_radio_button_new: * gtk_radio_button_new:
* @group: an existing radio button group, or %NULL if you are creating a new group. * @group: an existing radio button group, or %NULL if you are creating a new group.

View File

@ -86,7 +86,8 @@ GtkWidget* gtk_radio_button_new_with_mnemonic_from_widget (GtkRadioButton *radio
GSList* gtk_radio_button_get_group (GtkRadioButton *radio_button); GSList* gtk_radio_button_get_group (GtkRadioButton *radio_button);
void gtk_radio_button_set_group (GtkRadioButton *radio_button, void gtk_radio_button_set_group (GtkRadioButton *radio_button,
GSList *group); GSList *group);
void gtk_radio_button_join_group (GtkRadioButton *radio_button,
GtkRadioButton *group_source);
G_END_DECLS G_END_DECLS
#endif /* __GTK_RADIO_BUTTON_H__ */ #endif /* __GTK_RADIO_BUTTON_H__ */