From 9f1aa3141b8aa4b626c4666bd8ce31a97e7b11eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Tyrychtr?= Date: Thu, 11 Apr 2024 14:25:42 +0200 Subject: [PATCH] a11y: Implement GtkAccessibleRange for scrollbars Fixes gnome-control-center#2994 --- gtk/gtkscrollbar.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/gtk/gtkscrollbar.c b/gtk/gtkscrollbar.c index ec9702ae9c..1c1778a0b5 100644 --- a/gtk/gtkscrollbar.c +++ b/gtk/gtkscrollbar.c @@ -28,6 +28,7 @@ #include "gtkscrollbar.h" #include "gtkrange.h" +#include "gtkaccessiblerange.h" #include "gtkadjustment.h" #include "gtkorientable.h" #include "gtkprivate.h" @@ -107,13 +108,38 @@ enum { LAST_PROP = PROP_ORIENTATION }; +static void gtk_scrollbar_accessible_range_init (GtkAccessibleRangeInterface *iface); + G_DEFINE_TYPE_WITH_CODE (GtkScrollbar, gtk_scrollbar, GTK_TYPE_WIDGET, G_ADD_PRIVATE (GtkScrollbar) - G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL)) - + G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL) + G_IMPLEMENT_INTERFACE (GTK_TYPE_ACCESSIBLE_RANGE, + gtk_scrollbar_accessible_range_init)) static GParamSpec *props[LAST_PROP] = { NULL, }; +static gboolean +accessible_range_set_current_value (GtkAccessibleRange *range, + double value) +{ + GtkScrollbar *self = GTK_SCROLLBAR (range); + GtkAdjustment *adjustment = gtk_scrollbar_get_adjustment (self); + + if (adjustment) + { + gtk_adjustment_set_value (adjustment, value); + return true; + } + + return false; +} + +static void +gtk_scrollbar_accessible_range_init (GtkAccessibleRangeInterface *iface) +{ + iface->set_current_value = accessible_range_set_current_value; +} + static void gtk_scrollbar_get_property (GObject *object, guint property_id,