| 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 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 } | 189 } |
| 190 | 190 |
| 191 void Display::SetSize(const gfx::Size& size) { | 191 void Display::SetSize(const gfx::Size& size) { |
| 192 platform_display_->SetViewportSize(size); | 192 platform_display_->SetViewportSize(size); |
| 193 } | 193 } |
| 194 | 194 |
| 195 void Display::SetTitle(const std::string& title) { | 195 void Display::SetTitle(const std::string& title) { |
| 196 platform_display_->SetTitle(base::UTF8ToUTF16(title)); | 196 platform_display_->SetTitle(base::UTF8ToUTF16(title)); |
| 197 } | 197 } |
| 198 | 198 |
| 199 void Display::InitDisplayRoot() { |
| 200 DCHECK(window_server_->IsInExternalWindowMode()); |
| 201 DCHECK(binding_); |
| 202 |
| 203 external_mode_root_ = base::MakeUnique<WindowManagerDisplayRoot>(this); |
| 204 // TODO(tonikitoo): Code still has assumptions that even in external window |
| 205 // mode make 'window_manager_display_root_map_' needed. |
| 206 window_manager_display_root_map_[service_manager::mojom::kRootUserID] = |
| 207 external_mode_root_.get(); |
| 208 |
| 209 ServerWindow* server_window = external_mode_root_->root(); |
| 210 WindowTree* window_tree = window_server_->GetTreeForExternalWindowMode(); |
| 211 window_tree->AddRoot(server_window); |
| 212 window_tree->DoOnEmbed(nullptr /*mojom::WindowTreePtr*/, server_window); |
| 213 |
| 214 display_manager()->OnDisplayUpdate(display_); |
| 215 } |
| 216 |
| 199 void Display::InitWindowManagerDisplayRoots() { | 217 void Display::InitWindowManagerDisplayRoots() { |
| 218 // Tests can create ws::Display instances directly, by-passing |
| 219 // WindowTreeHostFactory. |
| 220 // TODO(tonikitoo): Check if with the introduction of 'external window mode' |
| 221 // this path is still needed. |
| 200 if (binding_) { | 222 if (binding_) { |
| 201 std::unique_ptr<WindowManagerDisplayRoot> display_root_ptr( | 223 std::unique_ptr<WindowManagerDisplayRoot> display_root_ptr( |
| 202 new WindowManagerDisplayRoot(this)); | 224 new WindowManagerDisplayRoot(this)); |
| 203 WindowManagerDisplayRoot* display_root = display_root_ptr.get(); | 225 WindowManagerDisplayRoot* display_root = display_root_ptr.get(); |
| 204 // For this case we never create additional displays roots, so any | 226 // For this case we never create additional displays roots, so any |
| 205 // id works. | 227 // id works. |
| 206 window_manager_display_root_map_[service_manager::mojom::kRootUserID] = | 228 window_manager_display_root_map_[service_manager::mojom::kRootUserID] = |
| 207 display_root_ptr.get(); | 229 display_root_ptr.get(); |
| 208 WindowTree* window_tree = binding_->CreateWindowTree(display_root->root()); | 230 WindowTree* window_tree = binding_->CreateWindowTree(display_root->root()); |
| 209 display_root->window_manager_state_ = window_tree->window_manager_state(); | 231 display_root->window_manager_state_ = window_tree->window_manager_state(); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 focus_controller_ = base::MakeUnique<FocusController>(this, root_.get()); | 277 focus_controller_ = base::MakeUnique<FocusController>(this, root_.get()); |
| 256 focus_controller_->AddObserver(this); | 278 focus_controller_->AddObserver(this); |
| 257 } | 279 } |
| 258 | 280 |
| 259 ServerWindow* Display::GetRootWindow() { | 281 ServerWindow* Display::GetRootWindow() { |
| 260 return root_.get(); | 282 return root_.get(); |
| 261 } | 283 } |
| 262 | 284 |
| 263 void Display::OnAcceleratedWidgetAvailable() { | 285 void Display::OnAcceleratedWidgetAvailable() { |
| 264 display_manager()->OnDisplayAcceleratedWidgetAvailable(this); | 286 display_manager()->OnDisplayAcceleratedWidgetAvailable(this); |
| 265 InitWindowManagerDisplayRoots(); | 287 |
| 288 if (window_server_->IsInExternalWindowMode()) |
| 289 InitDisplayRoot(); |
| 290 else |
| 291 InitWindowManagerDisplayRoots(); |
| 266 } | 292 } |
| 267 | 293 |
| 268 bool Display::IsInHighContrastMode() { | 294 bool Display::IsInHighContrastMode() { |
| 269 return window_server_->IsActiveUserInHighContrastMode(); | 295 return window_server_->IsActiveUserInHighContrastMode(); |
| 270 } | 296 } |
| 271 | 297 |
| 272 void Display::OnEvent(const ui::Event& event) { | 298 void Display::OnEvent(const ui::Event& event) { |
| 299 // TODO(tonikitoo): Current WindowManagerDisplayRoot class is misnamed, since |
| 300 // in external window mode a non-WindowManager specific 'DisplayRoot' is also |
| 301 // needed. |
| 302 // Bits of WindowManagerState also should be factored out and made available |
| 303 // in external window mode, so that event handling is functional. |
| 304 // htts://crbug.com/701129 |
| 273 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); | 305 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); |
| 274 if (display_root) | 306 if (display_root && display_root->window_manager_state()) |
| 275 display_root->window_manager_state()->ProcessEvent(event, GetId()); | 307 display_root->window_manager_state()->ProcessEvent(event, GetId()); |
| 276 window_server_ | 308 window_server_ |
| 277 ->GetUserActivityMonitorForUser( | 309 ->GetUserActivityMonitorForUser( |
| 278 window_server_->user_id_tracker()->active_id()) | 310 window_server_->user_id_tracker()->active_id()) |
| 279 ->OnUserActivity(); | 311 ->OnUserActivity(); |
| 280 } | 312 } |
| 281 | 313 |
| 282 void Display::OnNativeCaptureLost() { | 314 void Display::OnNativeCaptureLost() { |
| 283 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); | 315 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); |
| 284 if (display_root) | 316 if (display_root && display_root->window_manager_state()) |
| 285 display_root->window_manager_state()->SetCapture(nullptr, kInvalidClientId); | 317 display_root->window_manager_state()->SetCapture(nullptr, kInvalidClientId); |
| 286 } | 318 } |
| 287 | 319 |
| 288 void Display::OnViewportMetricsChanged( | 320 void Display::OnViewportMetricsChanged( |
| 289 const display::ViewportMetrics& metrics) { | 321 const display::ViewportMetrics& metrics) { |
| 290 if (root_->bounds().size() == metrics.bounds_in_pixels.size()) | 322 if (root_->bounds().size() == metrics.bounds_in_pixels.size()) |
| 291 return; | 323 return; |
| 292 | 324 |
| 293 gfx::Rect new_bounds(metrics.bounds_in_pixels.size()); | 325 gfx::Rect new_bounds(metrics.bounds_in_pixels.size()); |
| 294 root_->SetBounds(new_bounds, allocator_.GenerateId()); | 326 root_->SetBounds(new_bounds, allocator_.GenerateId()); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 if (embedded_tree_new && embedded_tree_new != owning_tree_old && | 389 if (embedded_tree_new && embedded_tree_new != owning_tree_old && |
| 358 embedded_tree_new != embedded_tree_old) { | 390 embedded_tree_new != embedded_tree_old) { |
| 359 DCHECK_NE(owning_tree_new, embedded_tree_new); | 391 DCHECK_NE(owning_tree_new, embedded_tree_new); |
| 360 embedded_tree_new->ProcessFocusChanged(old_focused_window, | 392 embedded_tree_new->ProcessFocusChanged(old_focused_window, |
| 361 new_focused_window); | 393 new_focused_window); |
| 362 } | 394 } |
| 363 } | 395 } |
| 364 | 396 |
| 365 // WindowManagers are always notified of focus changes. | 397 // WindowManagers are always notified of focus changes. |
| 366 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); | 398 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); |
| 367 if (display_root) { | 399 if (display_root && display_root->window_manager_state()) { |
| 368 WindowTree* wm_tree = display_root->window_manager_state()->window_tree(); | 400 WindowTree* wm_tree = display_root->window_manager_state()->window_tree(); |
| 369 if (wm_tree != owning_tree_old && wm_tree != embedded_tree_old && | 401 if (wm_tree != owning_tree_old && wm_tree != embedded_tree_old && |
| 370 wm_tree != owning_tree_new && wm_tree != embedded_tree_new) { | 402 wm_tree != owning_tree_new && wm_tree != embedded_tree_new) { |
| 371 wm_tree->ProcessFocusChanged(old_focused_window, new_focused_window); | 403 wm_tree->ProcessFocusChanged(old_focused_window, new_focused_window); |
| 372 } | 404 } |
| 373 } | 405 } |
| 374 | 406 |
| 375 UpdateTextInputState(new_focused_window, | 407 UpdateTextInputState(new_focused_window, |
| 376 new_focused_window->text_input_state()); | 408 new_focused_window->text_input_state()); |
| 377 } | 409 } |
| 378 | 410 |
| 379 void Display::OnUserIdRemoved(const UserId& id) { | 411 void Display::OnUserIdRemoved(const UserId& id) { |
| 380 window_manager_display_root_map_.erase(id); | 412 window_manager_display_root_map_.erase(id); |
| 381 } | 413 } |
| 382 | 414 |
| 383 void Display::OnWindowManagerWindowTreeFactoryReady( | 415 void Display::OnWindowManagerWindowTreeFactoryReady( |
| 384 WindowManagerWindowTreeFactory* factory) { | 416 WindowManagerWindowTreeFactory* factory) { |
| 385 if (!binding_) | 417 if (!binding_) |
| 386 CreateWindowManagerDisplayRootFromFactory(factory); | 418 CreateWindowManagerDisplayRootFromFactory(factory); |
| 387 } | 419 } |
| 388 | 420 |
| 389 } // namespace ws | 421 } // namespace ws |
| 390 } // namespace ui | 422 } // namespace ui |
| OLD | NEW |