From 19019f27a62f561909f0ec733510bacbd74b374c Mon Sep 17 00:00:00 2001 From: sky Date: Fri, 25 Mar 2016 16:30:50 -0700 Subject: Routes setting focus through WindowServer so it can notify other displays This way we only have one Display with focus. BUG=none TEST=none R=ben@chromium.org Review URL: https://codereview.chromium.org/1833873004 Cr-Commit-Position: refs/heads/master@{#383403} --- components/mus/ws/display.cc | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'components/mus/ws/display.cc') diff --git a/components/mus/ws/display.cc b/components/mus/ws/display.cc index a8c9229..f8582f6 100644 --- a/components/mus/ws/display.cc +++ b/components/mus/ws/display.cc @@ -42,7 +42,11 @@ Display::~Display() { window_server_->window_manager_factory_registry()->RemoveObserver(this); - DestroyFocusController(); + if (!focus_controller_) { + focus_controller_->RemoveObserver(this); + focus_controller_.reset(); + } + for (ServerWindow* window : windows_needing_frame_destruction_) window->RemoveObserver(this); @@ -154,11 +158,10 @@ const WindowManagerState* Display::GetActiveWindowManagerState() const { } void Display::SetFocusedWindow(ServerWindow* new_focused_window) { - // TODO(sky): this is wrong. Focus is global, not per Display. ServerWindow* old_focused_window = focus_controller_->GetFocusedWindow(); if (old_focused_window == new_focused_window) return; - DCHECK(root_window()->Contains(new_focused_window)); + DCHECK(!new_focused_window || root_window()->Contains(new_focused_window)); focus_controller_->SetFocusedWindow(new_focused_window); } @@ -166,12 +169,10 @@ ServerWindow* Display::GetFocusedWindow() { return focus_controller_->GetFocusedWindow(); } -void Display::DestroyFocusController() { - if (!focus_controller_) - return; - - focus_controller_->RemoveObserver(this); - focus_controller_.reset(); +void Display::ActivateNextWindow() { + // TODO(sky): this is wrong, needs to figure out the next window to activate + // and then route setting through WindowServer. + focus_controller_->ActivateNextWindow(); } void Display::AddActivationParent(ServerWindow* window) { -- cgit v1.1