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

Unified Diff: ash/mus/root_window_controller.cc

Issue 2033843003: Makes ash/mus use RootWindowControllerCommon (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_mash_wm
Patch Set: tweaks Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: ash/mus/root_window_controller.cc
diff --git a/ash/mus/root_window_controller.cc b/ash/mus/root_window_controller.cc
index c8426434ad49442e472a56dc602c5b91d01cfc95..64d7185cac51e8e91686f7d7ae1f102286cdf6d8 100644
--- a/ash/mus/root_window_controller.cc
+++ b/ash/mus/root_window_controller.cc
@@ -9,19 +9,19 @@
#include <map>
#include <sstream>
+#include "ash/common/root_window_controller_common.h"
#include "ash/common/shell_window_ids.h"
#include "ash/common/wm/always_on_top_controller.h"
#include "ash/common/wm/dock/docked_window_layout_manager.h"
#include "ash/common/wm/panels/panel_layout_manager.h"
+#include "ash/common/wm/root_window_layout_manager.h"
#include "ash/common/wm/workspace/workspace_layout_manager.h"
#include "ash/common/wm/workspace/workspace_layout_manager_delegate.h"
-#include "ash/mus/background_layout.h"
#include "ash/mus/bridge/wm_globals_mus.h"
#include "ash/mus/bridge/wm_root_window_controller_mus.h"
#include "ash/mus/bridge/wm_shelf_mus.h"
#include "ash/mus/bridge/wm_window_mus.h"
#include "ash/mus/container_ids.h"
-#include "ash/mus/fill_layout.h"
#include "ash/mus/screenlock_layout.h"
#include "ash/mus/shadow_controller.h"
#include "ash/mus/shelf_layout_manager.h"
@@ -56,10 +56,6 @@ void AssertTrue(bool success) {
DCHECK(success);
}
-int ContainerToLocalId(Container container) {
- return static_cast<int>(container);
-}
-
class WorkspaceLayoutManagerDelegateImpl
: public wm::WorkspaceLayoutManagerDelegate {
public:
@@ -113,13 +109,20 @@ shell::Connector* RootWindowController::GetConnector() {
::mus::Window* RootWindowController::GetWindowForContainer(
Container container) {
- return root_->GetChildByLocalId(ContainerToLocalId(container));
+ WmWindowMus* wm_window =
+ GetWindowByShellWindowId(MashContainerToAshShellWindowId(container));
+ DCHECK(wm_window);
+ return wm_window->mus_window();
+}
+
+bool RootWindowController::WindowIsContainer(::mus::Window* window) {
+ return window &&
+ WmWindowMus::Get(window)->GetShellWindowId() != kShellWindowId_Invalid;
James Cook 2016/06/03 00:24:58 It's hard to see where kShellWindowId_Invalid is r
sky 2016/06/03 03:07:03 It's actually set in aura::Window and mus::Window.
James Cook 2016/06/03 16:13:16 Yeah, I found them, but it's a magic number that h
sky 2016/06/03 17:39:04 I ended up going with a static_assert for aura and
}
-bool RootWindowController::WindowIsContainer(
- const ::mus::Window* window) const {
- return window && window->local_id() > ContainerToLocalId(Container::ROOT) &&
- window->local_id() < ContainerToLocalId(Container::COUNT);
+WmWindowMus* RootWindowController::GetWindowByShellWindowId(int id) {
+ return WmWindowMus::AsWmWindowMus(
+ WmWindowMus::Get(root_)->GetChildByShellWindowId(id));
}
::mus::WindowManagerClient* RootWindowController::window_manager_client() {
@@ -165,25 +168,34 @@ void RootWindowController::AddAccelerators() {
void RootWindowController::OnEmbed(::mus::Window* root) {
root_ = root;
- root_->set_local_id(ContainerToLocalId(Container::ROOT));
root_->AddObserver(this);
- layout_managers_[root_].reset(new FillLayout(root_));
app_->OnRootWindowControllerGotRoot(this);
wm_root_window_controller_.reset(
new WmRootWindowControllerMus(app_->globals(), this));
- CreateContainers();
+ root_window_controller_common_.reset(
+ new RootWindowControllerCommon(WmWindowMus::Get(root_)));
+ root_window_controller_common_->CreateContainers();
+ root_window_controller_common_->CreateLayoutManagers();
+ CreateLayoutManagers();
+
+ // Force a layout of the root, and its children, RootWindowLayout handles
+ // both.
+ root_window_controller_common_->root_window_layout()->OnWindowResized();
for (size_t i = 0; i < kNumActivationContainers; ++i) {
- window_manager_client()->AddActivationParent(
- GetWindowForContainer(kActivationContainers[i]));
+ // kShellWindowId_VirtualKeyboardContainer is lazily created.
+ // TODO(sky): http://crbug.com/616909 .
+ if (kActivationContainers[i] != kShellWindowId_VirtualKeyboardContainer) {
+ window_manager_client()->AddActivationParent(
+ GetWindowByShellWindowId(kActivationContainers[i])->mus_window());
+ }
}
- wm::WmWindow* always_on_top_container =
- WmWindowMus::Get(root)->GetChildByShellWindowId(
- kShellWindowId_AlwaysOnTopContainer);
+ WmWindowMus* always_on_top_container =
+ GetWindowByShellWindowId(kShellWindowId_AlwaysOnTopContainer);
always_on_top_controller_.reset(
new AlwaysOnTopController(always_on_top_container));
@@ -229,123 +241,46 @@ void RootWindowController::OnShelfWindowAvailable() {
// docked_layout_manager_->AddObserver(shelf_->shelf_layout_manager());
}
-void RootWindowController::CreateContainer(Container container,
- Container parent_container) {
- // Set the window's name to the container name (e.g. "Container::LOGIN"),
- // which makes the window hierarchy easier to read.
- std::map<std::string, std::vector<uint8_t>> properties;
- std::ostringstream container_name;
- container_name << container;
- properties[::mus::mojom::WindowManager::kName_Property] =
- mojo::ConvertTo<std::vector<uint8_t>>(container_name.str());
-
- ::mus::Window* window = root_->window_tree()->NewWindow(&properties);
- window->set_local_id(ContainerToLocalId(container));
- layout_managers_[window].reset(new FillLayout(window));
- WmWindowMus::Get(window)->SetShellWindowId(
- MashContainerToAshContainer(container));
-
- // User private windows are hidden by default until the window manager learns
- // the lock state, so their contents are never accidentally revealed. Tests,
- // however, usually assume the screen is unlocked.
- const bool is_test = base::CommandLine::ForCurrentProcess()->HasSwitch(
James Cook 2016/06/03 00:24:58 views_mus_unittests are OK after removing this? I'
sky 2016/06/03 03:07:03 They passed locally. I'll find out shortly if the
James Cook 2016/06/03 16:13:16 Oh, I think it's actually views_mus_interactive_ui
sky 2016/06/03 17:39:04 They pass locally. Fingers crossed.
- ::mus::switches::kUseTestConfig);
- window->SetVisible(container != Container::USER_PRIVATE || is_test);
-
- ::mus::Window* parent =
- root_->GetChildByLocalId(ContainerToLocalId(parent_container));
- parent->AddChild(window);
-}
-
-void RootWindowController::CreateContainers() {
- CreateContainer(Container::ALL_USER_BACKGROUND, Container::ROOT);
- CreateContainer(Container::USER, Container::ROOT);
- CreateContainer(Container::USER_BACKGROUND, Container::USER);
- CreateContainer(Container::USER_PRIVATE, Container::USER);
- CreateContainer(Container::USER_PRIVATE_WINDOWS, Container::USER_PRIVATE);
- CreateContainer(Container::USER_PRIVATE_ALWAYS_ON_TOP_WINDOWS,
- Container::USER_PRIVATE);
- CreateContainer(Container::USER_PRIVATE_DOCKED_WINDOWS,
- Container::USER_PRIVATE);
- CreateContainer(Container::USER_PRIVATE_PRESENTATION_WINDOWS,
- Container::USER_PRIVATE);
- CreateContainer(Container::USER_PRIVATE_SHELF, Container::USER_PRIVATE);
- CreateContainer(Container::USER_PRIVATE_PANELS, Container::USER_PRIVATE);
- CreateContainer(Container::USER_PRIVATE_APP_LIST, Container::USER_PRIVATE);
- CreateContainer(Container::USER_PRIVATE_SYSTEM_MODAL,
- Container::USER_PRIVATE);
- CreateContainer(Container::LOGIN, Container::ROOT);
- CreateContainer(Container::LOGIN_WINDOWS, Container::LOGIN);
- CreateContainer(Container::LOGIN_APP, Container::LOGIN);
- CreateContainer(Container::LOGIN_SHELF, Container::LOGIN);
- CreateContainer(Container::STATUS, Container::ROOT);
- CreateContainer(Container::BUBBLES, Container::ROOT);
- CreateContainer(Container::SYSTEM_MODAL_WINDOWS, Container::ROOT);
- CreateContainer(Container::KEYBOARD, Container::ROOT);
- CreateContainer(Container::MENUS, Container::ROOT);
- CreateContainer(Container::DRAG_AND_TOOLTIPS, Container::ROOT);
-
+void RootWindowController::CreateLayoutManagers() {
// Override the default layout managers for certain containers.
- ::mus::Window* user_background =
- GetWindowForContainer(Container::USER_BACKGROUND);
- layout_managers_[user_background].reset(
- new BackgroundLayout(user_background));
-
- ::mus::Window* login_app = GetWindowForContainer(Container::LOGIN_APP);
- layout_managers_[login_app].reset(new ScreenlockLayout(login_app));
+ WmWindowMus* lock_screen_container =
+ GetWindowByShellWindowId(kShellWindowId_LockScreenContainer);
+ layout_managers_[lock_screen_container->mus_window()].reset(
+ new ScreenlockLayout(lock_screen_container->mus_window()));
- ::mus::Window* user_shelf =
- GetWindowForContainer(Container::USER_PRIVATE_SHELF);
+ WmWindowMus* shelf_container =
+ GetWindowByShellWindowId(kShellWindowId_ShelfContainer);
ShelfLayoutManager* shelf_layout_manager =
- new ShelfLayoutManager(user_shelf, this);
- layout_managers_[user_shelf].reset(shelf_layout_manager);
+ new ShelfLayoutManager(shelf_container->mus_window(), this);
+ layout_managers_[shelf_container->mus_window()].reset(shelf_layout_manager);
wm_shelf_.reset(new WmShelfMus(shelf_layout_manager));
- ::mus::Window* status = GetWindowForContainer(Container::STATUS);
- layout_managers_[status].reset(new StatusLayoutManager(status));
+ WmWindowMus* status_container =
+ GetWindowByShellWindowId(kShellWindowId_StatusContainer);
+ layout_managers_[status_container->mus_window()].reset(
+ new StatusLayoutManager(status_container->mus_window()));
- ::mus::Window* user_private_windows =
- GetWindowForContainer(Container::USER_PRIVATE_WINDOWS);
+ WmWindowMus* default_container =
+ GetWindowByShellWindowId(kShellWindowId_DefaultContainer);
// WorkspaceLayoutManager is not a mash::wm::LayoutManager (it's a
// wm::LayoutManager), so it can't be in |layout_managers_|.
- layout_managers_.erase(user_private_windows);
std::unique_ptr<WorkspaceLayoutManagerDelegateImpl>
workspace_layout_manager_delegate(new WorkspaceLayoutManagerDelegateImpl(
wm_root_window_controller_.get()));
- WmWindowMus* user_private_windows_wm = WmWindowMus::Get(user_private_windows);
- user_private_windows_wm->SetSnapsChildrenToPhysicalPixelBoundary();
- user_private_windows_wm->SetChildrenUseExtendedHitRegion();
- user_private_windows_wm->SetLayoutManager(
+ default_container->SetLayoutManager(
base::WrapUnique(new WorkspaceLayoutManager(
- user_private_windows_wm,
- std::move(workspace_layout_manager_delegate))));
-
- ::mus::Window* user_private_docked_windows =
- GetWindowForContainer(Container::USER_PRIVATE_DOCKED_WINDOWS);
- WmWindowMus* user_private_docked_windows_wm =
- WmWindowMus::Get(user_private_docked_windows);
- user_private_docked_windows_wm->SetSnapsChildrenToPhysicalPixelBoundary();
- layout_managers_.erase(user_private_docked_windows);
- user_private_docked_windows_wm->SetChildrenUseExtendedHitRegion();
- user_private_docked_windows_wm->SetLayoutManager(base::WrapUnique(
- new DockedWindowLayoutManager(user_private_docked_windows_wm)));
-
- ::mus::Window* user_private_panels =
- GetWindowForContainer(Container::USER_PRIVATE_PANELS);
- WmWindowMus* user_private_panels_wm = WmWindowMus::Get(user_private_panels);
- user_private_panels_wm->SetSnapsChildrenToPhysicalPixelBoundary();
- layout_managers_.erase(user_private_panels);
- user_private_panels_wm->SetChildrenUseExtendedHitRegion();
- user_private_panels_wm->SetLayoutManager(
- base::WrapUnique(new PanelLayoutManager(user_private_panels_wm)));
-
- ::mus::Window* user_private_always_on_top =
- GetWindowForContainer(Container::USER_PRIVATE_ALWAYS_ON_TOP_WINDOWS);
- WmWindowMus* user_private_always_on_top_wm =
- WmWindowMus::Get(user_private_always_on_top);
- user_private_always_on_top_wm->SetChildrenUseExtendedHitRegion();
- user_private_always_on_top_wm->SetSnapsChildrenToPhysicalPixelBoundary();
+ default_container, std::move(workspace_layout_manager_delegate))));
+
+ WmWindowMus* docked_container =
+ GetWindowByShellWindowId(kShellWindowId_DockedContainer);
+ docked_container->SetLayoutManager(
+ base::WrapUnique(new DockedWindowLayoutManager(docked_container)));
+
+ WmWindowMus* panel_container =
+ GetWindowByShellWindowId(kShellWindowId_PanelContainer);
+ panel_container->SetLayoutManager(
+ base::WrapUnique(new PanelLayoutManager(panel_container)));
}
} // namespace mus

Powered by Google App Engine
This is Rietveld 408576698