| Index: ui/wm/core/focus_controller.cc
|
| diff --git a/ui/wm/core/focus_controller.cc b/ui/wm/core/focus_controller.cc
|
| index 446e82c269fc4e852491886d1207ecfeaddc93cf..f1955d073945c792cbc05cdf4c359c61bf3b8e11 100644
|
| --- a/ui/wm/core/focus_controller.cc
|
| +++ b/ui/wm/core/focus_controller.cc
|
| @@ -103,6 +103,14 @@ void FocusController::RemoveObserver(
|
| }
|
|
|
| void FocusController::FocusWindow(aura::Window* window) {
|
| + FocusWindowImpl(aura::client::ActivationChangeObserver::ActivationReason::
|
| + kActivationClient,
|
| + window);
|
| +}
|
| +
|
| +void FocusController::FocusWindowImpl(
|
| + aura::client::ActivationChangeObserver::ActivationReason reason,
|
| + aura::Window* window) {
|
| if (window &&
|
| (window->Contains(focused_window_) || window->Contains(active_window_))) {
|
| return;
|
| @@ -125,7 +133,7 @@ void FocusController::FocusWindow(aura::Window* window) {
|
| // we must not adjust the focus below since this will clobber that change.
|
| aura::Window* last_focused_window = focused_window_;
|
| if (!updating_activation_)
|
| - SetActiveWindow(window, activatable);
|
| + SetActiveWindow(reason, window, activatable);
|
|
|
| // If the window's ActivationChangeObserver shifted focus to a valid window,
|
| // we don't want to focus the window we thought would be focused by default.
|
| @@ -268,8 +276,10 @@ void FocusController::SetFocusedWindow(aura::Window* window) {
|
| text_input_focus_manager->FocusTextInputClient(NULL);
|
| }
|
|
|
| -void FocusController::SetActiveWindow(aura::Window* requested_window,
|
| - aura::Window* window) {
|
| +void FocusController::SetActiveWindow(
|
| + aura::client::ActivationChangeObserver::ActivationReason reason,
|
| + aura::Window* requested_window,
|
| + aura::Window* window) {
|
| if (updating_activation_)
|
| return;
|
|
|
| @@ -310,19 +320,19 @@ void FocusController::SetActiveWindow(aura::Window* requested_window,
|
| if (window_tracker.Contains(lost_activation)) {
|
| observer = aura::client::GetActivationChangeObserver(lost_activation);
|
| if (observer)
|
| - observer->OnWindowActivated(active_window_, lost_activation);
|
| + observer->OnWindowActivated(reason, active_window_, lost_activation);
|
| }
|
| observer = aura::client::GetActivationChangeObserver(active_window_);
|
| if (observer) {
|
| observer->OnWindowActivated(
|
| - active_window_,
|
| + reason, active_window_,
|
| window_tracker.Contains(lost_activation) ? lost_activation : NULL);
|
| }
|
| - FOR_EACH_OBSERVER(aura::client::ActivationChangeObserver,
|
| - activation_observers_,
|
| - OnWindowActivated(active_window_,
|
| - window_tracker.Contains(lost_activation) ?
|
| - lost_activation : NULL));
|
| + FOR_EACH_OBSERVER(
|
| + aura::client::ActivationChangeObserver, activation_observers_,
|
| + OnWindowActivated(
|
| + reason, active_window_,
|
| + window_tracker.Contains(lost_activation) ? lost_activation : NULL));
|
| }
|
|
|
| void FocusController::WindowLostFocusFromDispositionChange(
|
| @@ -335,7 +345,9 @@ void FocusController::WindowLostFocusFromDispositionChange(
|
| // that process so there's no point in updating focus independently.
|
| if (window == active_window_) {
|
| aura::Window* next_activatable = rules_->GetNextActivatableWindow(window);
|
| - SetActiveWindow(NULL, next_activatable);
|
| + SetActiveWindow(aura::client::ActivationChangeObserver::ActivationReason::
|
| + kWindowDispositionChanged,
|
| + NULL, next_activatable);
|
| if (!(active_window_ && active_window_->Contains(focused_window_)))
|
| SetFocusedWindow(next_activatable);
|
| } else if (window->Contains(focused_window_)) {
|
| @@ -348,8 +360,11 @@ void FocusController::WindowFocusedFromInputEvent(aura::Window* window) {
|
| // Only focus |window| if it or any of its parents can be focused. Otherwise
|
| // FocusWindow() will focus the topmost window, which may not be the
|
| // currently focused one.
|
| - if (rules_->CanFocusWindow(GetToplevelWindow(window)))
|
| - FocusWindow(window);
|
| + if (rules_->CanFocusWindow(GetToplevelWindow(window))) {
|
| + FocusWindowImpl(
|
| + aura::client::ActivationChangeObserver::ActivationReason::kInputEvent,
|
| + window);
|
| + }
|
| }
|
|
|
| } // namespace wm
|
|
|