| Index: ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
|
| ===================================================================
|
| --- ui/views/widget/desktop_aura/desktop_native_widget_aura.cc (revision 180150)
|
| +++ ui/views/widget/desktop_aura/desktop_native_widget_aura.cc (working copy)
|
| @@ -16,6 +16,7 @@
|
| #include "ui/gfx/canvas.h"
|
| #include "ui/native_theme/native_theme.h"
|
| #include "ui/views/corewm/compound_event_filter.h"
|
| +#include "ui/views/corewm/corewm_switches.h"
|
| #include "ui/views/corewm/input_method_event_filter.h"
|
| #include "ui/views/drag_utils.h"
|
| #include "ui/views/ime/input_method.h"
|
| @@ -437,7 +438,7 @@
|
|
|
| void DesktopNativeWidgetAura::ClearNativeFocus() {
|
| desktop_root_window_host_->ClearNativeFocus();
|
| - aura::client::GetFocusClient(window_)->FocusWindow(window_);
|
| + aura::client::GetFocusClient(window_)->ResetFocusWithinActiveWindow(window_);
|
| }
|
|
|
| gfx::Rect DesktopNativeWidgetAura::GetWorkAreaBoundsInScreen() const {
|
| @@ -632,23 +633,28 @@
|
| restore_focus_on_activate_ = false;
|
| GetWidget()->GetFocusManager()->RestoreFocusedView();
|
| } else if (lost_active == window_ && GetWidget()->HasFocusManager()) {
|
| - // If we're losing focus to a window that is a top level (such as a bubble)
|
| - // store the focus. Such a window shares the same RootWindowHost, so that
|
| - // such a change won't trigger an activation change (which calls
|
| - // StoreFocusedView()). Without this the focused view is never told it lost
|
| - // focus.
|
| - aura::Window* focused_window =
|
| + bool store_focused_view = corewm::UseFocusControllerOnDesktop();
|
| + if (!store_focused_view) {
|
| + // If we're losing focus to a window that is a top level (such as a
|
| + // bubble) store the focus. Such a window shares the same
|
| + // RootWindowHost, so that such a change won't trigger an activation
|
| + // change (which calls StoreFocusedView()). Without this the focused
|
| + // view is never told it lost focus.
|
| + aura::Window* focused_window =
|
| aura::client::GetFocusClient(window_)->GetFocusedWindow();
|
| - if (focused_window && focused_window != window_) {
|
| - Widget* focused_widget = Widget::GetWidgetForNativeWindow(focused_window);
|
| - if (focused_widget && focused_widget != GetWidget() &&
|
| - focused_widget->is_top_level()) {
|
| - DCHECK(!restore_focus_on_activate_);
|
| - restore_focus_on_activate_ = true;
|
| - // Pass in false so that ClearNativeFocus() isn't invoked.
|
| - GetWidget()->GetFocusManager()->StoreFocusedView(false);
|
| + if (focused_window && focused_window != window_) {
|
| + Widget* focused_widget =
|
| + Widget::GetWidgetForNativeWindow(focused_window);
|
| + store_focused_view = focused_widget && focused_widget != GetWidget() &&
|
| + focused_widget->is_top_level();
|
| }
|
| }
|
| + if (store_focused_view) {
|
| + DCHECK(!restore_focus_on_activate_);
|
| + restore_focus_on_activate_ = true;
|
| + // Pass in false so that ClearNativeFocus() isn't invoked.
|
| + GetWidget()->GetFocusManager()->StoreFocusedView(false);
|
| + }
|
| }
|
| }
|
|
|
|
|