diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-07-17 15:51:28 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-07-17 15:51:28 -0400 |
commit | 71fbf35f059bdbf5a10feda63de16164c065a93b (patch) | |
tree | 733811e06493caeb1d78dff123fdbe2a63309cad | |
parent | 8d31dbdc082ea98cd1063caac80d12cd57b43b53 (diff) | |
download | gtk+-matthiasc/a11y-logging.tar.gz |
a11y: Update GtkCheckButtonmatthiasc/a11y-logging
This is a bit unfortunate, since the aria modelling
doesn't quite agree with ours, so we have to listen
for the togglebutton property change, and we inherit
the pressed state from the togglebutton accessible.
-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]); } } |