diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-10-20 12:41:55 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-10-21 15:33:51 +0000 |
commit | bc546e14688c7056ac36b6f478fde852b5afaf46 (patch) | |
tree | 75cf4ed7146a362b11a9531d5314f03d738a3a96 /src/templates/qquicktextfield.cpp | |
parent | 8e1df766cf9e74661b50de4f4ed489af5b4edfc8 (diff) |
QQuickControl: dynamically create a11y attached object
Using QAccessible::ActivationObserver approach.
Change-Id: Ib99c1f9b7b0c37a3e8a4747db265c9df77acc1f8
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/templates/qquicktextfield.cpp')
-rw-r--r-- | src/templates/qquicktextfield.cpp | 65 |
1 files changed, 45 insertions, 20 deletions
diff --git a/src/templates/qquicktextfield.cpp b/src/templates/qquicktextfield.cpp index 945502c9..61cac6c4 100644 --- a/src/templates/qquicktextfield.cpp +++ b/src/templates/qquicktextfield.cpp @@ -88,6 +88,24 @@ QT_BEGIN_NAMESPACE position of the press, and which button is pressed. */ +QQuickTextFieldPrivate::QQuickTextFieldPrivate() + : background(Q_NULLPTR) + , placeholder(Q_NULLPTR) + , accessibleAttached(Q_NULLPTR) + , m_accessibleRole(0x0000002A) // Accessible.EditableText +{ +#ifndef QT_NO_ACCESSIBILITY + QAccessible::installActivationObserver(this); +#endif +} + +QQuickTextFieldPrivate::~QQuickTextFieldPrivate() +{ +#ifndef QT_NO_ACCESSIBILITY + QAccessible::removeActivationObserver(this); +#endif +} + void QQuickTextFieldPrivate::resizeBackground() { Q_Q(QQuickTextField); @@ -169,9 +187,8 @@ void QQuickTextFieldPrivate::resolveFont() void QQuickTextFieldPrivate::_q_readOnlyChanged(bool isReadOnly) { #ifndef QT_NO_ACCESSIBILITY - Q_Q(QQuickTextField); if (accessibleAttached) - QQuickAccessibleAttached::setProperty(q, "readOnly", isReadOnly); + accessibleAttached->set_readOnly(isReadOnly); #else Q_UNUSED(isReadOnly) #endif @@ -190,15 +207,38 @@ void QQuickTextFieldPrivate::_q_placeholderTextChanged(const QString &text) void QQuickTextFieldPrivate::_q_echoModeChanged(QQuickTextField::EchoMode echoMode) { #ifndef QT_NO_ACCESSIBILITY - Q_Q(QQuickTextField); if (accessibleAttached) - QQuickAccessibleAttached::setProperty(q, "passwordEdit", - (echoMode == QQuickTextField::Password || echoMode == QQuickTextField::PasswordEchoOnEdit) ? true : false); + accessibleAttached->set_passwordEdit((echoMode == QQuickTextField::Password || echoMode == QQuickTextField::PasswordEchoOnEdit) ? true : false); #else Q_UNUSED(echoMode) #endif } +#ifndef QT_NO_ACCESSIBILITY +void QQuickTextFieldPrivate::accessibilityActiveChanged(bool active) +{ + if (accessibleAttached || !active) + return; + + Q_Q(QQuickTextField); + accessibleAttached = qobject_cast<QQuickAccessibleAttached *>(qmlAttachedPropertiesObject<QQuickAccessibleAttached>(q, true)); + if (accessibleAttached) { + accessibleAttached->setRole((QAccessible::Role)m_accessibleRole); + accessibleAttached->set_readOnly(m_readOnly); + accessibleAttached->set_passwordEdit((m_echoMode == QQuickTextField::Password || m_echoMode == QQuickTextField::PasswordEchoOnEdit) ? true : false); + if (placeholder) + accessibleAttached->setDescription(placeholder->text()); + } else { + qWarning() << "QQuickTextField: " << q << " QQuickAccessibleAttached object creation failed!"; + } +} + +QAccessible::Role QQuickTextFieldPrivate::accessibleRole() const +{ + return QAccessible::Role(m_accessibleRole); +} +#endif + QFont QQuickTextField::font() const { return QQuickTextInput::font(); @@ -367,19 +407,4 @@ void QQuickTextField::timerEvent(QTimerEvent *event) } } -void QQuickTextField::classBegin() -{ - QQuickTextInput::classBegin(); -#ifndef QT_NO_ACCESSIBILITY - Q_D(QQuickTextField); - d->accessibleAttached = qobject_cast<QQuickAccessibleAttached *>(qmlAttachedPropertiesObject<QQuickAccessibleAttached>(this, true)); - if (d->accessibleAttached) { - d->accessibleAttached->setRole((QAccessible::Role)(0x0000002A)); // Accessible.EditableText - QQuickAccessibleAttached::setProperty(this, "multiLine", true); - } else { - qWarning() << "QQuickTextField: QQuickAccessibleAttached object creation failed!"; - } -#endif -} - QT_END_NAMESPACE |