diff options
| author | Even Oscar Andersen <even.oscar.andersen@qt.io> | 2025-03-04 13:52:05 +0100 |
|---|---|---|
| committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2025-09-04 12:13:11 +0000 |
| commit | e672c287dbb6420f7b291c029448165ff867cb00 (patch) | |
| tree | 652d3fb41437d6cb4952e14a8138f31e61f570e6 | |
| parent | 28cb8f65b9209d5bd16a29245f92a14363b75fbb (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.cpp | 26 | ||||
| -rw-r--r-- | tests/auto/quickcontrols/accessibility/data/item.qml | 52 | ||||
| -rw-r--r-- | tests/auto/quickcontrols/accessibility/tst_accessibility.cpp | 51 |
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" |
