X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkradiotoolbutton.c;h=ab849edab2f634a3df5e719c031372df286af42f;hb=02e915273845b21af223e7e5e2425569afcf1b83;hp=b76322f7a00bf59b13c7a0340f7f15f035115120;hpb=90646daf190e95981dda238d3d08e882a54f254f;p=~andy%2Fgtk diff --git a/gtk/gtkradiotoolbutton.c b/gtk/gtkradiotoolbutton.c index b76322f7a..ab849edab 100644 --- a/gtk/gtkradiotoolbutton.c +++ b/gtk/gtkradiotoolbutton.c @@ -15,53 +15,76 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ +#include "config.h" #include "gtkradiotoolbutton.h" #include "gtkradiobutton.h" #include "gtkintl.h" +#include "gtkprivate.h" -static void gtk_radio_tool_button_init (GtkRadioToolButton *button); -static void gtk_radio_tool_button_class_init (GtkRadioToolButtonClass *klass); -GType -gtk_radio_tool_button_get_type (void) -{ - static GType type = 0; +/** + * SECTION:gtkradiotoolbutton + * @Short_description: A toolbar item that contains a radio button + * @Title: GtkRadioToolButton + * @See_also: #GtkToolbar, #GtkToolButton + * + * A #GtkRadioToolButton is a #GtkToolItem that contains a radio button, + * that is, a button that is part of a group of toggle buttons where only + * one button can be active at a time. + * + * Use gtk_radio_tool_button_new() to create a new + * #GtkRadioToolButton. Use gtk_radio_tool_button_new_from_widget() to + * create a new #GtkRadioToolButton that is part of the same group as an + * existing #GtkRadioToolButton. Use + * gtk_radio_tool_button_new_from_stock() or + * gtk_radio_tool_button_new_with_stock_from_widget() create a new + * #GtkRadioToolButton containing a stock item. + */ - if (!type) - { - static const GTypeInfo type_info = - { - sizeof (GtkRadioToolButtonClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) gtk_radio_tool_button_class_init, - (GClassFinalizeFunc) NULL, - NULL, - sizeof (GtkRadioToolButton), - 0, /* n_preallocs */ - (GInstanceInitFunc) gtk_radio_tool_button_init - }; - - type = g_type_register_static (GTK_TYPE_TOGGLE_TOOL_BUTTON, - "GtkRadioToolButton", &type_info, 0); - } - return type; -} - +enum { + PROP_0, + PROP_GROUP +}; + +static void gtk_radio_tool_button_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); + +G_DEFINE_TYPE (GtkRadioToolButton, gtk_radio_tool_button, GTK_TYPE_TOGGLE_TOOL_BUTTON) + static void gtk_radio_tool_button_class_init (GtkRadioToolButtonClass *klass) { + GObjectClass *object_class; GtkToolButtonClass *toolbutton_class; + object_class = (GObjectClass *)klass; toolbutton_class = (GtkToolButtonClass *)klass; + + object_class->set_property = gtk_radio_tool_button_set_property; toolbutton_class->button_type = GTK_TYPE_RADIO_BUTTON; + + /** + * GtkRadioToolButton:group: + * + * Sets a new group for a radio tool button. + * + * Since: 2.4 + */ + g_object_class_install_property (object_class, + PROP_GROUP, + g_param_spec_object ("group", + P_("Group"), + P_("The radio tool button whose group this button belongs to."), + GTK_TYPE_RADIO_TOOL_BUTTON, + GTK_PARAM_WRITABLE)); + } static void @@ -71,9 +94,41 @@ gtk_radio_tool_button_init (GtkRadioToolButton *button) gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (_gtk_tool_button_get_button (tool_button)), FALSE); } +static void +gtk_radio_tool_button_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GtkRadioToolButton *button; + + button = GTK_RADIO_TOOL_BUTTON (object); + + switch (prop_id) + { + case PROP_GROUP: + { + GtkRadioToolButton *arg; + GSList *slist = NULL; + if (G_VALUE_HOLDS_OBJECT (value)) + { + arg = GTK_RADIO_TOOL_BUTTON (g_value_get_object (value)); + if (arg) + slist = gtk_radio_tool_button_get_group (arg); + gtk_radio_tool_button_set_group (button, slist); + } + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + /** * gtk_radio_tool_button_new: - * @group: An existing radio button group, or %NULL if you are creating a new group + * @group: (allow-none) (transfer none) (element-type GtkRadioButton): An + * existing radio button group, or %NULL if you are creating a new group * * Creates a new #GtkRadioToolButton, adding it to @group. * @@ -96,14 +151,15 @@ gtk_radio_tool_button_new (GSList *group) /** * gtk_radio_tool_button_new_from_stock: - * @group: an existing radio button group, or %NULL if you are creating a new group + * @group: (allow-none) (element-type GtkRadioButton): an existing radio button + * group, or %NULL if you are creating a new group * @stock_id: the name of a stock item * * Creates a new #GtkRadioToolButton, adding it to @group. * The new #GtkRadioToolButton will contain an icon and label from the * stock item indicated by @stock_id. * - * Return value: The new #GtkRadioToolItem + * Return value: The new #GtkRadioToolButton * * Since: 2.4 **/ @@ -116,7 +172,7 @@ gtk_radio_tool_button_new_from_stock (GSList *group, g_return_val_if_fail (stock_id != NULL, NULL); button = g_object_new (GTK_TYPE_RADIO_TOOL_BUTTON, - "stock_id", stock_id, + "stock-id", stock_id, NULL); @@ -126,13 +182,13 @@ gtk_radio_tool_button_new_from_stock (GSList *group, } /** - * gtk_radio_tool_button_new_from_widget: - * @group: An existing #GtkRadioToolButton - * + * gtk_radio_tool_button_new_from_widget: (constructor) + * @group: (allow-none): An existing #GtkRadioToolButton, or %NULL + * * Creates a new #GtkRadioToolButton adding it to the same group as @gruup - * - * Return value: The new #GtkRadioToolButton - * + * + * Return value: (transfer none): The new #GtkRadioToolButton + * * Since: 2.4 **/ GtkToolItem * @@ -140,37 +196,37 @@ gtk_radio_tool_button_new_from_widget (GtkRadioToolButton *group) { GSList *list = NULL; - g_return_val_if_fail (GTK_IS_RADIO_TOOL_BUTTON (group), NULL); + g_return_val_if_fail (group == NULL || GTK_IS_RADIO_TOOL_BUTTON (group), NULL); - if (group) + if (group != NULL) list = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (group)); return gtk_radio_tool_button_new (list); } /** - * gtk_radio_tool_button_new_with_stock_from_widget: - * @group: An existing #GtkRadioToolButton. - * @stock_id: the name of a stock item - * + * gtk_radio_tool_button_new_with_stock_from_widget: (constructor) + * @group: (allow-none): An existing #GtkRadioToolButton. + * @stock_id: the name of a stock item + * * Creates a new #GtkRadioToolButton adding it to the same group as @group. * The new #GtkRadioToolButton will contain an icon and label from the * stock item indicated by @stock_id. - * - * Return value: A new #GtkRadioToolButton - * + * + * Return value: (transfer none): A new #GtkRadioToolButton + * * Since: 2.4 **/ GtkToolItem * -gtk_radio_tool_button_new_with_stock_from_widget (GtkWidget *group, - const gchar *stock_id) +gtk_radio_tool_button_new_with_stock_from_widget (GtkRadioToolButton *group, + const gchar *stock_id) { GSList *list = NULL; - g_return_val_if_fail (GTK_IS_RADIO_TOOL_BUTTON (group), NULL); + g_return_val_if_fail (group == NULL || GTK_IS_RADIO_TOOL_BUTTON (group), NULL); - if (group) - list = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (group)); + if (group != NULL) + list = gtk_radio_tool_button_get_group (group); return gtk_radio_tool_button_new_from_stock (list, stock_id); } @@ -186,11 +242,11 @@ get_radio_button (GtkRadioToolButton *button) * @button: a #GtkRadioToolButton * * Returns the radio button group @button belongs to. - * - * Return value: The group @button belongs to. - * + * + * Return value: (transfer none) (element-type GtkRadioButton): The group @button belongs to. + * * Since: 2.4 - **/ + */ GSList * gtk_radio_tool_button_get_group (GtkRadioToolButton *button) { @@ -202,7 +258,7 @@ gtk_radio_tool_button_get_group (GtkRadioToolButton *button) /** * gtk_radio_tool_button_set_group: * @button: a #GtkRadioToolButton - * @group: an existing radio button group + * @group: (transfer none) (element-type GtkRadioButton): an existing radio button group * * Adds @button to @group, removing it from the group it belonged to before. * @@ -216,4 +272,3 @@ gtk_radio_tool_button_set_group (GtkRadioToolButton *button, gtk_radio_button_set_group (get_radio_button (button), group); } -