diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-11 08:13:45 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-11 08:13:45 +0000 |
commit | f5c9dbcb852de1cd6ce1bd293920c8c64a7ad9d9 (patch) | |
tree | 57061cf0622e2b9edee2428ac332de8967bccdea /ash/root_window_controller.cc | |
parent | 728f28f2dfd7e22a414a8657229af008a19d7a9d (diff) | |
download | chromium_src-f5c9dbcb852de1cd6ce1bd293920c8c64a7ad9d9.zip chromium_src-f5c9dbcb852de1cd6ce1bd293920c8c64a7ad9d9.tar.gz chromium_src-f5c9dbcb852de1cd6ce1bd293920c8c64a7ad9d9.tar.bz2 |
Introdcue AshWindowTreeHost and move ash/chrome specific code in WTH to ash.
Other notable changes:
* Removed WindowTreeHostFactory as this is no longer necessary.
* Moved RootWindowTransformer to ash/host
* Removed Set/GetInsets which are no longer necessary (a code in SetInsets is now a part of
SetRootWindowTransformer)
* Added TransformerHelper that implements common behavior to transform root window for AshWindowTreeHost
* Added DEPS files
* Updated metro_viewer code to make sure it creates ash::AshRemoteWindowHostTree
A few more simplifications to come:
* Simplify RootWindowTransformer
* Eliminate EnvObserver in AshWindowTreeHostX11
I'll also work on DEPS reorg to make it more explicit under ash/
BUG=355771
TEST=No functional change. ui/aura/window_tree_host_x11_unittests has been moved to ash/host/ash_window_tree_host_x11_unittests
Review URL: https://codereview.chromium.org/201573015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263192 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/root_window_controller.cc')
-rw-r--r-- | ash/root_window_controller.cc | 111 |
1 files changed, 65 insertions, 46 deletions
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc index d4878b6..6477b14 100644 --- a/ash/root_window_controller.cc +++ b/ash/root_window_controller.cc @@ -15,6 +15,7 @@ #include "ash/display/display_manager.h" #include "ash/focus_cycler.h" #include "ash/high_contrast/high_contrast_controller.h" +#include "ash/host/ash_window_tree_host.h" #include "ash/root_window_settings.h" #include "ash/session_state_delegate.h" #include "ash/shelf/shelf_layout_manager.h" @@ -258,20 +259,19 @@ class EmptyWindowDelegate : public aura::WindowDelegate { } // namespace -void RootWindowController::CreateForPrimaryDisplay(aura::WindowTreeHost* host) { +void RootWindowController::CreateForPrimaryDisplay(AshWindowTreeHost* host) { RootWindowController* controller = new RootWindowController(host); controller->Init(RootWindowController::PRIMARY, Shell::GetInstance()->delegate()->IsFirstRunAfterBoot()); } -void RootWindowController::CreateForSecondaryDisplay( - aura::WindowTreeHost* host) { +void RootWindowController::CreateForSecondaryDisplay(AshWindowTreeHost* host) { RootWindowController* controller = new RootWindowController(host); controller->Init(RootWindowController::SECONDARY, false /* first run */); } void RootWindowController::CreateForVirtualKeyboardDisplay( - aura::WindowTreeHost* host) { + AshWindowTreeHost* host) { RootWindowController* controller = new RootWindowController(host); controller->Init(RootWindowController::VIRTUAL_KEYBOARD, false /* first run */); @@ -304,12 +304,28 @@ aura::Window* RootWindowController::GetContainerForWindow( RootWindowController::~RootWindowController() { Shutdown(); - host_.reset(); + ash_host_.reset(); // The CaptureClient needs to be around for as long as the RootWindow is // valid. capture_client_.reset(); } +aura::WindowTreeHost* RootWindowController::GetHost() { + return ash_host_->AsWindowTreeHost(); +} + +const aura::WindowTreeHost* RootWindowController::GetHost() const { + return ash_host_->AsWindowTreeHost(); +} + +aura::Window* RootWindowController::GetRootWindow() { + return GetHost()->window(); +} + +const aura::Window* RootWindowController::GetRootWindow() const { + return GetHost()->window(); +} + void RootWindowController::SetWallpaperController( DesktopBackgroundWidgetController* controller) { wallpaper_controller_.reset(controller); @@ -329,29 +345,30 @@ void RootWindowController::Shutdown() { animating_wallpaper_controller_->StopAnimating(); wallpaper_controller_.reset(); animating_wallpaper_controller_.reset(); - + aura::Window* root_window = GetRootWindow(); // Change the target root window before closing child windows. If any child // being removed triggers a relayout of the shelf it will try to build a // window list adding windows from the target root window's containers which // may have already gone away. - if (Shell::GetTargetRootWindow() == root_window()) { + if (Shell::GetTargetRootWindow() == root_window) { Shell::GetInstance()->set_target_root_window( - Shell::GetPrimaryRootWindow() == root_window() ? - NULL : Shell::GetPrimaryRootWindow()); + Shell::GetPrimaryRootWindow() == root_window + ? NULL + : Shell::GetPrimaryRootWindow()); } CloseChildWindows(); - GetRootWindowSettings(root_window())->controller = NULL; + GetRootWindowSettings(root_window)->controller = NULL; screen_dimmer_.reset(); workspace_controller_.reset(); // Forget with the display ID so that display lookup // ends up with invalid display. - GetRootWindowSettings(root_window())->display_id = + GetRootWindowSettings(root_window)->display_id = gfx::Display::kInvalidDisplayID; - GetRootWindowSettings(root_window())->shutdown = true; + GetRootWindowSettings(root_window)->shutdown = true; system_background_.reset(); - aura::client::SetScreenPositionClient(root_window(), NULL); + aura::client::SetScreenPositionClient(root_window, NULL); } SystemModalContainerLayoutManager* @@ -376,11 +393,11 @@ RootWindowController::GetSystemModalLayoutManager(aura::Window* window) { } aura::Window* RootWindowController::GetContainer(int container_id) { - return root_window()->GetChildById(container_id); + return GetRootWindow()->GetChildById(container_id); } const aura::Window* RootWindowController::GetContainer(int container_id) const { - return host_->window()->GetChildById(container_id); + return ash_host_->AsWindowTreeHost()->window()->GetChildById(container_id); } void RootWindowController::ShowShelf() { @@ -464,8 +481,8 @@ void RootWindowController::CloseChildWindows() { docked_layout_manager_->Shutdown(); docked_layout_manager_ = NULL; } - - aura::client::SetDragDropClient(root_window(), NULL); + aura::Window* root_window = GetRootWindow(); + aura::client::SetDragDropClient(root_window, NULL); // TODO(harrym): Remove when Status Area Widget is a child view. if (shelf_) { @@ -480,12 +497,12 @@ void RootWindowController::CloseChildWindows() { animating_wallpaper_controller_.reset(); workspace_controller_.reset(); - aura::client::SetTooltipClient(root_window(), NULL); + aura::client::SetTooltipClient(root_window, NULL); // Explicitly destroy top level windows. We do this as during part of // destruction such windows may query the RootWindow for state. std::queue<aura::Window*> non_toplevel_windows; - non_toplevel_windows.push(root_window()); + non_toplevel_windows.push(root_window); while (!non_toplevel_windows.empty()) { aura::Window* non_toplevel_window = non_toplevel_windows.front(); non_toplevel_windows.pop(); @@ -503,12 +520,12 @@ void RootWindowController::CloseChildWindows() { delete *toplevel_windows.windows().begin(); } // And then remove the containers. - while (!root_window()->children().empty()) { - aura::Window* window = root_window()->children()[0]; + while (!root_window->children().empty()) { + aura::Window* window = root_window->children()[0]; if (window->owned_by_parent()) { delete window; } else { - root_window()->RemoveChild(window); + root_window->RemoveChild(window); } } @@ -519,7 +536,7 @@ void RootWindowController::MoveWindowsTo(aura::Window* dst) { // Forget the shelf early so that shelf don't update itself using wrong // display info. workspace_controller_->SetShelf(NULL); - ReparentAllWindows(root_window(), dst); + ReparentAllWindows(GetRootWindow(), dst); } ShelfLayoutManager* RootWindowController::GetShelfLayoutManager() { @@ -537,9 +554,8 @@ void RootWindowController::ShowContextMenu(const gfx::Point& location_in_screen, ui::MenuSourceType source_type) { DCHECK(Shell::GetInstance()->delegate()); scoped_ptr<ui::MenuModel> menu_model( - Shell::GetInstance()->delegate()->CreateContextMenu(root_window(), - NULL, - NULL)); + Shell::GetInstance()->delegate()->CreateContextMenu( + GetRootWindow(), NULL, NULL)); if (!menu_model) return; @@ -567,7 +583,7 @@ void RootWindowController::UpdateShelfVisibility() { const aura::Window* RootWindowController::GetWindowForFullscreenMode() const { const aura::Window* topmost_window = NULL; const aura::Window* active_window = wm::GetActiveWindow(); - if (active_window && active_window->GetRootWindow() == root_window() && + if (active_window && active_window->GetRootWindow() == GetRootWindow() && IsSwitchableContainer(active_window->parent())) { // Use the active window when it is on the current root window to determine // the fullscreen state to allow temporarily using a panel or docked window @@ -631,7 +647,7 @@ void RootWindowController::DeactivateKeyboard( } aura::Window* keyboard_container = keyboard_controller->GetContainerWindow(); - if (keyboard_container->GetRootWindow() == root_window()) { + if (keyboard_container->GetRootWindow() == GetRootWindow()) { aura::Window* parent = GetContainer( kShellWindowId_VirtualKeyboardParentContainer); DCHECK(parent); @@ -657,28 +673,30 @@ bool RootWindowController::IsVirtualKeyboardWindow(aura::Window* window) { //////////////////////////////////////////////////////////////////////////////// // RootWindowController, private: -RootWindowController::RootWindowController(aura::WindowTreeHost* host) - : host_(host), +RootWindowController::RootWindowController(AshWindowTreeHost* ash_host) + : ash_host_(ash_host), root_window_layout_(NULL), docked_layout_manager_(NULL), panel_layout_manager_(NULL), touch_hud_debug_(NULL), touch_hud_projection_(NULL) { - GetRootWindowSettings(root_window())->controller = this; - screen_dimmer_.reset(new ScreenDimmer(root_window())); + aura::Window* root_window = GetRootWindow(); + GetRootWindowSettings(root_window)->controller = this; + screen_dimmer_.reset(new ScreenDimmer(root_window)); stacking_controller_.reset(new StackingController); - aura::client::SetWindowTreeClient(root_window(), stacking_controller_.get()); - capture_client_.reset(new ::wm::ScopedCaptureClient(root_window())); + aura::client::SetWindowTreeClient(root_window, stacking_controller_.get()); + capture_client_.reset(new ::wm::ScopedCaptureClient(root_window)); } void RootWindowController::Init(RootWindowType root_window_type, bool first_run_after_boot) { + aura::Window* root_window = GetRootWindow(); Shell* shell = Shell::GetInstance(); - shell->InitRootWindow(root_window()); + shell->InitRootWindow(root_window); - host_->SetCursor(ui::kCursorPointer); - CreateContainersInRootWindow(root_window()); + ash_host_->AsWindowTreeHost()->SetCursor(ui::kCursorPointer); + CreateContainersInRootWindow(root_window); if (root_window_type == VIRTUAL_KEYBOARD) { shell->InitKeyboard(); @@ -703,9 +721,9 @@ void RootWindowController::Init(RootWindowType root_window_type, shell->InitKeyboard(); } else { root_window_layout()->OnWindowResized(); - shell->desktop_background_controller()->OnRootWindowAdded(root_window()); - shell->high_contrast_controller()->OnRootWindowAdded(root_window()); - host_->Show(); + shell->desktop_background_controller()->OnRootWindowAdded(root_window); + shell->high_contrast_controller()->OnRootWindowAdded(root_window); + ash_host_->AsWindowTreeHost()->Show(); // Create a shelf if a user is already logged in. if (shell->session_state_delegate()->NumberOfLoggedInUsers()) @@ -714,8 +732,9 @@ void RootWindowController::Init(RootWindowType root_window_type, } void RootWindowController::InitLayoutManagers() { - root_window_layout_ = new RootWindowLayoutManager(root_window()); - root_window()->SetLayoutManager(root_window_layout_); + aura::Window* root_window = GetRootWindow(); + root_window_layout_ = new RootWindowLayoutManager(root_window); + root_window->SetLayoutManager(root_window_layout_); aura::Window* default_container = GetContainer(kShellWindowId_DefaultContainer); @@ -767,7 +786,7 @@ void RootWindowController::InitLayoutManagers() { void RootWindowController::InitTouchHuds() { CommandLine* command_line = CommandLine::ForCurrentProcess(); if (command_line->HasSwitch(switches::kAshTouchHud)) - set_touch_hud_debug(new TouchHudDebug(root_window())); + set_touch_hud_debug(new TouchHudDebug(GetRootWindow())); if (Shell::GetInstance()->is_touch_hud_projection_enabled()) EnableTouchHudProjection(); } @@ -780,7 +799,7 @@ void RootWindowController::CreateSystemBackground( color = kChromeOsBootColor; #endif system_background_.reset( - new SystemBackgroundController(root_window(), color)); + new SystemBackgroundController(GetRootWindow(), color)); #if defined(OS_CHROMEOS) // Make a copy of the system's boot splash screen so we can composite it @@ -790,7 +809,7 @@ void RootWindowController::CreateSystemBackground( switches::kAshCopyHostBackgroundAtBoot) || CommandLine::ForCurrentProcess()->HasSwitch( switches::kAshAnimateFromBootSplashScreen))) - boot_splash_screen_.reset(new BootSplashScreen(host())); + boot_splash_screen_.reset(new BootSplashScreen(GetHost())); #endif } @@ -979,7 +998,7 @@ void RootWindowController::CreateContainersInRootWindow( void RootWindowController::EnableTouchHudProjection() { if (touch_hud_projection_) return; - set_touch_hud_projection(new TouchHudProjection(root_window())); + set_touch_hud_projection(new TouchHudProjection(GetRootWindow())); } void RootWindowController::DisableTouchHudProjection() { |