aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquicktextedit.cpp
diff options
context:
space:
mode:
authorVladimir Belyavsky <belyavskyv@gmail.com>2023-10-23 16:02:08 +0300
committerVladimir Belyavsky <belyavskyv@gmail.com>2023-11-01 13:45:05 +0000
commit12517742fcbd40b2311b94abe840532eae3d8914 (patch)
treed8f7b81e5e20e90b0a79ef464498141b0d07d522 /src/quick/items/qquicktextedit.cpp
parent1c39eddbde185c2ef28c81366ecd556e83dddcf6 (diff)
QQuickTextArea: move accessibility handling into base QQuickTextEdit class
Move accessibility handling from QQuickTextArea into base QQuickTextEdit class. This fixes an issue where the virtual keyboard does not appear automatically when TextEdit initially gets focus on a Windows touch device such as the MS Surface Pro X. Fixes: QTBUG-108449 Pick-to: 6.6 Change-Id: I37e0d197d4af04c832dfb5651bade9d39e079f2b Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src/quick/items/qquicktextedit.cpp')
-rw-r--r--src/quick/items/qquicktextedit.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index 223d3650d3..7870e89538 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -23,6 +23,10 @@
#include <private/qtextengine_p.h>
#include <private/qsgadaptationlayer_p.h>
+#if QT_CONFIG(accessibility)
+#include <private/qquickaccessibleattached_p.h>
+#endif
+
#include "qquicktextdocument.h"
#include <algorithm>
@@ -844,6 +848,25 @@ Qt::InputMethodHints QQuickTextEditPrivate::effectiveInputMethodHints() const
}
#endif
+#if QT_CONFIG(accessibility)
+void QQuickTextEditPrivate::accessibilityActiveChanged(bool active)
+{
+ if (!active)
+ return;
+
+ Q_Q(QQuickTextEdit);
+ QQuickAccessibleAttached *accessibleAttached = qobject_cast<QQuickAccessibleAttached *>(qmlAttachedPropertiesObject<QQuickAccessibleAttached>(q, true));
+ Q_ASSERT(accessibleAttached);
+ accessibleAttached->setRole(effectiveAccessibleRole());
+ accessibleAttached->set_readOnly(q->isReadOnly());
+}
+
+QAccessible::Role QQuickTextEditPrivate::accessibleRole() const
+{
+ return QAccessible::EditableText;
+}
+#endif
+
void QQuickTextEditPrivate::setTopPadding(qreal value, bool reset)
{
Q_Q(QQuickTextEdit);
@@ -1537,6 +1560,11 @@ void QQuickTextEdit::componentComplete()
if (d->cursorComponent && isCursorVisible())
QQuickTextUtil::createCursor(d);
polish();
+
+#if QT_CONFIG(accessibility)
+ if (QAccessible::isActive())
+ d->accessibilityActiveChanged(true);
+#endif
}
/*!
@@ -1694,6 +1722,13 @@ void QQuickTextEdit::setReadOnly(bool r)
} else if (hasActiveFocus()) {
setCursorVisible(true);
}
+
+#if QT_CONFIG(accessibility)
+ if (QAccessible::isActive()) {
+ if (QQuickAccessibleAttached *accessibleAttached = QQuickAccessibleAttached::attachedProperties(this))
+ accessibleAttached->set_readOnly(r);
+ }
+#endif
}
bool QQuickTextEdit::isReadOnly() const