OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/wm/core/focus_controller.h" | 5 #include "ui/wm/core/focus_controller.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "ui/aura/client/aura_constants.h" | 8 #include "ui/aura/client/aura_constants.h" |
9 #include "ui/aura/client/capture_client.h" | 9 #include "ui/aura/client/capture_client.h" |
10 #include "ui/aura/client/focus_change_observer.h" | 10 #include "ui/aura/client/focus_change_observer.h" |
11 #include "ui/aura/env.h" | 11 #include "ui/aura/env.h" |
12 #include "ui/aura/window_tracker.h" | 12 #include "ui/aura/window_tracker.h" |
13 #include "ui/base/ime/text_input_focus_manager.h" | 13 #include "ui/base/ime/text_input_focus_manager.h" |
14 #include "ui/events/event.h" | |
15 #include "ui/wm/core/focus_rules.h" | 14 #include "ui/wm/core/focus_rules.h" |
16 #include "ui/wm/core/window_util.h" | 15 #include "ui/wm/core/window_util.h" |
17 #include "ui/wm/public/activation_change_observer.h" | 16 #include "ui/wm/public/activation_change_observer.h" |
18 | 17 |
19 namespace wm { | 18 namespace wm { |
20 namespace { | 19 namespace { |
21 | 20 |
22 // When a modal window is activated, we bring its entire transient parent chain | 21 // When a modal window is activated, we bring its entire transient parent chain |
23 // to the front. This function must be called before the modal transient is | 22 // to the front. This function must be called before the modal transient is |
24 // stacked at the top to ensure correct stacking order. | 23 // stacked at the top to ensure correct stacking order. |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 if (!active_window_->Contains(window)) | 143 if (!active_window_->Contains(window)) |
145 return; | 144 return; |
146 SetFocusedWindow(window); | 145 SetFocusedWindow(window); |
147 } | 146 } |
148 | 147 |
149 aura::Window* FocusController::GetFocusedWindow() { | 148 aura::Window* FocusController::GetFocusedWindow() { |
150 return focused_window_; | 149 return focused_window_; |
151 } | 150 } |
152 | 151 |
153 //////////////////////////////////////////////////////////////////////////////// | 152 //////////////////////////////////////////////////////////////////////////////// |
154 // FocusController, ui::EventHandler implementation: | |
155 void FocusController::OnKeyEvent(ui::KeyEvent* event) { | |
156 } | |
157 | |
158 void FocusController::OnMouseEvent(ui::MouseEvent* event) { | |
159 if (event->type() == ui::ET_MOUSE_PRESSED && !event->handled()) | |
160 WindowFocusedFromInputEvent(static_cast<aura::Window*>(event->target())); | |
161 } | |
162 | |
163 void FocusController::OnScrollEvent(ui::ScrollEvent* event) { | |
164 } | |
165 | |
166 void FocusController::OnTouchEvent(ui::TouchEvent* event) { | |
167 } | |
168 | |
169 void FocusController::OnGestureEvent(ui::GestureEvent* event) { | |
170 if (event->type() == ui::ET_GESTURE_BEGIN && | |
171 event->details().touch_points() == 1 && | |
172 !event->handled()) { | |
173 WindowFocusedFromInputEvent(static_cast<aura::Window*>(event->target())); | |
174 } | |
175 } | |
176 | |
177 //////////////////////////////////////////////////////////////////////////////// | |
178 // FocusController, aura::WindowObserver implementation: | 153 // FocusController, aura::WindowObserver implementation: |
179 | 154 |
180 void FocusController::OnWindowVisibilityChanged(aura::Window* window, | 155 void FocusController::OnWindowVisibilityChanged(aura::Window* window, |
181 bool visible) { | 156 bool visible) { |
182 if (!visible) | 157 if (!visible) |
183 WindowLostFocusFromDispositionChange(window, window->parent()); | 158 WindowLostFocusFromDispositionChange(window, window->parent()); |
184 } | 159 } |
185 | 160 |
186 void FocusController::OnWindowDestroying(aura::Window* window) { | 161 void FocusController::OnWindowDestroying(aura::Window* window) { |
187 // A window's modality state will interfere with focus restoration during its | 162 // A window's modality state will interfere with focus restoration during its |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 aura::Window* next_activatable = rules_->GetNextActivatableWindow(window); | 312 aura::Window* next_activatable = rules_->GetNextActivatableWindow(window); |
338 SetActiveWindow(NULL, next_activatable); | 313 SetActiveWindow(NULL, next_activatable); |
339 if (!(active_window_ && active_window_->Contains(focused_window_))) | 314 if (!(active_window_ && active_window_->Contains(focused_window_))) |
340 SetFocusedWindow(next_activatable); | 315 SetFocusedWindow(next_activatable); |
341 } else if (window->Contains(focused_window_)) { | 316 } else if (window->Contains(focused_window_)) { |
342 // Active window isn't changing, but focused window might be. | 317 // Active window isn't changing, but focused window might be. |
343 SetFocusedWindow(rules_->GetFocusableWindow(next)); | 318 SetFocusedWindow(rules_->GetFocusableWindow(next)); |
344 } | 319 } |
345 } | 320 } |
346 | 321 |
347 void FocusController::WindowFocusedFromInputEvent(aura::Window* window) { | |
348 // Only focus |window| if it or any of its parents can be focused. Otherwise | |
349 // FocusWindow() will focus the topmost window, which may not be the | |
350 // currently focused one. | |
351 if (rules_->CanFocusWindow(GetToplevelWindow(window))) | |
352 FocusWindow(window); | |
353 } | |
354 | |
355 } // namespace wm | 322 } // namespace wm |
OLD | NEW |