| Index: components/mus/ws/focus_controller.cc
|
| diff --git a/components/mus/ws/focus_controller.cc b/components/mus/ws/focus_controller.cc
|
| index cef209c92e27e64412c9b6c7c6c5a8a9745e465c..49324fd73dd9fc842a0342275fd623fb748b4f5e 100644
|
| --- a/components/mus/ws/focus_controller.cc
|
| +++ b/components/mus/ws/focus_controller.cc
|
| @@ -4,16 +4,14 @@
|
|
|
| #include "components/mus/ws/focus_controller.h"
|
|
|
| -#include "components/mus/ws/focus_controller_delegate.h"
|
| +#include "components/mus/ws/focus_controller_observer.h"
|
| #include "components/mus/ws/server_window.h"
|
| #include "components/mus/ws/server_window_drawn_tracker.h"
|
|
|
| namespace mus {
|
| -
|
| namespace ws {
|
|
|
| -FocusController::FocusController(FocusControllerDelegate* delegate)
|
| - : delegate_(delegate) {}
|
| +FocusController::FocusController() {}
|
|
|
| FocusController::~FocusController() {}
|
|
|
| @@ -21,13 +19,21 @@ void FocusController::SetFocusedWindow(ServerWindow* window) {
|
| if (GetFocusedWindow() == window)
|
| return;
|
|
|
| - SetFocusedWindowImpl(window, CHANGE_SOURCE_EXPLICIT);
|
| + SetFocusedWindowImpl(FocusControllerChangeSource::EXPLICIT, window);
|
| }
|
|
|
| ServerWindow* FocusController::GetFocusedWindow() {
|
| return drawn_tracker_ ? drawn_tracker_->window() : nullptr;
|
| }
|
|
|
| +void FocusController::AddObserver(FocusControllerObserver* observer) {
|
| + observers_.AddObserver(observer);
|
| +}
|
| +
|
| +void FocusController::RemoveObserver(FocusControllerObserver* observer) {
|
| + observers_.RemoveObserver(observer);
|
| +}
|
| +
|
| bool FocusController::CanBeFocused(ServerWindow* window) const {
|
| // All ancestors of |window| must be drawn, and be focusable.
|
| for (ServerWindow* w = window; w; w = w->parent()) {
|
| @@ -51,8 +57,9 @@ bool FocusController::CanBeActivated(ServerWindow* window) const {
|
| return true;
|
| }
|
|
|
| -void FocusController::SetFocusedWindowImpl(ServerWindow* window,
|
| - ChangeSource change_source) {
|
| +void FocusController::SetFocusedWindowImpl(
|
| + FocusControllerChangeSource change_source,
|
| + ServerWindow* window) {
|
| if (window && !CanBeFocused(window))
|
| return;
|
| ServerWindow* old = GetFocusedWindow();
|
| @@ -65,17 +72,17 @@ void FocusController::SetFocusedWindowImpl(ServerWindow* window,
|
| else
|
| drawn_tracker_.reset();
|
|
|
| - if (change_source == CHANGE_SOURCE_DRAWN_STATE_CHANGED)
|
| - delegate_->OnFocusChanged(old, window);
|
| + FOR_EACH_OBSERVER(FocusControllerObserver, observers_,
|
| + OnFocusChanged(change_source, old, window));
|
| }
|
|
|
| void FocusController::OnDrawnStateChanged(ServerWindow* ancestor,
|
| ServerWindow* window,
|
| bool is_drawn) {
|
| DCHECK(!is_drawn); // We only observe when drawn.
|
| - SetFocusedWindowImpl(ancestor, CHANGE_SOURCE_DRAWN_STATE_CHANGED);
|
| + SetFocusedWindowImpl(FocusControllerChangeSource::DRAWN_STATE_CHANGED,
|
| + ancestor);
|
| }
|
|
|
| } // namespace ws
|
| -
|
| } // namespace mus
|
|
|