faff1df
From 5ed173f4ba070bca6c9ec3335b84cc322885b01d Mon Sep 17 00:00:00 2001
faff1df
From: Harald Sitter <sitter@kde.org>
faff1df
Date: Mon, 28 Nov 2022 14:59:33 +0100
faff1df
Subject: [PATCH 12/19] a11y: track item enabled state
faff1df
MIME-Version: 1.0
faff1df
Content-Type: text/plain; charset=UTF-8
faff1df
Content-Transfer-Encoding: 8bit
faff1df
faff1df
disabled items are neither enabled nor focusable
faff1df
faff1df
Change-Id: I4f286c7b85605d5ad6fa787d1f5cfcce1297d268
faff1df
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
faff1df
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
faff1df
(cherry picked from commit 20fd2902a6d7bdb4a3306005d2718ca5a8fef96d)
faff1df
---
faff1df
 src/quick/accessible/qaccessiblequickitem.cpp | 4 ++++
faff1df
 src/quick/items/qquickitem.cpp                | 9 +++++++++
faff1df
 2 files changed, 13 insertions(+)
faff1df
faff1df
diff --git a/src/quick/accessible/qaccessiblequickitem.cpp b/src/quick/accessible/qaccessiblequickitem.cpp
faff1df
index 0692ce634d..a8df58d450 100644
faff1df
--- a/src/quick/accessible/qaccessiblequickitem.cpp
faff1df
+++ b/src/quick/accessible/qaccessiblequickitem.cpp
faff1df
@@ -215,6 +215,10 @@ QAccessible::State QAccessibleQuickItem::state() const
faff1df
     if (role() == QAccessible::EditableText)
faff1df
         if (auto ti = qobject_cast<QQuickTextInput *>(item()))
faff1df
             state.passwordEdit = ti->echoMode() != QQuickTextInput::Normal;
faff1df
+    if (!item()->isEnabled()) {
faff1df
+        state.focusable = false;
faff1df
+        state.disabled = true;
faff1df
+    }
faff1df
     return state;
faff1df
 }
faff1df
 
faff1df
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
faff1df
index 5ee2a440a3..c370d6e5c3 100644
faff1df
--- a/src/quick/items/qquickitem.cpp
faff1df
+++ b/src/quick/items/qquickitem.cpp
faff1df
@@ -6174,6 +6174,15 @@ void QQuickItemPrivate::setEffectiveEnableRecur(QQuickItem *scope, bool newEffec
faff1df
     }
faff1df
 
faff1df
     itemChange(QQuickItem::ItemEnabledHasChanged, effectiveEnable);
faff1df
+#if QT_CONFIG(accessibility)
faff1df
+    if (isAccessible) {
faff1df
+        QAccessible::State changedState;
faff1df
+        changedState.disabled = true;
faff1df
+        changedState.focusable = true;
faff1df
+        QAccessibleStateChangeEvent ev(q, changedState);
faff1df
+        QAccessible::updateAccessibility(&ev;;
faff1df
+    }
faff1df
+#endif
faff1df
     emit q->enabledChanged();
faff1df
 }
faff1df
 
faff1df
-- 
faff1df
2.40.0
faff1df