aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates/qquicktextfield.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-10-20 12:41:55 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-10-21 15:33:51 +0000
commitbc546e14688c7056ac36b6f478fde852b5afaf46 (patch)
tree75cf4ed7146a362b11a9531d5314f03d738a3a96 /src/templates/qquicktextfield.cpp
parent8e1df766cf9e74661b50de4f4ed489af5b4edfc8 (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.cpp65
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