Index: ui/views/cocoa/bridged_native_widget.mm |
diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm |
index 6f5dec0f96864ede56c8a7cf940de5ebf964aa92..3bb293b47cf0aa8c7f3ae373814f56260d6dc4cc 100644 |
--- a/ui/views/cocoa/bridged_native_widget.mm |
+++ b/ui/views/cocoa/bridged_native_widget.mm |
@@ -351,6 +351,14 @@ void BridgedNativeWidget::Init(base::scoped_nsobject<NSWindow> window, |
name:NSApplicationDidHideNotification |
object:nil]; |
+ // Get notified whenever Full Keyboard Access mode is changed. |
+ // Todo(karandeepb): See how to store constant string. |
tapted
2016/02/23 03:01:19
You can just declare a
NSString* const kFullKeybo
karandeepb
2016/03/15 02:19:50
Done.
|
+ [[NSDistributedNotificationCenter defaultCenter] |
+ addObserver:window_delegate_ |
+ selector:@selector(onFullKeyboardAccessModeChanged:) |
+ name:@"com.apple.KeyboardUIModeDidChange" |
+ object:nil]; |
+ |
// Validate the window's initial state, otherwise the bridge's initial |
// tracking state will be incorrect. |
DCHECK(![window_ isVisible]); |
@@ -426,8 +434,11 @@ void BridgedNativeWidget::SetFocusManager(FocusManager* focus_manager) { |
if (focus_manager_) |
focus_manager_->RemoveFocusChangeListener(this); |
- if (focus_manager) |
+ if (focus_manager) { |
focus_manager->AddFocusChangeListener(this); |
+ focus_manager->SetKeyboardAccessibility( |
+ [NSApp isFullKeyboardAccessEnabled]); |
+ } |
focus_manager_ = focus_manager; |
} |
@@ -596,6 +607,8 @@ void BridgedNativeWidget::OnWindowWillClose() { |
} |
[window_ setDelegate:nil]; |
[[NSNotificationCenter defaultCenter] removeObserver:window_delegate_]; |
+ [[NSDistributedNotificationCenter defaultCenter] |
+ removeObserver:window_delegate_]; |
native_widget_mac_->OnWindowWillClose(); |
} |
@@ -758,6 +771,14 @@ void BridgedNativeWidget::OnWindowKeyStatusChangedTo(bool is_key) { |
if ([window_ contentView] == [window_ firstResponder]) { |
if (is_key) { |
widget->OnNativeFocus(); |
+ // The NSApplication class automatically suspends distributed notification |
+ // delivery when the application is not active. For the full keyboard |
+ // access mode change notification, the default suspension behavior of |
+ // NSNotificationSuspensionBehaviorCoalesce should have worked, but |
+ // it doesn't sometimes. Hence explicitly set the keyboard accessibility |
+ // state on regaining key window status. |
+ widget->GetFocusManager()->SetKeyboardAccessibility( |
+ [NSApp isFullKeyboardAccessEnabled]); |
widget->GetFocusManager()->RestoreFocusedView(); |
} else { |
widget->OnNativeBlur(); |