mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 22:20:24 +00:00
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:
parent
278957a5a4
commit
8a210673fb
@ -346,6 +346,61 @@ gtk_radio_button_set_group (GtkRadioButton *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:
|
||||
* @group: an existing radio button group, or %NULL if you are creating a new group.
|
||||
|
@ -86,7 +86,8 @@ GtkWidget* gtk_radio_button_new_with_mnemonic_from_widget (GtkRadioButton *radio
|
||||
GSList* gtk_radio_button_get_group (GtkRadioButton *radio_button);
|
||||
void gtk_radio_button_set_group (GtkRadioButton *radio_button,
|
||||
GSList *group);
|
||||
|
||||
void gtk_radio_button_join_group (GtkRadioButton *radio_button,
|
||||
GtkRadioButton *group_source);
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_RADIO_BUTTON_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user