aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-02-24 13:59:19 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-02-25 08:21:32 +0000
commit609a658da0b9a73bbdcd9cfab8acd8f2b7329daf (patch)
tree51635f9ad91ede08c9168b8fbb6186617fcf6eb4 /src/templates
parent22624517ccbe780937ec2ba0b4264b71e38484bb (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.cpp13
-rw-r--r--src/templates/qquickmenu.cpp7
-rw-r--r--src/templates/qquickmenu_p.h5
-rw-r--r--src/templates/qquickpopup.cpp15
-rw-r--r--src/templates/qquickpopup_p.h8
-rw-r--r--src/templates/qquickpopup_p_p.h4
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)
};