Chromium Code Reviews| 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(); |