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

Side by Side Diff: ash/mus/window_manager.cc

Issue 2625873007: Promotes WmWindowMus functions to WmWindowAura and nukes WmWindowMus (Closed)
Patch Set: cleanup Created 3 years, 11 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
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 "ash/mus/window_manager.h" 5 #include "ash/mus/window_manager.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
11 #include "ash/aura/wm_window_aura.h"
11 #include "ash/common/wm/container_finder.h" 12 #include "ash/common/wm/container_finder.h"
12 #include "ash/common/wm/window_state.h" 13 #include "ash/common/wm/window_state.h"
13 #include "ash/display/screen_position_controller.h" 14 #include "ash/display/screen_position_controller.h"
14 #include "ash/mus/accelerators/accelerator_handler.h" 15 #include "ash/mus/accelerators/accelerator_handler.h"
15 #include "ash/mus/accelerators/accelerator_ids.h" 16 #include "ash/mus/accelerators/accelerator_ids.h"
16 #include "ash/mus/bridge/wm_lookup_mus.h" 17 #include "ash/mus/bridge/wm_lookup_mus.h"
17 #include "ash/mus/bridge/wm_shell_mus.h" 18 #include "ash/mus/bridge/wm_shell_mus.h"
18 #include "ash/mus/bridge/wm_window_mus.h"
19 #include "ash/mus/move_event_handler.h" 19 #include "ash/mus/move_event_handler.h"
20 #include "ash/mus/non_client_frame_controller.h" 20 #include "ash/mus/non_client_frame_controller.h"
21 #include "ash/mus/property_util.h" 21 #include "ash/mus/property_util.h"
22 #include "ash/mus/root_window_controller.h" 22 #include "ash/mus/root_window_controller.h"
23 #include "ash/mus/screen_mus.h" 23 #include "ash/mus/screen_mus.h"
24 #include "ash/mus/shadow_controller.h" 24 #include "ash/mus/shadow_controller.h"
25 #include "ash/mus/shell_delegate_mus.h" 25 #include "ash/mus/shell_delegate_mus.h"
26 #include "ash/mus/window_manager_observer.h" 26 #include "ash/mus/window_manager_observer.h"
27 #include "ash/mus/window_properties.h" 27 #include "ash/mus/window_properties.h"
28 #include "ash/public/cpp/shell_window_ids.h" 28 #include "ash/public/cpp/shell_window_ids.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 kPanelAttachedKey, ui::mojom::WindowManager::kPanelAttached_Property); 88 kPanelAttachedKey, ui::mojom::WindowManager::kPanelAttached_Property);
89 property_converter_->RegisterProperty( 89 property_converter_->RegisterProperty(
90 kRenderTitleAreaProperty, 90 kRenderTitleAreaProperty,
91 ui::mojom::WindowManager::kRenderParentTitleArea_Property); 91 ui::mojom::WindowManager::kRenderParentTitleArea_Property);
92 property_converter_->RegisterProperty( 92 property_converter_->RegisterProperty(
93 kShelfItemTypeKey, ui::mojom::WindowManager::kShelfItemType_Property); 93 kShelfItemTypeKey, ui::mojom::WindowManager::kShelfItemType_Property);
94 } 94 }
95 95
96 WindowManager::~WindowManager() { 96 WindowManager::~WindowManager() {
97 Shutdown(); 97 Shutdown();
98 aura::Env::GetInstance()->RemoveObserver(this);
99 ash::Shell::set_window_tree_client(nullptr); 98 ash::Shell::set_window_tree_client(nullptr);
99 ash::Shell::set_window_manager_client(nullptr);
100 } 100 }
101 101
102 void WindowManager::Init( 102 void WindowManager::Init(
103 std::unique_ptr<aura::WindowTreeClient> window_tree_client, 103 std::unique_ptr<aura::WindowTreeClient> window_tree_client,
104 const scoped_refptr<base::SequencedWorkerPool>& blocking_pool) { 104 const scoped_refptr<base::SequencedWorkerPool>& blocking_pool) {
105 DCHECK(window_manager_client_); 105 DCHECK(window_manager_client_);
106 DCHECK(!window_tree_client_); 106 DCHECK(!window_tree_client_);
107 window_tree_client_ = std::move(window_tree_client); 107 window_tree_client_ = std::move(window_tree_client);
108 108
109 DCHECK_EQ(nullptr, ash::Shell::window_tree_client()); 109 DCHECK_EQ(nullptr, ash::Shell::window_tree_client());
110 ash::Shell::set_window_tree_client(window_tree_client_.get()); 110 ash::Shell::set_window_tree_client(window_tree_client_.get());
111 111
112 aura::Env::GetInstance()->AddObserver(this);
113
114 // |connector_| will be null in some tests. 112 // |connector_| will be null in some tests.
115 if (connector_) 113 if (connector_)
116 connector_->BindInterface(ui::mojom::kServiceName, &display_controller_); 114 connector_->BindInterface(ui::mojom::kServiceName, &display_controller_);
117 115
118 screen_ = base::MakeUnique<ScreenMus>(); 116 screen_ = base::MakeUnique<ScreenMus>();
119 display::Screen::SetScreenInstance(screen_.get()); 117 display::Screen::SetScreenInstance(screen_.get());
120 118
121 pointer_watcher_event_router_ = 119 pointer_watcher_event_router_ =
122 base::MakeUnique<views::PointerWatcherEventRouter>( 120 base::MakeUnique<views::PointerWatcherEventRouter>(
123 window_tree_client_.get()); 121 window_tree_client_.get());
(...skipping 27 matching lines...) Expand all
151 aura::Window* WindowManager::NewTopLevelWindow( 149 aura::Window* WindowManager::NewTopLevelWindow(
152 ui::mojom::WindowType window_type, 150 ui::mojom::WindowType window_type,
153 std::map<std::string, std::vector<uint8_t>>* properties) { 151 std::map<std::string, std::vector<uint8_t>>* properties) {
154 RootWindowController* root_window_controller = 152 RootWindowController* root_window_controller =
155 GetRootWindowControllerForNewTopLevelWindow(properties); 153 GetRootWindowControllerForNewTopLevelWindow(properties);
156 aura::Window* window = 154 aura::Window* window =
157 root_window_controller->NewTopLevelWindow(window_type, properties); 155 root_window_controller->NewTopLevelWindow(window_type, properties);
158 if (properties->count( 156 if (properties->count(
159 ui::mojom::WindowManager::kWindowIgnoredByShelf_Property)) { 157 ui::mojom::WindowManager::kWindowIgnoredByShelf_Property)) {
160 wm::WindowState* window_state = 158 wm::WindowState* window_state =
161 static_cast<WmWindow*>(WmWindowMus::Get(window))->GetWindowState(); 159 static_cast<WmWindow*>(WmWindowAura::Get(window))->GetWindowState();
162 window_state->set_ignored_by_shelf(mojo::ConvertTo<bool>( 160 window_state->set_ignored_by_shelf(mojo::ConvertTo<bool>(
163 (*properties) 161 (*properties)
164 [ui::mojom::WindowManager::kWindowIgnoredByShelf_Property])); 162 [ui::mojom::WindowManager::kWindowIgnoredByShelf_Property]));
165 // No need to persist this value. 163 // No need to persist this value.
166 properties->erase(ui::mojom::WindowManager::kWindowIgnoredByShelf_Property); 164 properties->erase(ui::mojom::WindowManager::kWindowIgnoredByShelf_Property);
167 } 165 }
168 return window; 166 return window;
169 } 167 }
170 168
171 std::set<RootWindowController*> WindowManager::GetRootWindowControllers() { 169 std::set<RootWindowController*> WindowManager::GetRootWindowControllers() {
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 302
305 window_tree_client_.reset(); 303 window_tree_client_.reset();
306 window_manager_client_ = nullptr; 304 window_manager_client_ = nullptr;
307 305
308 DCHECK_EQ(screen_.get(), display::Screen::GetScreen()); 306 DCHECK_EQ(screen_.get(), display::Screen::GetScreen());
309 display::Screen::SetScreenInstance(nullptr); 307 display::Screen::SetScreenInstance(nullptr);
310 } 308 }
311 309
312 RootWindowController* WindowManager::GetPrimaryRootWindowController() { 310 RootWindowController* WindowManager::GetPrimaryRootWindowController() {
313 return RootWindowController::ForWindow( 311 return RootWindowController::ForWindow(
314 static_cast<WmWindowMus*>( 312 static_cast<WmWindowAura*>(
315 WmShell::Get()->GetPrimaryRootWindowController()->GetWindow()) 313 WmShell::Get()->GetPrimaryRootWindowController()->GetWindow())
316 ->aura_window()); 314 ->aura_window());
317 } 315 }
318 316
319 RootWindowController* 317 RootWindowController*
320 WindowManager::GetRootWindowControllerForNewTopLevelWindow( 318 WindowManager::GetRootWindowControllerForNewTopLevelWindow(
321 std::map<std::string, std::vector<uint8_t>>* properties) { 319 std::map<std::string, std::vector<uint8_t>>* properties) {
322 // If a specific display was requested, use it. 320 // If a specific display was requested, use it.
323 const int64_t display_id = GetInitialDisplayId(*properties); 321 const int64_t display_id = GetInitialDisplayId(*properties);
324 for (auto& root_window_controller_ptr : root_window_controllers_) { 322 for (auto& root_window_controller_ptr : root_window_controllers_) {
325 if (root_window_controller_ptr->display().id() == display_id) 323 if (root_window_controller_ptr->display().id() == display_id)
326 return root_window_controller_ptr.get(); 324 return root_window_controller_ptr.get();
327 } 325 }
328 326
329 return RootWindowController::ForWindow( 327 return RootWindowController::ForWindow(
330 static_cast<WmWindowMus*>(WmShellMus::Get()->GetRootWindowForNewWindows()) 328 static_cast<WmWindowAura*>(
329 WmShellMus::Get()->GetRootWindowForNewWindows())
331 ->aura_window()); 330 ->aura_window());
332 } 331 }
333 332
334 void WindowManager::OnEmbed( 333 void WindowManager::OnEmbed(
335 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) { 334 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) {
336 // WindowManager should never see this, instead OnWmNewDisplay() is called. 335 // WindowManager should never see this, instead OnWmNewDisplay() is called.
337 NOTREACHED(); 336 NOTREACHED();
338 } 337 }
339 338
340 void WindowManager::OnEmbedRootDestroyed( 339 void WindowManager::OnEmbedRootDestroyed(
(...skipping 17 matching lines...) Expand all
358 aura::client::CaptureClient* WindowManager::GetCaptureClient() { 357 aura::client::CaptureClient* WindowManager::GetCaptureClient() {
359 return wm_state_->capture_controller(); 358 return wm_state_->capture_controller();
360 } 359 }
361 360
362 aura::PropertyConverter* WindowManager::GetPropertyConverter() { 361 aura::PropertyConverter* WindowManager::GetPropertyConverter() {
363 return property_converter_.get(); 362 return property_converter_.get();
364 } 363 }
365 364
366 void WindowManager::SetWindowManagerClient(aura::WindowManagerClient* client) { 365 void WindowManager::SetWindowManagerClient(aura::WindowManagerClient* client) {
367 window_manager_client_ = client; 366 window_manager_client_ = client;
367 ash::Shell::set_window_manager_client(client);
368 } 368 }
369 369
370 bool WindowManager::OnWmSetBounds(aura::Window* window, gfx::Rect* bounds) { 370 bool WindowManager::OnWmSetBounds(aura::Window* window, gfx::Rect* bounds) {
371 // TODO(sky): this indirectly sets bounds, which is against what 371 // TODO(sky): this indirectly sets bounds, which is against what
372 // OnWmSetBounds() recommends doing. Remove that restriction, or fix this. 372 // OnWmSetBounds() recommends doing. Remove that restriction, or fix this.
373 WmWindowMus::Get(window)->SetBounds(*bounds); 373 WmWindowAura::Get(window)->SetBounds(*bounds);
374 *bounds = window->bounds(); 374 *bounds = window->bounds();
375 return true; 375 return true;
376 } 376 }
377 377
378 bool WindowManager::OnWmSetProperty( 378 bool WindowManager::OnWmSetProperty(
379 aura::Window* window, 379 aura::Window* window,
380 const std::string& name, 380 const std::string& name,
381 std::unique_ptr<std::vector<uint8_t>>* new_data) { 381 std::unique_ptr<std::vector<uint8_t>>* new_data) {
382 // TODO(sky): constrain this to set of keys we know about, and allowed values. 382 // TODO(sky): constrain this to set of keys we know about, and allowed values.
383 if (name == ui::mojom::WindowManager::kWindowIgnoredByShelf_Property) { 383 if (name == ui::mojom::WindowManager::kWindowIgnoredByShelf_Property) {
384 wm::WindowState* window_state = 384 wm::WindowState* window_state = WmWindowAura::Get(window)->GetWindowState();
385 static_cast<WmWindow*>(WmWindowMus::Get(window))->GetWindowState();
386 window_state->set_ignored_by_shelf( 385 window_state->set_ignored_by_shelf(
387 new_data ? mojo::ConvertTo<bool>(**new_data) : false); 386 new_data ? mojo::ConvertTo<bool>(**new_data) : false);
388 return false; // Won't attempt to map through property converter. 387 return false; // Won't attempt to map through property converter.
389 } 388 }
390 return name == ui::mojom::WindowManager::kAppIcon_Property || 389 return name == ui::mojom::WindowManager::kAppIcon_Property ||
391 name == ui::mojom::WindowManager::kShowState_Property || 390 name == ui::mojom::WindowManager::kShowState_Property ||
392 name == ui::mojom::WindowManager::kPreferredSize_Property || 391 name == ui::mojom::WindowManager::kPreferredSize_Property ||
393 name == ui::mojom::WindowManager::kResizeBehavior_Property || 392 name == ui::mojom::WindowManager::kResizeBehavior_Property ||
394 name == ui::mojom::WindowManager::kShelfItemType_Property || 393 name == ui::mojom::WindowManager::kShelfItemType_Property ||
395 name == ui::mojom::WindowManager::kWindowIcon_Property || 394 name == ui::mojom::WindowManager::kWindowIcon_Property ||
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 } 460 }
462 461
463 NOTREACHED(); 462 NOTREACHED();
464 } 463 }
465 464
466 void WindowManager::OnWmPerformMoveLoop( 465 void WindowManager::OnWmPerformMoveLoop(
467 aura::Window* window, 466 aura::Window* window,
468 ui::mojom::MoveLoopSource source, 467 ui::mojom::MoveLoopSource source,
469 const gfx::Point& cursor_location, 468 const gfx::Point& cursor_location,
470 const base::Callback<void(bool)>& on_done) { 469 const base::Callback<void(bool)>& on_done) {
471 WmWindowMus* child_window = WmWindowMus::Get(window); 470 WmWindowAura* child_window = WmWindowAura::Get(window);
472 MoveEventHandler* handler = MoveEventHandler::GetForWindow(child_window); 471 MoveEventHandler* handler = MoveEventHandler::GetForWindow(child_window);
473 if (!handler) { 472 if (!handler) {
474 on_done.Run(false); 473 on_done.Run(false);
475 return; 474 return;
476 } 475 }
477 476
478 DCHECK(!handler->IsDragInProgress()); 477 DCHECK(!handler->IsDragInProgress());
479 aura::client::WindowMoveSource aura_source = 478 aura::client::WindowMoveSource aura_source =
480 source == ui::mojom::MoveLoopSource::MOUSE 479 source == ui::mojom::MoveLoopSource::MOUSE
481 ? aura::client::WINDOW_MOVE_SOURCE_MOUSE 480 ? aura::client::WINDOW_MOVE_SOURCE_MOUSE
482 : aura::client::WINDOW_MOVE_SOURCE_TOUCH; 481 : aura::client::WINDOW_MOVE_SOURCE_TOUCH;
483 handler->AttemptToStartDrag(cursor_location, HTCAPTION, aura_source, on_done); 482 handler->AttemptToStartDrag(cursor_location, HTCAPTION, aura_source, on_done);
484 } 483 }
485 484
486 void WindowManager::OnWmCancelMoveLoop(aura::Window* window) { 485 void WindowManager::OnWmCancelMoveLoop(aura::Window* window) {
487 WmWindowMus* child_window = WmWindowMus::Get(window); 486 WmWindowAura* child_window = WmWindowAura::Get(window);
488 MoveEventHandler* handler = MoveEventHandler::GetForWindow(child_window); 487 MoveEventHandler* handler = MoveEventHandler::GetForWindow(child_window);
489 if (handler) 488 if (handler)
490 handler->RevertDrag(); 489 handler->RevertDrag();
491 } 490 }
492 491
493 ui::mojom::EventResult WindowManager::OnAccelerator(uint32_t id, 492 ui::mojom::EventResult WindowManager::OnAccelerator(uint32_t id,
494 const ui::Event& event) { 493 const ui::Event& event) {
495 auto iter = accelerator_handlers_.find(GetAcceleratorNamespaceId(id)); 494 auto iter = accelerator_handlers_.find(GetAcceleratorNamespaceId(id));
496 if (iter == accelerator_handlers_.end()) 495 if (iter == accelerator_handlers_.end())
497 return ui::mojom::EventResult::HANDLED; 496 return ui::mojom::EventResult::HANDLED;
498 497
499 return iter->second->OnAccelerator(id, event); 498 return iter->second->OnAccelerator(id, event);
500 } 499 }
501 500
502 void WindowManager::OnWmSetClientArea( 501 void WindowManager::OnWmSetClientArea(
503 aura::Window* window, 502 aura::Window* window,
504 const gfx::Insets& insets, 503 const gfx::Insets& insets,
505 const std::vector<gfx::Rect>& additional_client_areas) { 504 const std::vector<gfx::Rect>& additional_client_areas) {
506 NonClientFrameController* non_client_frame_controller = 505 NonClientFrameController* non_client_frame_controller =
507 NonClientFrameController::Get(window); 506 NonClientFrameController::Get(window);
508 if (!non_client_frame_controller) 507 if (!non_client_frame_controller)
509 return; 508 return;
510 non_client_frame_controller->SetClientArea(insets, additional_client_areas); 509 non_client_frame_controller->SetClientArea(insets, additional_client_areas);
511 } 510 }
512 511
513 void WindowManager::OnWindowInitialized(aura::Window* window) {
514 // This ensures WmWindowAura won't be called before WmWindowMus. This is
515 // important as if WmWindowAura::Get() is called first, then WmWindowAura
516 // would be created, not WmWindowMus.
517 WmWindowMus::Get(window);
518 }
519
520 } // namespace mus 512 } // namespace mus
521 } // namespace ash 513 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698