diff options
author | Vladimir Belyavsky <belyavskyv@gmail.com> | 2023-10-23 16:02:08 +0300 |
---|---|---|
committer | Vladimir Belyavsky <belyavskyv@gmail.com> | 2023-11-01 13:45:05 +0000 |
commit | 12517742fcbd40b2311b94abe840532eae3d8914 (patch) | |
tree | d8f7b81e5e20e90b0a79ef464498141b0d07d522 /src/quick/items/qquicktextedit.cpp | |
parent | 1c39eddbde185c2ef28c81366ecd556e83dddcf6 (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.cpp | 35 |
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 |