summaryrefslogtreecommitdiffstats
path: root/components/mus/ws/display.cc
diff options
context:
space:
mode:
authorsky <sky@chromium.org>2016-03-25 16:30:50 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-25 23:33:10 +0000
commit19019f27a62f561909f0ec733510bacbd74b374c (patch)
treed56084fd448cecd5d30e8796a8aaf9111a51ae1b /components/mus/ws/display.cc
parentc4f0abb4666f3296485e53fd5ede71f161938048 (diff)
downloadchromium_src-19019f27a62f561909f0ec733510bacbd74b374c.zip
chromium_src-19019f27a62f561909f0ec733510bacbd74b374c.tar.gz
chromium_src-19019f27a62f561909f0ec733510bacbd74b374c.tar.bz2
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}
Diffstat (limited to 'components/mus/ws/display.cc')
-rw-r--r--components/mus/ws/display.cc19
1 files changed, 10 insertions, 9 deletions
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) {