diff options
author | Harald Sitter <sitter@kde.org> | 2022-11-28 14:59:33 +0100 |
---|---|---|
committer | Harald Sitter <sitter@kde.org> | 2022-12-03 12:45:13 +0100 |
commit | 20fd2902a6d7bdb4a3306005d2718ca5a8fef96d (patch) | |
tree | 198380461c9fa5e029f54d0e6e56a5e8ff34b0c7 | |
parent | 665db9b9aab765dfdda129202b3b4d085b4a89b6 (diff) |
a11y: track item enabled state
disabled items are neither enabled nor focusable
Change-Id: I4f286c7b85605d5ad6fa787d1f5cfcce1297d268
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
-rw-r--r-- | src/quick/accessible/qaccessiblequickitem.cpp | 4 | ||||
-rw-r--r-- | src/quick/items/qquickitem.cpp | 9 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/quick/accessible/qaccessiblequickitem.cpp b/src/quick/accessible/qaccessiblequickitem.cpp index c47a94e3aa..4a446e468d 100644 --- a/src/quick/accessible/qaccessiblequickitem.cpp +++ b/src/quick/accessible/qaccessiblequickitem.cpp @@ -441,6 +441,10 @@ QAccessible::State QAccessibleQuickItem::state() const if (role() == QAccessible::EditableText) if (auto ti = qobject_cast<QQuickTextInput *>(item())) state.passwordEdit = ti->echoMode() != QQuickTextInput::Normal; + if (!item()->isEnabled()) { + state.focusable = false; + state.disabled = true; + } return state; } diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 5f86139566..32009939df 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -6502,6 +6502,15 @@ void QQuickItemPrivate::setEffectiveEnableRecur(QQuickItem *scope, bool newEffec } itemChange(QQuickItem::ItemEnabledHasChanged, bool(effectiveEnable)); +#if QT_CONFIG(accessibility) + if (isAccessible) { + QAccessible::State changedState; + changedState.disabled = true; + changedState.focusable = true; + QAccessibleStateChangeEvent ev(q, changedState); + QAccessible::updateAccessibility(&ev); + } +#endif emit q->enabledChanged(); } |