| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "services/ui/ws/display.h" | 5 #include "services/ui/ws/display.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 this); | 49 this); |
| 50 | 50 |
| 51 if (!focus_controller_) { | 51 if (!focus_controller_) { |
| 52 focus_controller_->RemoveObserver(this); | 52 focus_controller_->RemoveObserver(this); |
| 53 focus_controller_.reset(); | 53 focus_controller_.reset(); |
| 54 } | 54 } |
| 55 | 55 |
| 56 for (ServerWindow* window : windows_needing_frame_destruction_) | 56 for (ServerWindow* window : windows_needing_frame_destruction_) |
| 57 window->RemoveObserver(this); | 57 window->RemoveObserver(this); |
| 58 | 58 |
| 59 // If there is a |binding_| then the tree was created specifically for this | 59 if (!binding_) { |
| 60 // display (which corresponds to a WindowTreeHost). | 60 for (auto& pair : window_manager_display_root_map_) |
| 61 if (binding_ && !window_manager_display_root_map_.empty()) { | 61 pair.second->window_manager_state()->OnDisplayDestroying(this); |
| 62 } else if (!window_manager_display_root_map_.empty()) { |
| 63 // If there is a |binding_| then the tree was created specifically for this |
| 64 // display (which corresponds to a WindowTreeHost). |
| 62 window_server_->DestroyTree(window_manager_display_root_map_.begin() | 65 window_server_->DestroyTree(window_manager_display_root_map_.begin() |
| 63 ->second->window_manager_state() | 66 ->second->window_manager_state() |
| 64 ->window_tree()); | 67 ->window_tree()); |
| 65 } | 68 } |
| 66 } | 69 } |
| 67 | 70 |
| 68 void Display::Init(std::unique_ptr<DisplayBinding> binding) { | 71 void Display::Init(std::unique_ptr<DisplayBinding> binding) { |
| 69 init_called_ = true; | 72 init_called_ = true; |
| 70 binding_ = std::move(binding); | 73 binding_ = std::move(binding); |
| 71 display_manager()->AddDisplay(this); | 74 display_manager()->AddDisplay(this); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 if (pair.second->root()->id() == id) | 144 if (pair.second->root()->id() == id) |
| 142 return pair.second->root(); | 145 return pair.second->root(); |
| 143 } | 146 } |
| 144 return nullptr; | 147 return nullptr; |
| 145 } | 148 } |
| 146 | 149 |
| 147 WindowManagerDisplayRoot* Display::GetWindowManagerDisplayRootWithRoot( | 150 WindowManagerDisplayRoot* Display::GetWindowManagerDisplayRootWithRoot( |
| 148 const ServerWindow* window) { | 151 const ServerWindow* window) { |
| 149 for (auto& pair : window_manager_display_root_map_) { | 152 for (auto& pair : window_manager_display_root_map_) { |
| 150 if (pair.second->root() == window) | 153 if (pair.second->root() == window) |
| 151 return pair.second.get(); | 154 return pair.second; |
| 152 } | 155 } |
| 153 return nullptr; | 156 return nullptr; |
| 154 } | 157 } |
| 155 | 158 |
| 156 const WindowManagerDisplayRoot* Display::GetWindowManagerDisplayRootForUser( | 159 const WindowManagerDisplayRoot* Display::GetWindowManagerDisplayRootForUser( |
| 157 const UserId& user_id) const { | 160 const UserId& user_id) const { |
| 158 auto iter = window_manager_display_root_map_.find(user_id); | 161 auto iter = window_manager_display_root_map_.find(user_id); |
| 159 return iter == window_manager_display_root_map_.end() ? nullptr | 162 return iter == window_manager_display_root_map_.end() ? nullptr |
| 160 : iter->second.get(); | 163 : iter->second; |
| 161 } | 164 } |
| 162 | 165 |
| 163 const WindowManagerDisplayRoot* Display::GetActiveWindowManagerDisplayRoot() | 166 const WindowManagerDisplayRoot* Display::GetActiveWindowManagerDisplayRoot() |
| 164 const { | 167 const { |
| 165 return GetWindowManagerDisplayRootForUser( | 168 return GetWindowManagerDisplayRootForUser( |
| 166 window_server_->user_id_tracker()->active_id()); | 169 window_server_->user_id_tracker()->active_id()); |
| 167 } | 170 } |
| 168 | 171 |
| 169 bool Display::SetFocusedWindow(ServerWindow* new_focused_window) { | 172 bool Display::SetFocusedWindow(ServerWindow* new_focused_window) { |
| 170 ServerWindow* old_focused_window = focus_controller_->GetFocusedWindow(); | 173 ServerWindow* old_focused_window = focus_controller_->GetFocusedWindow(); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 return; | 240 return; |
| 238 | 241 |
| 239 display_manager()->OnDisplayAcceleratedWidgetAvailable(this); | 242 display_manager()->OnDisplayAcceleratedWidgetAvailable(this); |
| 240 if (binding_) { | 243 if (binding_) { |
| 241 std::unique_ptr<WindowManagerDisplayRoot> display_root_ptr( | 244 std::unique_ptr<WindowManagerDisplayRoot> display_root_ptr( |
| 242 new WindowManagerDisplayRoot(this)); | 245 new WindowManagerDisplayRoot(this)); |
| 243 WindowManagerDisplayRoot* display_root = display_root_ptr.get(); | 246 WindowManagerDisplayRoot* display_root = display_root_ptr.get(); |
| 244 // For this case we never create additional displays roots, so any | 247 // For this case we never create additional displays roots, so any |
| 245 // id works. | 248 // id works. |
| 246 window_manager_display_root_map_[shell::mojom::kRootUserID] = | 249 window_manager_display_root_map_[shell::mojom::kRootUserID] = |
| 247 std::move(display_root_ptr); | 250 display_root_ptr.get(); |
| 248 WindowTree* window_tree = binding_->CreateWindowTree(display_root->root()); | 251 WindowTree* window_tree = binding_->CreateWindowTree(display_root->root()); |
| 249 display_root->window_manager_state_ = window_tree->window_manager_state(); | 252 display_root->window_manager_state_ = window_tree->window_manager_state(); |
| 253 window_tree->window_manager_state()->AddWindowManagerDisplayRoot( |
| 254 std::move(display_root_ptr)); |
| 250 } else { | 255 } else { |
| 251 CreateWindowManagerDisplayRootsFromFactories(); | 256 CreateWindowManagerDisplayRootsFromFactories(); |
| 252 } | 257 } |
| 253 display_manager()->OnDisplayUpdate(this); | 258 display_manager()->OnDisplayUpdate(this); |
| 254 } | 259 } |
| 255 | 260 |
| 256 void Display::CreateWindowManagerDisplayRootsFromFactories() { | 261 void Display::CreateWindowManagerDisplayRootsFromFactories() { |
| 257 std::vector<WindowManagerWindowTreeFactory*> factories = | 262 std::vector<WindowManagerWindowTreeFactory*> factories = |
| 258 window_server_->window_manager_window_tree_factory_set()->GetFactories(); | 263 window_server_->window_manager_window_tree_factory_set()->GetFactories(); |
| 259 for (WindowManagerWindowTreeFactory* factory : factories) { | 264 for (WindowManagerWindowTreeFactory* factory : factories) { |
| 260 if (factory->window_tree()) | 265 if (factory->window_tree()) |
| 261 CreateWindowManagerDisplayRootFromFactory(factory); | 266 CreateWindowManagerDisplayRootFromFactory(factory); |
| 262 } | 267 } |
| 263 } | 268 } |
| 264 | 269 |
| 265 void Display::CreateWindowManagerDisplayRootFromFactory( | 270 void Display::CreateWindowManagerDisplayRootFromFactory( |
| 266 WindowManagerWindowTreeFactory* factory) { | 271 WindowManagerWindowTreeFactory* factory) { |
| 267 std::unique_ptr<WindowManagerDisplayRoot> display_root_ptr( | 272 std::unique_ptr<WindowManagerDisplayRoot> display_root_ptr( |
| 268 new WindowManagerDisplayRoot(this)); | 273 new WindowManagerDisplayRoot(this)); |
| 269 WindowManagerDisplayRoot* display_root = display_root_ptr.get(); | 274 WindowManagerDisplayRoot* display_root = display_root_ptr.get(); |
| 270 window_manager_display_root_map_[factory->user_id()] = | 275 window_manager_display_root_map_[factory->user_id()] = display_root_ptr.get(); |
| 271 std::move(display_root_ptr); | 276 WindowManagerState* window_manager_state = |
| 272 display_root->window_manager_state_ = | |
| 273 factory->window_tree()->window_manager_state(); | 277 factory->window_tree()->window_manager_state(); |
| 278 display_root->window_manager_state_ = window_manager_state; |
| 274 const bool is_active = | 279 const bool is_active = |
| 275 factory->user_id() == window_server_->user_id_tracker()->active_id(); | 280 factory->user_id() == window_server_->user_id_tracker()->active_id(); |
| 276 display_root->root()->SetVisible(is_active); | 281 display_root->root()->SetVisible(is_active); |
| 277 display_root->window_manager_state()->window_tree()->AddRootForWindowManager( | 282 window_manager_state->window_tree()->AddRootForWindowManager( |
| 278 display_root->root()); | 283 display_root->root()); |
| 284 window_manager_state->AddWindowManagerDisplayRoot( |
| 285 std::move(display_root_ptr)); |
| 279 } | 286 } |
| 280 | 287 |
| 281 ServerWindow* Display::GetRootWindow() { | 288 ServerWindow* Display::GetRootWindow() { |
| 282 return root_.get(); | 289 return root_.get(); |
| 283 } | 290 } |
| 284 | 291 |
| 285 bool Display::IsInHighContrastMode() { | 292 bool Display::IsInHighContrastMode() { |
| 286 return window_server_->IsActiveUserInHighContrastMode(); | 293 return window_server_->IsActiveUserInHighContrastMode(); |
| 287 } | 294 } |
| 288 | 295 |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 } | 429 } |
| 423 | 430 |
| 424 void Display::OnWindowManagerWindowTreeFactoryReady( | 431 void Display::OnWindowManagerWindowTreeFactoryReady( |
| 425 WindowManagerWindowTreeFactory* factory) { | 432 WindowManagerWindowTreeFactory* factory) { |
| 426 if (!binding_) | 433 if (!binding_) |
| 427 CreateWindowManagerDisplayRootFromFactory(factory); | 434 CreateWindowManagerDisplayRootFromFactory(factory); |
| 428 } | 435 } |
| 429 | 436 |
| 430 } // namespace ws | 437 } // namespace ws |
| 431 } // namespace ui | 438 } // namespace ui |
| OLD | NEW |