aboutsummaryrefslogtreecommitdiffstats
path: root/src/qtquick1/graphicsitems/qdeclarativeitem.cpp
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@nokia.com>2011-12-07 07:48:22 +0100
committerQt by Nokia <qt-info@nokia.com>2012-01-02 15:33:52 +0100
commit27a497b3a7581a0cd76407635afca91d1f42aeef (patch)
treee4b65e5dcfc9a5be6053c24ec06d56fb82fe4c0d /src/qtquick1/graphicsitems/qdeclarativeitem.cpp
parent017a82c6702768aed68c34f319fa14da591f3df2 (diff)
Add accessibility to qml
This consists of two parts: An attached property for QML items and a plugin for the accessibility framework. The attached property simply takes care of some properties (name, role) that are needed in order to expose semantics of the application to assistive tools. The plugin exposes the hierarchy of QML items to the accessibility framework. Change-Id: I32f5603d0d9549b01b3645b205b710b9801762f7 Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
Diffstat (limited to 'src/qtquick1/graphicsitems/qdeclarativeitem.cpp')
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeitem.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/qtquick1/graphicsitems/qdeclarativeitem.cpp b/src/qtquick1/graphicsitems/qdeclarativeitem.cpp
index 1f57d53b7e..016dc94408 100644
--- a/src/qtquick1/graphicsitems/qdeclarativeitem.cpp
+++ b/src/qtquick1/graphicsitems/qdeclarativeitem.cpp
@@ -53,6 +53,8 @@
#include <QtQuick1/private/qdeclarativestategroup_p.h>
#include <QtDeclarative/qdeclarativecomponent.h>
#include <QtDeclarative/qdeclarativeinfo.h>
+// ### Due to the workaround mentioned in accessibleRole()
+#include <QtQuick1/private/qdeclarativetext_p.h>
#include <QDebug>
#include <QPen>
@@ -64,6 +66,8 @@
#include <private/qv8engine_p.h>
#include <QtWidgets/qgraphicstransform.h>
#include <private/qlistmodelinterface_p.h>
+#include <QAccessible>
+#include <QtQuick1/private/qdeclarativeaccessibleattached_p.h>
#include <float.h>
@@ -1779,7 +1783,11 @@ QDeclarativeItem::~QDeclarativeItem()
*/
void QDeclarativeItem::setParentItem(QDeclarativeItem *parent)
{
+ Q_D(QDeclarativeItem);
QGraphicsObject::setParentItem(parent);
+ if (d->isAccessible && parentItem()) {
+ parentItem()->d_func()->setAccessibleFlagAndListener();
+ }
}
/*!
@@ -3022,6 +3030,25 @@ QDeclarativeItemPrivate::AnchorLines::AnchorLines(QGraphicsObject *q)
baseline.anchorLine = QDeclarative1AnchorLine::Baseline;
}
+void QDeclarativeItemPrivate::setAccessibleFlagAndListener()
+{
+ Q_Q(QDeclarativeItem);
+ QDeclarativeItem *item = q;
+ while (item) {
+ if (item->d_func()->isAccessible)
+ break; // already set - grandparents should have the flag set as well.
+
+// if (qmlEngine(item) != 0) {
+// item->d_func()->addItemChangeListener(QDeclarativeEnginePrivate::getAccessibilityUpdateManager(qmlEngine(item)),
+// QDeclarativeItemPrivate::Geometry | QDeclarativeItemPrivate::Visibility |
+// QDeclarativeItemPrivate::Opacity | QDeclarativeItemPrivate::Destroyed);
+// }
+
+ item->d_func()->isAccessible = true;
+ item = item->parentItem();
+ }
+}
+
QPointF QDeclarativeItemPrivate::computeTransformOrigin() const
{
Q_Q(const QDeclarativeItem);