diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-02-24 13:59:19 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-02-25 08:21:32 +0000 |
commit | 609a658da0b9a73bbdcd9cfab8acd8f2b7329daf (patch) | |
tree | 51635f9ad91ede08c9168b8fbb6186617fcf6eb4 /src/templates | |
parent | 22624517ccbe780937ec2ba0b4264b71e38484bb (diff) |
Implement accessibility support for Popup and Menu
Change-Id: I55067bb1cb9888be8e0e991fb73c9365d93d04f4
Task-number: QTBUG-51316
Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
Diffstat (limited to 'src/templates')
-rw-r--r-- | src/templates/qquickcontrol.cpp | 13 | ||||
-rw-r--r-- | src/templates/qquickmenu.cpp | 7 | ||||
-rw-r--r-- | src/templates/qquickmenu_p.h | 5 | ||||
-rw-r--r-- | src/templates/qquickpopup.cpp | 15 | ||||
-rw-r--r-- | src/templates/qquickpopup_p.h | 8 | ||||
-rw-r--r-- | src/templates/qquickpopup_p_p.h | 4 |
6 files changed, 48 insertions, 4 deletions
diff --git a/src/templates/qquickcontrol.cpp b/src/templates/qquickcontrol.cpp index 5636d84f..0e14bc37 100644 --- a/src/templates/qquickcontrol.cpp +++ b/src/templates/qquickcontrol.cpp @@ -199,10 +199,15 @@ void QQuickControl::accessibilityActiveChanged(bool active) return; d->accessibleAttached = qobject_cast<QQuickAccessibleAttached *>(qmlAttachedPropertiesObject<QQuickAccessibleAttached>(this, true)); - if (d->accessibleAttached) - d->accessibleAttached->setRole(accessibleRole()); - else - qWarning() << "QQuickControl: " << this << " QQuickAccessibleAttached object creation failed!"; + + // QQuickControl relies on the existence of a QQuickAccessibleAttached object. + // However, qmlAttachedPropertiesObject(create=true) creates an instance only + // for items that have been created by a QML engine. Therefore we create the + // object by hand for items created in C++ (QQuickPopupItem, for instance). + if (!d->accessibleAttached) + d->accessibleAttached = new QQuickAccessibleAttached(this); + + d->accessibleAttached->setRole(accessibleRole()); } #endif diff --git a/src/templates/qquickmenu.cpp b/src/templates/qquickmenu.cpp index b61985d5..0ea0caba 100644 --- a/src/templates/qquickmenu.cpp +++ b/src/templates/qquickmenu.cpp @@ -518,6 +518,13 @@ bool QQuickMenu::eventFilter(QObject *object, QEvent *event) return QQuickPopup::eventFilter(object, event); } +#ifndef QT_NO_ACCESSIBILITY +QAccessible::Role QQuickMenu::accessibleRole() const +{ + return QAccessible::PopupMenu; +} +#endif // QT_NO_ACCESSIBILITY + QT_END_NAMESPACE #include "moc_qquickmenu_p.cpp" diff --git a/src/templates/qquickmenu_p.h b/src/templates/qquickmenu_p.h index 065ee1d7..b70ca49f 100644 --- a/src/templates/qquickmenu_p.h +++ b/src/templates/qquickmenu_p.h @@ -89,6 +89,11 @@ protected: Q_SIGNALS: void titleChanged(); +protected: +#ifndef QT_NO_ACCESSIBILITY + QAccessible::Role accessibleRole() const Q_DECL_OVERRIDE; +#endif // QT_NO_ACCESSIBILITY + private: Q_DISABLE_COPY(QQuickMenu) Q_DECLARE_PRIVATE(QQuickMenu) diff --git a/src/templates/qquickpopup.cpp b/src/templates/qquickpopup.cpp index 0a9d9499..7ac0369f 100644 --- a/src/templates/qquickpopup.cpp +++ b/src/templates/qquickpopup.cpp @@ -367,6 +367,14 @@ void QQuickPopupItem::paddingChange(const QMarginsF &newPadding, const QMarginsF d->popup->paddingChange(newPadding, oldPadding); } +#ifndef QT_NO_ACCESSIBILITY +QAccessible::Role QQuickPopupItem::accessibleRole() const +{ + Q_D(const QQuickPopupItem); + return d->popup->accessibleRole(); +} +#endif // QT_NO_ACCESSIBILITY + QQuickPopupPositioner::QQuickPopupPositioner(QQuickPopupPrivate *popup) : m_x(0), m_y(0), @@ -1648,6 +1656,13 @@ void QQuickPopup::paddingChange(const QMarginsF &newPadding, const QMarginsF &ol emit availableHeightChanged(); } +#ifndef QT_NO_ACCESSIBILITY +QAccessible::Role QQuickPopup::accessibleRole() const +{ + return QAccessible::LayeredPane; +} +#endif // QT_NO_ACCESSIBILITY + QT_END_NAMESPACE #include "moc_qquickpopup_p.cpp" diff --git a/src/templates/qquickpopup_p.h b/src/templates/qquickpopup_p.h index eb52882c..b818ea7f 100644 --- a/src/templates/qquickpopup_p.h +++ b/src/templates/qquickpopup_p.h @@ -56,6 +56,10 @@ #include <QtQml/qqmllist.h> #include <QtQml/qqmlparserstatus.h> +#ifndef QT_NO_ACCESSIBILITY +#include <QtGui/qaccessible.h> +#endif + QT_BEGIN_NAMESPACE class QQuickItem; @@ -317,6 +321,10 @@ protected: virtual void marginsChange(const QMarginsF &newMargins, const QMarginsF &oldMargins); virtual void paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding); +#ifndef QT_NO_ACCESSIBILITY + virtual QAccessible::Role accessibleRole() const; +#endif + private: Q_DISABLE_COPY(QQuickPopup) Q_DECLARE_PRIVATE(QQuickPopup) diff --git a/src/templates/qquickpopup_p_p.h b/src/templates/qquickpopup_p_p.h index 45dd7fd9..017949cd 100644 --- a/src/templates/qquickpopup_p_p.h +++ b/src/templates/qquickpopup_p_p.h @@ -108,6 +108,10 @@ protected: void itemChange(ItemChange change, const ItemChangeData &data) Q_DECL_OVERRIDE; void paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding) Q_DECL_OVERRIDE; +#ifndef QT_NO_ACCESSIBILITY + QAccessible::Role accessibleRole() const Q_DECL_OVERRIDE; +#endif + private: Q_DECLARE_PRIVATE(QQuickPopupItem) }; |