X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkradiobutton.c;h=82ab28cb9da467ae73eac8844675c8daffc136ce;hb=563eb60666d9f72c38d7542b0ab37841e6aac488;hp=23e113da5dc3f13492b874f369bb798af09aa36d;hpb=be4a616e6e415201c766d2850fb2737199df4b11;p=~andy%2Fgtk diff --git a/gtk/gtkradiobutton.c b/gtk/gtkradiobutton.c index 23e113da5..82ab28cb9 100644 --- a/gtk/gtkradiobutton.c +++ b/gtk/gtkradiobutton.c @@ -12,9 +12,7 @@ * 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 . */ /* @@ -33,6 +31,7 @@ #include "gtkmarshalers.h" #include "gtkprivate.h" #include "gtkintl.h" +#include "a11y/gtkradiobuttonaccessible.h" /** * SECTION:gtkradiobutton @@ -76,7 +75,8 @@ * * GtkWidget *window, *radio1, *radio2, *box, *entry; * window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - * box = gtk_box_new (GTK_ORIENTATION_VERTICAL, TRUE, 2); + * box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); + * gtk_box_set_homogeneous (GTK_BOX (box), TRUE); * * /* Create a radio button with a GtkEntry widget */ * radio1 = gtk_radio_button_new (NULL); @@ -175,7 +175,7 @@ gtk_radio_button_class_init (GtkRadioButtonClass *class) /** * GtkRadioButton::group-changed: - * @style: the object which received the signal + * @button: the object which received the signal * * Emitted when the group of radio buttons that a radio button belongs * to changes. This is emitted when a radio button switches from @@ -195,6 +195,8 @@ gtk_radio_button_class_init (GtkRadioButtonClass *class) G_TYPE_NONE, 0); g_type_class_add_private (class, sizeof (GtkRadioButtonPrivate)); + + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_RADIO_BUTTON_ACCESSIBLE); } static void @@ -207,7 +209,6 @@ gtk_radio_button_init (GtkRadioButton *radio_button) GtkRadioButtonPrivate); priv = radio_button->priv; - gtk_widget_set_has_window (GTK_WIDGET (radio_button), FALSE); gtk_widget_set_receives_default (GTK_WIDGET (radio_button), FALSE); _gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE); @@ -403,8 +404,8 @@ gtk_radio_button_join_group (GtkRadioButton *radio_button, /** * gtk_radio_button_new: - * @group: (allow-none): an existing radio button group, or %NULL if you are - * creating a new group. + * @group: (element-type GtkRadioButton) (allow-none): an existing + * radio button group, or %NULL if you are creating a new group. * * Creates a new #GtkRadioButton. To be of any practical value, a widget should * then be packed into the radio button. @@ -426,13 +427,13 @@ gtk_radio_button_new (GSList *group) /** * gtk_radio_button_new_with_label: - * @group: (allow-none): an existing radio button group, or %NULL if you are - * creating a new group. + * @group: (element-type GtkRadioButton) (allow-none): an existing + * radio button group, or %NULL if you are creating a new group. * @label: the text label to display next to the radio button. * * Creates a new #GtkRadioButton with a text label. * - * Returns: (transfer full): a new radio button. + * Returns: a new radio button. */ GtkWidget* gtk_radio_button_new_with_label (GSList *group, @@ -451,7 +452,8 @@ gtk_radio_button_new_with_label (GSList *group, /** * gtk_radio_button_new_with_mnemonic: - * @group: (allow-none): the radio button group + * @group: (element-type GtkRadioButton) (allow-none): the radio button + * group * @label: the text of the button, with an underscore in front of the * mnemonic character * @@ -460,7 +462,7 @@ gtk_radio_button_new_with_label (GSList *group, * gtk_label_new_with_mnemonic(), so underscores in @label indicate the * mnemonic for the button. * - * Returns: (transfer full): a new #GtkRadioButton + * Returns: a new #GtkRadioButton */ GtkWidget* gtk_radio_button_new_with_mnemonic (GSList *group, @@ -480,14 +482,14 @@ gtk_radio_button_new_with_mnemonic (GSList *group, } /** - * gtk_radio_button_new_from_widget: + * gtk_radio_button_new_from_widget: (constructor) * @radio_group_member: (allow-none): an existing #GtkRadioButton. * * Creates a new #GtkRadioButton, adding it to the same group as * @radio_group_member. As with gtk_radio_button_new(), a widget * should be packed into the radio button. * - * Returns: (transfer full): a new radio button. + * Returns: (transfer none): a new radio button. */ GtkWidget* gtk_radio_button_new_from_widget (GtkRadioButton *radio_group_member) @@ -499,7 +501,7 @@ gtk_radio_button_new_from_widget (GtkRadioButton *radio_group_member) } /** - * gtk_radio_button_new_with_label_from_widget: + * gtk_radio_button_new_with_label_from_widget: (constructor) * @radio_group_member: (allow-none): widget to get radio group from or %NULL * @label: a text string to display next to the radio button. * @@ -519,7 +521,7 @@ gtk_radio_button_new_with_label_from_widget (GtkRadioButton *radio_group_member, } /** - * gtk_radio_button_new_with_mnemonic_from_widget: + * gtk_radio_button_new_with_mnemonic_from_widget: (constructor) * @radio_group_member: (allow-none): widget to get radio group from or %NULL * @label: the text of the button, with an underscore in front of the * mnemonic character @@ -528,7 +530,7 @@ gtk_radio_button_new_with_label_from_widget (GtkRadioButton *radio_group_member, * will be created using gtk_label_new_with_mnemonic(), so underscores * in @label indicate the mnemonic for the button. * - * Returns: (transfer full): a new #GtkRadioButton + * Returns: (transfer none): a new #GtkRadioButton **/ GtkWidget* gtk_radio_button_new_with_mnemonic_from_widget (GtkRadioButton *radio_group_member, @@ -799,6 +801,10 @@ gtk_radio_button_clicked (GtkButton *button) g_object_ref (GTK_WIDGET (button)); + new_state = gtk_widget_get_state_flags (GTK_WIDGET (button)) & + ~(GTK_STATE_FLAG_PRELIGHT | + GTK_STATE_FLAG_ACTIVE); + if (gtk_toggle_button_get_active (toggle_button)) { tmp_button = NULL; @@ -892,8 +898,7 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button, GtkButton *button; GtkToggleButton *toggle_button; GtkStyleContext *context; - GtkStateFlags state; - GdkWindow *window; + GtkStateFlags state = 0; gint x, y; gint indicator_size, indicator_spacing; gint focus_width; @@ -905,6 +910,7 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button, button = GTK_BUTTON (check_button); toggle_button = GTK_TOGGLE_BUTTON (check_button); context = gtk_widget_get_style_context (widget); + state = gtk_widget_get_state_flags (widget); border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); @@ -914,8 +920,6 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button, "focus-padding", &focus_pad, NULL); - window = gtk_widget_get_window (widget); - _gtk_check_button_get_props (check_button, &indicator_size, &indicator_spacing); gtk_widget_get_allocation (widget, &allocation); @@ -925,24 +929,29 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button, child = gtk_bin_get_child (GTK_BIN (check_button)); if (!interior_focus || !(child && gtk_widget_get_visible (child))) - x += focus_width + focus_pad; + x += focus_width + focus_pad; + + state &= ~(GTK_STATE_FLAG_INCONSISTENT | + GTK_STATE_FLAG_ACTIVE | + GTK_STATE_FLAG_SELECTED | + GTK_STATE_FLAG_PRELIGHT); if (gtk_toggle_button_get_inconsistent (toggle_button)) state |= GTK_STATE_FLAG_INCONSISTENT; else if (gtk_toggle_button_get_active (toggle_button)) state |= GTK_STATE_FLAG_ACTIVE; - if (button->priv->activate_timeout || (button->priv->button_down && button->priv->in_button)) + if (button->priv->activate_timeout || + (button->priv->button_down && button->priv->in_button)) state |= GTK_STATE_FLAG_SELECTED; - if (button->priv->in_button) + if (button->priv->in_button && !(state & GTK_STATE_FLAG_INSENSITIVE)) state |= GTK_STATE_FLAG_PRELIGHT; - else if (!gtk_widget_is_sensitive (widget)) - state |= GTK_STATE_FLAG_INSENSITIVE; if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) x = allocation.width - (indicator_size + x); + gtk_style_context_save (context); gtk_style_context_set_state (context, state); if (state & GTK_STATE_FLAG_PRELIGHT) @@ -951,8 +960,7 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button, allocation.width - (2 * border_width), allocation.height - (2 * border_width)); - gtk_style_context_save (context); - gtk_style_context_add_class (context, GTK_STYLE_CLASS_CHECK); + gtk_style_context_add_class (context, GTK_STYLE_CLASS_RADIO); gtk_render_option (context, cr, x, y, indicator_size, indicator_size);