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 |