diff options
author | Liang Qi <liang.qi@qt.io> | 2017-02-08 15:48:29 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-02-08 15:49:18 +0100 |
commit | dd756011da13b95fdb630a1bbb90234f1e60f415 (patch) | |
tree | a6259b1e9b6463108796ce912e3d1752e301505f /src/plugins/platforms | |
parent | 0c50edbe84914469973a3b10e0170023ccdd66fe (diff) | |
parent | b6bf2a33f4c33a212da7b58a049b3b5b20b3f327 (diff) |
Merge remote-tracking branch 'origin/5.8' into 5.9
Conflicts:
configure.json
mkspecs/win32-icc/qmake.conf
Change-Id: Ibf40546b024d644c7d9ed490bee15b82597f4d3f
Diffstat (limited to 'src/plugins/platforms')
3 files changed, 13 insertions, 8 deletions
diff --git a/src/plugins/platforms/android/qandroideventdispatcher.cpp b/src/plugins/platforms/android/qandroideventdispatcher.cpp index 104e905b8f..e12551283f 100644 --- a/src/plugins/platforms/android/qandroideventdispatcher.cpp +++ b/src/plugins/platforms/android/qandroideventdispatcher.cpp @@ -108,10 +108,9 @@ QAndroidEventDispatcherStopper *QAndroidEventDispatcherStopper::instance() void QAndroidEventDispatcherStopper::startAll() { QMutexLocker lock(&m_mutex); - if (started) + if (!m_started.testAndSetOrdered(0, 1)) return; - started = true; for (QAndroidEventDispatcher *d : qAsConst(m_dispatchers)) d->start(); } @@ -119,10 +118,9 @@ void QAndroidEventDispatcherStopper::startAll() void QAndroidEventDispatcherStopper::stopAll() { QMutexLocker lock(&m_mutex); - if (!started) + if (!m_started.testAndSetOrdered(1, 0)) return; - started = false; for (QAndroidEventDispatcher *d : qAsConst(m_dispatchers)) d->stop(); } diff --git a/src/plugins/platforms/android/qandroideventdispatcher.h b/src/plugins/platforms/android/qandroideventdispatcher.h index 057a1660c9..e6f903bced 100644 --- a/src/plugins/platforms/android/qandroideventdispatcher.h +++ b/src/plugins/platforms/android/qandroideventdispatcher.h @@ -68,7 +68,7 @@ class QAndroidEventDispatcherStopper { public: static QAndroidEventDispatcherStopper *instance(); - static bool stopped() {return !instance()->started; } + static bool stopped() {return !instance()->m_started.load(); } void startAll(); void stopAll(); void addEventDispatcher(QAndroidEventDispatcher *dispatcher); @@ -77,7 +77,7 @@ public: private: QMutex m_mutex; - bool started = true; + QAtomicInt m_started = 1; QVector<QAndroidEventDispatcher *> m_dispatchers; }; diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm index e743dd56bf..6001a845e8 100644 --- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm +++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm @@ -235,9 +235,16 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of if (!iface || !iface->isValid()) return nil; + // macOS expects that the hierarchy is: + // App -> Window -> Children + // We don't actually have the window reflected properly in QAccessibility. + // Check if the parent is the application and then instead return the native window. + if (QAccessibleInterface *parent = iface->parent()) { - QAccessible::Id parentId = QAccessible::uniqueId(parent); - return [QMacAccessibilityElement elementWithId: parentId]; + if (parent->role() != QAccessible::Application) { + QAccessible::Id parentId = QAccessible::uniqueId(parent); + return [QMacAccessibilityElement elementWithId: parentId]; + } } if (QWindow *window = iface->window()) { |