diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-08-04 17:48:42 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-08-11 13:16:51 +0200 |
commit | 9ba3145f797f09e69a07fb265cda257c56cf72ba (patch) | |
tree | 4312bb53408bbe518b584fe8148c5b647654294f /src/gui/accessible | |
parent | 9d19be599485a958c555498d9e513999c1e7e448 (diff) |
Add QAccessible::ActivationObserver
Makes it possible to follow changes in activation an deactivation of a11y.
Needed for WebEngine to know when to activate a11y.
Change-Id: Ia264a76974224d1baad3e88c34a4b8a9f1a3695d
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Diffstat (limited to 'src/gui/accessible')
-rw-r--r-- | src/gui/accessible/qaccessible.cpp | 52 | ||||
-rw-r--r-- | src/gui/accessible/qaccessible.h | 10 | ||||
-rw-r--r-- | src/gui/accessible/qplatformaccessibility.cpp | 6 | ||||
-rw-r--r-- | src/gui/accessible/qplatformaccessibility.h | 2 |
4 files changed, 68 insertions, 2 deletions
diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp index 3398fa0cb8..7584e23f2e 100644 --- a/src/gui/accessible/qaccessible.cpp +++ b/src/gui/accessible/qaccessible.cpp @@ -465,9 +465,11 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, #endif #endif +// FIXME turn this into one global static struct Q_GLOBAL_STATIC(QList<QAccessible::InterfaceFactory>, qAccessibleFactories) typedef QHash<QString, QAccessiblePlugin*> QAccessiblePluginsHash; -Q_GLOBAL_STATIC(QAccessiblePluginsHash, qAccessiblePlugins); +Q_GLOBAL_STATIC(QAccessiblePluginsHash, qAccessiblePlugins) +Q_GLOBAL_STATIC(QList<QAccessible::ActivationObserver *>, qAccessibleActivationObservers) QAccessible::UpdateHandler QAccessible::updateHandler = 0; QAccessible::RootObjectHandler QAccessible::rootObjectHandler = 0; @@ -504,6 +506,7 @@ void QAccessible::cleanup() static void qAccessibleCleanup() { + qAccessibleActivationObservers()->clear(); qAccessibleFactories()->clear(); } @@ -604,6 +607,44 @@ QAccessible::RootObjectHandler QAccessible::installRootObjectHandler(RootObjectH } /*! + \class QAccessible::ActivationObserver + \internal + + Interface to listen to activation or deactivation of the accessibility framework. + \sa installActivationObserver() +*/ + +/*! + \internal + + Install \a observer to get notified of activation or deactivation (global accessibility has been enabled or disabled). +*/ +void QAccessible::installActivationObserver(QAccessible::ActivationObserver *observer) +{ + if (!observer) + return; + + if (!cleanupAdded) { + qAddPostRoutine(qAccessibleCleanup); + cleanupAdded = true; + } + if (qAccessibleActivationObservers()->contains(observer)) + return; + qAccessibleActivationObservers()->append(observer); +} + +/*! + \internal + + Remove an \a observer to no longer get notified of state changes. + \sa installActivationObserver() +*/ +void QAccessible::removeActivationObserver(ActivationObserver *observer) +{ + qAccessibleActivationObservers()->removeAll(observer); +} + +/*! If a QAccessibleInterface implementation exists for the given \a object, this function returns a pointer to the implementation; otherwise it returns 0. @@ -756,6 +797,15 @@ bool QAccessible::isActive() return false; } +/*! + \internal +*/ +void QAccessible::setActive(bool active) +{ + for (int i = 0; i < qAccessibleActivationObservers()->count() ;++i) + qAccessibleActivationObservers()->at(i)->accessibilityActiveChanged(active); +} + /*! Sets the root object of the accessible objects of this application diff --git a/src/gui/accessible/qaccessible.h b/src/gui/accessible/qaccessible.h index 2da7cf62bf..d940713a35 100644 --- a/src/gui/accessible/qaccessible.h +++ b/src/gui/accessible/qaccessible.h @@ -352,6 +352,15 @@ public: static UpdateHandler installUpdateHandler(UpdateHandler); static RootObjectHandler installRootObjectHandler(RootObjectHandler); + class ActivationObserver + { + public: + virtual ~ActivationObserver() {} + virtual void accessibilityActiveChanged(bool active) = 0; + }; + static void installActivationObserver(ActivationObserver *); + static void removeActivationObserver(ActivationObserver *); + static QAccessibleInterface *queryAccessibleInterface(QObject *); static Id uniqueId(QAccessibleInterface *iface); static QAccessibleInterface *accessibleInterface(Id uniqueId); @@ -365,6 +374,7 @@ public: static void updateAccessibility(QAccessibleEvent *event); static bool isActive(); + static void setActive(bool active); static void setRootObject(QObject *object); static void cleanup(); diff --git a/src/gui/accessible/qplatformaccessibility.cpp b/src/gui/accessible/qplatformaccessibility.cpp index 1e5f8928ad..36da5ed8b7 100644 --- a/src/gui/accessible/qplatformaccessibility.cpp +++ b/src/gui/accessible/qplatformaccessibility.cpp @@ -139,6 +139,12 @@ void QPlatformAccessibility::cleanup() qDeleteAll(*bridges()); } +void QPlatformAccessibility::setActive(bool active) +{ + m_active = active; + QAccessible::setActive(active); +} + #endif // QT_NO_ACCESSIBILITY QT_END_NAMESPACE diff --git a/src/gui/accessible/qplatformaccessibility.h b/src/gui/accessible/qplatformaccessibility.h index 6b8056918d..5f809519bc 100644 --- a/src/gui/accessible/qplatformaccessibility.h +++ b/src/gui/accessible/qplatformaccessibility.h @@ -70,7 +70,7 @@ public: virtual void cleanup(); inline bool isActive() const { return m_active; } - inline void setActive(bool active) { m_active = active; } + void setActive(bool active); private: bool m_active; |