Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: services/ui/ws/display.cc

Issue 2346253004: Makes display roots be destroyed by client (Closed)
Patch Set: cleanup Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « services/ui/ws/display.h ('k') | services/ui/ws/display_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « services/ui/ws/display.h ('k') | services/ui/ws/display_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698