aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEven Oscar Andersen <even.oscar.andersen@qt.io>2025-03-04 13:52:05 +0100
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2025-09-04 12:13:11 +0000
commite672c287dbb6420f7b291c029448165ff867cb00 (patch)
tree652d3fb41437d6cb4952e14a8138f31e61f570e6
parent28cb8f65b9209d5bd16a29245f92a14363b75fbb (diff)
Implement minimum/maximum-value also for to/from properties
Some objects have to,from properties instead of minimumValue, maximumValue properties. Switch to to,from if minimum,maximum-Value does not exist Pick-to: 6.8 Change-Id: Ibb8e2ae3214c5fe654420a5b338d66e8fdae8c6e Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io> (cherry picked from commit 3b6701011b6889bc9e1d0863775272098ccdc58a) Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Even Oscar Andersen <even.oscar.andersen@qt.io>
-rw-r--r--src/quick/accessible/qaccessiblequickitem.cpp26
-rw-r--r--tests/auto/quickcontrols/accessibility/data/item.qml52
-rw-r--r--tests/auto/quickcontrols/accessibility/tst_accessibility.cpp51
3 files changed, 127 insertions, 2 deletions
diff --git a/src/quick/accessible/qaccessiblequickitem.cpp b/src/quick/accessible/qaccessiblequickitem.cpp
index ad4c7e4d44..35ef7f0f1b 100644
--- a/src/quick/accessible/qaccessiblequickitem.cpp
+++ b/src/quick/accessible/qaccessiblequickitem.cpp
@@ -713,12 +713,34 @@ void QAccessibleQuickItem::setCurrentValue(const QVariant &value)
QVariant QAccessibleQuickItem::maximumValue() const
{
- return item()->property("maximumValue");
+ const auto minimumValue = item()->property("minimumValue");
+ const auto maximumValue = item()->property("maximumValue");
+ const auto from = item()->property("from");
+ const auto to = item()->property("to");
+
+ if (minimumValue.isValid() && maximumValue.isValid())
+ return maximumValue;
+
+ if (from.isValid() && to.isValid())
+ return to;
+
+ return QVariant();
}
QVariant QAccessibleQuickItem::minimumValue() const
{
- return item()->property("minimumValue");
+ const auto minimumValue = item()->property("minimumValue");
+ const auto maximumValue = item()->property("maximumValue");
+ const auto from = item()->property("from");
+ const auto to = item()->property("to");
+
+ if (minimumValue.isValid() && maximumValue.isValid())
+ return minimumValue;
+
+ if (from.isValid() && to.isValid())
+ return from;
+
+ return QVariant();
}
QVariant QAccessibleQuickItem::minimumStepSize() const
diff --git a/tests/auto/quickcontrols/accessibility/data/item.qml b/tests/auto/quickcontrols/accessibility/data/item.qml
new file mode 100644
index 0000000000..800843b0cf
--- /dev/null
+++ b/tests/auto/quickcontrols/accessibility/data/item.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls
+Item {
+ Accessible.role: Accessible.Client
+ Item {
+ id: item1
+ property double stepSize: 0
+ property double from: 0
+ property double to: 100
+ property double value: 25
+ Accessible.role: Accessible.Slider
+ Accessible.onDecreaseAction: { value -= stepSize; }
+ Accessible.onIncreaseAction: { value += stepSize; }
+ }
+ Item {
+ id: item2
+ property double stepSize: 5
+ property double from: 0
+ property double to: 100
+ property double value: 25
+ Accessible.role: Accessible.Slider
+ Accessible.onDecreaseAction: { value -= stepSize; }
+ Accessible.onIncreaseAction: { value += stepSize; }
+ }
+ Item {
+ id: item3
+ property double stepSize: 0
+ property double minimumValue: 0
+ property double maximumValue: 100
+ property double from: -1000
+ property double to: 1000
+ property double value: 25
+ Accessible.role: Accessible.Slider
+ Accessible.onDecreaseAction: { value -= stepSize; }
+ Accessible.onIncreaseAction: { value += stepSize; }
+ }
+ Item {
+ id: item4
+ property double stepSize: 5
+ property double minimumValue: 0
+ property double maximumValue: 100
+ property double from: -1000
+ property double to: 1000
+ property double value: 25
+ Accessible.role: Accessible.Slider
+ Accessible.onDecreaseAction: { value -= stepSize; }
+ Accessible.onIncreaseAction: { value += stepSize; }
+ }
+}
diff --git a/tests/auto/quickcontrols/accessibility/tst_accessibility.cpp b/tests/auto/quickcontrols/accessibility/tst_accessibility.cpp
index e2eb3d7f8b..307e3d3165 100644
--- a/tests/auto/quickcontrols/accessibility/tst_accessibility.cpp
+++ b/tests/auto/quickcontrols/accessibility/tst_accessibility.cpp
@@ -36,6 +36,8 @@ private slots:
void actionAccessibilityImplicitName();
void accessibleName();
+ void sliderTest();
+
private:
QQmlEngine engine;
};
@@ -376,6 +378,55 @@ void tst_accessibility::accessibleName()
#endif
}
+void tst_accessibility::sliderTest()
+{
+#if QT_CONFIG(accessibility)
+ if (!QAccessible::isActive()) {
+ QPlatformAccessibility *accessibility = platformAccessibility();
+ if (!accessibility)
+ QSKIP("No QPlatformAccessibility available.");
+ accessibility->setActive(true);
+ }
+
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("item.qml"));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ auto root = QAccessible::queryAccessibleInterface(object.get());
+ QVERIFY(root);
+ QCOMPARE(root->childCount(), 4);
+
+ for (int childIndex = 0; childIndex < 4; ++childIndex)
+ {
+ auto item = root->child(childIndex);
+ auto actionIface = item->actionInterface();
+ QVERIFY(actionIface);
+ auto valueIface = item->valueInterface();
+ QVERIFY(valueIface);
+
+ QVERIFY(actionIface->actionNames().contains(QAccessibleActionInterface::increaseAction()));
+ QVERIFY(actionIface->actionNames().contains(QAccessibleActionInterface::decreaseAction()));
+ QCOMPARE(valueIface->currentValue(), 25);
+ QCOMPARE(valueIface->minimumValue(), 0);
+ QCOMPARE(valueIface->maximumValue(), 100);
+
+ valueIface->setCurrentValue(30);
+ QCOMPARE(valueIface->currentValue(), 30);
+
+ const auto stepSize = valueIface->minimumStepSize();
+
+ actionIface->doAction(QAccessibleActionInterface::increaseAction());
+ QCOMPARE(valueIface->currentValue(), 30 + stepSize.toDouble());
+
+ actionIface->doAction(QAccessibleActionInterface::decreaseAction());
+ QCOMPARE(valueIface->currentValue(), 30);
+ QCOMPARE(valueIface->minimumValue(), 0);
+ QCOMPARE(valueIface->maximumValue(), 100);
+ }
+#endif
+}
+
QTEST_MAIN(tst_accessibility)
#include "tst_accessibility.moc"