Merge pull request #7611 from electron/only-enable-msaa-if-needed

Check harder before enabling Accessibility support on Win32
This commit is contained in:
Kevin Sawicki 2016-10-14 12:46:32 -07:00 committed by GitHub
commit 3dd8377218
4 changed files with 23 additions and 11 deletions

View file

@ -138,7 +138,7 @@ NativeWindowViews::NativeWindowViews(
menu_bar_visible_(false),
menu_bar_alt_pressed_(false),
#if defined(OS_WIN)
enabled_a11y_support_(false),
checked_for_a11y_support_(false),
thick_frame_(true),
#endif
keyboard_event_handler_(new views::UnhandledKeyboardEventHandler),

View file

@ -18,6 +18,8 @@
#include "atom/browser/ui/win/message_handler_delegate.h"
#include "atom/browser/ui/win/taskbar_host.h"
#include "base/win/scoped_gdi_object.h"
#include "ui/base/win/accessibility_misc_utils.h"
#include <UIAutomationCoreApi.h>
#endif
namespace views {
@ -228,8 +230,8 @@ class NativeWindowViews : public NativeWindow,
// In charge of running taskbar related APIs.
TaskbarHost taskbar_host_;
// If true we have enabled a11y
bool enabled_a11y_support_;
// Memoized version of a11y check
bool checked_for_a11y_support_;
// Whether to show the WS_THICKFRAME style.
bool thick_frame_;

View file

@ -92,15 +92,24 @@ bool NativeWindowViews::PreHandleMSG(
// accessibility object.
case WM_GETOBJECT: {
const DWORD obj_id = static_cast<DWORD>(l_param);
if (enabled_a11y_support_) return false;
if (obj_id == OBJID_CLIENT) {
const auto axState = content::BrowserAccessibilityState::GetInstance();
if (axState && !axState->IsAccessibleBrowser()) {
axState->OnScreenReaderDetected();
enabled_a11y_support_ = true;
Browser::Get()->OnAccessibilitySupportChanged();
}
if (obj_id != OBJID_CLIENT) {
return false;
}
if (checked_for_a11y_support_) return false;
checked_for_a11y_support_ = true;
UINT screenReader = 0;
SystemParametersInfo(SPI_GETSCREENREADER, 0, &screenReader, 0);
if (!screenReader || !UiaClientsAreListening()) {
return false;
}
const auto axState = content::BrowserAccessibilityState::GetInstance();
if (axState && !axState->IsAccessibleBrowser()) {
axState->OnScreenReaderDetected();
Browser::Get()->OnAccessibilitySupportChanged();
}
return false;

View file

@ -281,6 +281,7 @@
'-lwininet.lib',
'-lwinmm.lib',
'-lcrypt32.lib',
'-luiautomationcore.lib',
],
},
'dependencies': [