| Index: ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
|
| diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
|
| index d7347d008257c90ea2aa568c9c466cebf935ec6e..7974e6e019457a647b9824ccc3c0c5ec01a3a9b0 100644
|
| --- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
|
| +++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
|
| @@ -256,6 +256,7 @@ DesktopNativeWidgetAura::DesktopNativeWidgetAura(
|
| native_widget_delegate_(delegate),
|
| last_drop_operation_(ui::DragDropTypes::DRAG_NONE),
|
| restore_focus_on_activate_(false),
|
| + restore_focus_on_window_focus_(false),
|
| cursor_(gfx::kNullCursor),
|
| widget_type_(Widget::InitParams::TYPE_WINDOW) {
|
| aura::client::SetFocusChangeObserver(content_window_, this);
|
| @@ -1080,15 +1081,23 @@ void DesktopNativeWidgetAura::OnWindowFocused(aura::Window* gained_focus,
|
| native_widget_delegate_->OnNativeFocus(lost_focus);
|
|
|
| // If focus is moving from a descendant Window to |content_window_| then
|
| - // native activation hasn't changed. We still need to inform the InputMethod
|
| - // we've been focused though.
|
| + // native activation hasn't changed. Still, the InputMethod and FocusManager
|
| + // must be informed of the Window focus change.
|
| InputMethod* input_method = GetWidget()->GetInputMethod();
|
| if (input_method)
|
| input_method->OnFocus();
|
| +
|
| + if (restore_focus_on_window_focus_) {
|
| + restore_focus_on_window_focus_ = false;
|
| + GetWidget()->GetFocusManager()->RestoreFocusedView();
|
| + }
|
| } else if (content_window_ == lost_focus) {
|
| desktop_window_tree_host_->OnNativeWidgetBlur();
|
| - native_widget_delegate_->OnNativeBlur(
|
| - aura::client::GetFocusClient(content_window_)->GetFocusedWindow());
|
| + native_widget_delegate_->OnNativeBlur(gained_focus);
|
| +
|
| + DCHECK(!restore_focus_on_window_focus_);
|
| + restore_focus_on_window_focus_ = true;
|
| + GetWidget()->GetFocusManager()->StoreFocusedView(false);
|
| }
|
| }
|
|
|
|
|