X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkradiobutton.c;h=82ab28cb9da467ae73eac8844675c8daffc136ce;hb=563eb60666d9f72c38d7542b0ab37841e6aac488;hp=31651962ecd348c7ec335fd26e096da49e1d5381;hpb=d4add8cefa6fa5c29bdb50f18e31cbfbfb38cc2b;p=~andy%2Fgtk diff --git a/gtk/gtkradiobutton.c b/gtk/gtkradiobutton.c index 31651962e..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); @@ -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); @@ -481,7 +482,7 @@ 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 @@ -800,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; @@ -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)); @@ -925,6 +931,11 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button, if (!interior_focus || !(child && gtk_widget_get_visible (child))) 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)) @@ -934,10 +945,8 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button, (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);