From 753ebd5ba02d2f3e7286f69626d8415f52b775fc Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Thu, 3 Dec 2015 10:53:06 +0100 Subject: Respond with a sound for certain message boxes on windows This was a regression (it worked in 4.8) that was probably introduced by the refactoring of the accessibility framework in Qt 5. Now, QPlatformAccessibility::notifyAccessibilityUpdate() is called regardless of isActive(), so its the responsibility of each implementation of notifyAccessibilityUpdate() to check for isActive() where it matters. Task-number: QTBUG-33303 Change-Id: I0d18f8c1890ef679460408b05e704712b886bf7c Reviewed-by: Friedemann Kleint Reviewed-by: Andy Shaw --- src/gui/accessible/qaccessible.cpp | 21 ++++++++++----------- src/platformsupport/linuxaccessibility/bridge.cpp | 2 +- src/plugins/platforms/cocoa/qcocoaaccessibility.mm | 2 ++ .../platforms/ios/qiosplatformaccessibility.mm | 2 ++ .../windows/accessible/qwindowsaccessibility.cpp | 2 +- 5 files changed, 16 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp index e9995045b1..1a8d263f94 100644 --- a/src/gui/accessible/qaccessible.cpp +++ b/src/gui/accessible/qaccessible.cpp @@ -852,18 +852,17 @@ void QAccessible::updateAccessibility(QAccessibleEvent *event) // during construction of widgets. If you see cases where the // cache seems wrong, this call is "to blame", but the code that // caches dynamic data should be updated to handle change events. - if (!isActive() || !event->accessibleInterface()) - return; - - if (event->type() == QAccessible::TableModelChanged) { - QAccessibleInterface *iface = event->accessibleInterface(); - if (iface && iface->tableInterface()) - iface->tableInterface()->modelChange(static_cast(event)); - } + QAccessibleInterface *iface = event->accessibleInterface(); + if (isActive() && iface) { + if (event->type() == QAccessible::TableModelChanged) { + if (iface->tableInterface()) + iface->tableInterface()->modelChange(static_cast(event)); + } - if (updateHandler) { - updateHandler(event); - return; + if (updateHandler) { + updateHandler(event); + return; + } } if (QPlatformAccessibility *pfAccessibility = platformAccessibility()) diff --git a/src/platformsupport/linuxaccessibility/bridge.cpp b/src/platformsupport/linuxaccessibility/bridge.cpp index 55ef7161d1..bd02b032f9 100644 --- a/src/platformsupport/linuxaccessibility/bridge.cpp +++ b/src/platformsupport/linuxaccessibility/bridge.cpp @@ -99,7 +99,7 @@ void QSpiAccessibleBridge::notifyAccessibilityUpdate(QAccessibleEvent *event) { if (!dbusAdaptor) return; - if (isActive()) + if (isActive() && event->accessibleInterface()) dbusAdaptor->notify(event); } diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm index 4e901ba015..723c341e59 100644 --- a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm +++ b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm @@ -51,6 +51,8 @@ QCocoaAccessibility::~QCocoaAccessibility() void QCocoaAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event) { + if (!isActive() || !event->accessibleInterface()) + return; QMacAccessibilityElement *element = [QMacAccessibilityElement elementWithId: event->uniqueId()]; if (!element) { qWarning() << "QCocoaAccessibility::notifyAccessibilityUpdate: invalid element"; diff --git a/src/plugins/platforms/ios/qiosplatformaccessibility.mm b/src/plugins/platforms/ios/qiosplatformaccessibility.mm index bfe91df7bd..d8d366a4f4 100644 --- a/src/plugins/platforms/ios/qiosplatformaccessibility.mm +++ b/src/plugins/platforms/ios/qiosplatformaccessibility.mm @@ -66,6 +66,8 @@ void invalidateCache(QAccessibleInterface *iface) void QIOSPlatformAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event) { + if (!isActive() || !event->accessibleInterface()) + return; switch (event->type()) { case QAccessible::ObjectCreated: case QAccessible::ObjectShow: diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp index 0bf3c27350..7015424f47 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp @@ -151,7 +151,7 @@ void QWindowsAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event) // An event has to be associated with a window, // so find the first parent that is a widget and that has a WId QAccessibleInterface *iface = event->accessibleInterface(); - if (!iface || !iface->isValid()) + if (!isActive() || !iface || !iface->isValid()) return; QWindow *window = QWindowsAccessibility::windowHelper(iface); -- cgit v1.2.3