diff options
-rw-r--r-- | gtk/gtkcheckbutton.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gtk/gtkcheckbutton.c b/gtk/gtkcheckbutton.c index 9761dabebe..530db1237e 100644 --- a/gtk/gtkcheckbutton.c +++ b/gtk/gtkcheckbutton.c @@ -172,11 +172,42 @@ gtk_check_button_get_property (GObject *object, } static void +update_accessible_state (GtkCheckButton *check_button) +{ + GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (check_button); + + GtkAccessibleTristate checked_state; + + if (priv->inconsistent) + checked_state = GTK_ACCESSIBLE_TRISTATE_MIXED; + else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_button))) + checked_state = GTK_ACCESSIBLE_TRISTATE_TRUE; + else + checked_state = GTK_ACCESSIBLE_TRISTATE_FALSE; + + gtk_accessible_update_state (GTK_ACCESSIBLE (check_button), + GTK_ACCESSIBLE_STATE_CHECKED, checked_state, + -1); +} + +static void +gtk_check_button_notify (GObject *object, + GParamSpec *pspec) +{ + if (pspec->name == I_("active")) + update_accessible_state (GTK_CHECK_BUTTON (object)); + + if (G_OBJECT_CLASS (gtk_check_button_parent_class)->notify) + G_OBJECT_CLASS (gtk_check_button_parent_class)->notify (object, pspec); +} + +static void gtk_check_button_class_init (GtkCheckButtonClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); + object_class->notify = gtk_check_button_notify; object_class->finalize = gtk_check_button_finalize; object_class->set_property = gtk_check_button_set_property; object_class->get_property = gtk_check_button_get_property; @@ -394,6 +425,8 @@ gtk_check_button_set_inconsistent (GtkCheckButton *check_button, else gtk_widget_unset_state_flags (GTK_WIDGET (check_button), GTK_STATE_FLAG_INCONSISTENT); + update_accessible_state (check_button); + g_object_notify_by_pspec (G_OBJECT (check_button), props[PROP_INCONSISTENT]); } } |