a11y: Update the accessible state for GtkRange

This commit is contained in:
Emmanuele Bassi
2020-07-13 16:22:22 +01:00
parent 53812d0bdb
commit 882e5e15e8

View File

@@ -27,8 +27,10 @@
#include "gtkrangeprivate.h"
#include "gtkaccessible.h"
#include "gtkadjustmentprivate.h"
#include "gtkcolorscaleprivate.h"
#include "gtkenums.h"
#include "gtkeventcontrollerkey.h"
#include "gtkeventcontrollerscroll.h"
#include "gtkgesturedrag.h"
@@ -240,6 +242,9 @@ static gboolean gtk_range_scroll_controller_scroll (GtkEventControllerScrol
gdouble dy,
GtkRange *range);
static void gtk_range_set_orientation (GtkRange *range,
GtkOrientation orientation);
G_DEFINE_TYPE_WITH_CODE (GtkRange, gtk_range, GTK_TYPE_WIDGET,
G_ADD_PRIVATE (GtkRange)
G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE,
@@ -437,18 +442,11 @@ gtk_range_set_property (GObject *object,
GParamSpec *pspec)
{
GtkRange *range = GTK_RANGE (object);
GtkRangePrivate *priv = gtk_range_get_instance_private (range);
switch (prop_id)
{
case PROP_ORIENTATION:
if (priv->orientation != g_value_get_enum (value))
{
priv->orientation = g_value_get_enum (value);
gtk_widget_update_orientation (GTK_WIDGET (range), priv->orientation);
gtk_widget_queue_resize (GTK_WIDGET (range));
g_object_notify_by_pspec (object, pspec);
}
gtk_range_set_orientation (range, g_value_get_enum (value));
break;
case PROP_ADJUSTMENT:
gtk_range_set_adjustment (range, g_value_get_object (value));
@@ -584,6 +582,27 @@ gtk_range_init (GtkRange *range)
gtk_widget_add_controller (GTK_WIDGET (range), controller);
}
static void
gtk_range_set_orientation (GtkRange *range,
GtkOrientation orientation)
{
GtkRangePrivate *priv = gtk_range_get_instance_private (range);
if (priv->orientation != orientation)
{
priv->orientation = orientation;
gtk_accessible_update_property (GTK_ACCESSIBLE (range),
GTK_ACCESSIBLE_PROPERTY_ORIENTATION, priv->orientation,
-1);
gtk_widget_update_orientation (GTK_WIDGET (range), priv->orientation);
gtk_widget_queue_resize (GTK_WIDGET (range));
g_object_notify (G_OBJECT (range), "orientation");
}
}
/**
* gtk_range_get_adjustment:
* @range: a #GtkRange
@@ -657,6 +676,12 @@ gtk_range_set_adjustment (GtkRange *range,
G_CALLBACK (gtk_range_adjustment_value_changed),
range);
gtk_accessible_update_property (GTK_ACCESSIBLE (range),
GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, gtk_adjustment_get_upper (adjustment),
GTK_ACCESSIBLE_PROPERTY_VALUE_MIN, gtk_adjustment_get_lower (adjustment),
GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, gtk_adjustment_get_value (adjustment),
-1);
gtk_range_adjustment_changed (adjustment, range);
gtk_range_adjustment_value_changed (adjustment, range);
@@ -2281,15 +2306,21 @@ gtk_range_adjustment_changed (GtkAdjustment *adjustment,
{
GtkRange *range = GTK_RANGE (data);
GtkRangePrivate *priv = gtk_range_get_instance_private (range);
double upper = gtk_adjustment_get_upper (priv->adjustment);
double lower = gtk_adjustment_get_lower (priv->adjustment);
if (gtk_adjustment_get_upper (priv->adjustment) == gtk_adjustment_get_lower (priv->adjustment) &&
GTK_IS_SCALE (range))
if (upper == lower && GTK_IS_SCALE (range))
gtk_widget_hide (priv->slider_widget);
else
gtk_widget_show (priv->slider_widget);
gtk_widget_queue_allocate (priv->trough_widget);
gtk_accessible_update_property (GTK_ACCESSIBLE (range),
GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, upper,
GTK_ACCESSIBLE_PROPERTY_VALUE_MIN, lower,
-1);
/* Note that we don't round off to priv->round_digits here.
* that's because it's really broken to change a value
* in response to a change signal on that value; round_digits
@@ -2316,6 +2347,10 @@ gtk_range_adjustment_value_changed (GtkAdjustment *adjustment,
g_signal_emit (range, signals[VALUE_CHANGED], 0);
gtk_accessible_update_property (GTK_ACCESSIBLE (range),
GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, gtk_adjustment_get_value (adjustment),
-1);
gtk_widget_queue_allocate (priv->trough_widget);
}