15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_ROOT_WINDOW_CONTROLLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_ROOT_WINDOW_CONTROLLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <map> 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ash_export.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/shelf_types.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ash/shell_observer.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/user/login_status.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/aura/window.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_tree_host.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/ui_base_types.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EventFilter; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace gfx { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Point; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace keyboard { 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class KeyboardController; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ui { 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class EventHandler; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace views { 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class Widget; 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace wm { 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class InputMethodEventFilter; 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class RootWindowEventFilter; 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ScopedCaptureClient; 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass AshWindowTreeHost; 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass AlwaysOnTopController; 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass AnimatingDesktopController; 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass DesktopBackgroundWidgetController; 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class DockedWindowLayoutManager; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PanelLayoutManager; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RootWindowLayoutManager; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScreenDimmer; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShelfLayoutManager; 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass ShelfWidget; 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass StackingController; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatusAreaWidget; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SystemBackgroundController; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SystemModalContainerLayoutManager; 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass SystemTray; 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TouchHudDebug; 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TouchHudProjection; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WorkspaceController; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_CHROMEOS) 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class BootSplashScreen; 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class AshTouchExplorationManager; 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class maintains the per root window state for ash. This class 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// owns the root window and other dependent objects that should be 768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// deleted upon the deletion of the root window. This object is 778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// indirectly owned and deleted by |DisplayController|. 788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// The RootWindowController for particular root window is stored in 798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// its property (RootWindowSettings) and can be obtained using 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// |GetRootWindowController(aura::WindowEventDispatcher*)| function. 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass ASH_EXPORT RootWindowController : public ShellObserver { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Creates and Initialize the RootWindowController for primary display. 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch static void CreateForPrimaryDisplay(AshWindowTreeHost* host); 858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Creates and Initialize the RootWindowController for secondary displays. 87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch static void CreateForSecondaryDisplay(AshWindowTreeHost* host); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Creates and Initialize the RootWindowController for virtual 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // keyboard displays. 91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch static void CreateForVirtualKeyboardDisplay(AshWindowTreeHost* host); 921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns a RootWindowController that has a shelf for given 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |window|. This returns the RootWindowController for the |window|'s 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // root window when multiple shelf mode is enabled, or the primary 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RootWindowController otherwise. 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static RootWindowController* ForShelf(const aura::Window* window); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns a RootWindowController of the window's root window. 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static RootWindowController* ForWindow(const aura::Window* window); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Returns the RootWindowController of the target root window. 103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch static RootWindowController* ForTargetRootWindow(); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns container which contains a given |window|. 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static aura::Window* GetContainerForWindow(aura::Window* window); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual ~RootWindowController(); 1098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 110a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AshWindowTreeHost* ash_host() { return ash_host_.get(); } 111a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const AshWindowTreeHost* ash_host() const { return ash_host_.get(); } 112a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 113a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch aura::WindowTreeHost* GetHost(); 114a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const aura::WindowTreeHost* GetHost() const; 115a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch aura::Window* GetRootWindow(); 116a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const aura::Window* GetRootWindow() const; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RootWindowLayoutManager* root_window_layout() { return root_window_layout_; } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WorkspaceController* workspace_controller() { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return workspace_controller_.get(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AlwaysOnTopController* always_on_top_controller() { 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return always_on_top_controller_.get(); 126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScreenDimmer* screen_dimmer() { return screen_dimmer_.get(); } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Access the shelf associated with this root window controller, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NULL if no such shelf exists. 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShelfWidget* shelf() { return shelf_.get(); } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Get touch HUDs associated with this root window controller. 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TouchHudDebug* touch_hud_debug() const { 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return touch_hud_debug_; 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TouchHudProjection* touch_hud_projection() const { 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return touch_hud_projection_; 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Set touch HUDs for this root window controller. The root window controller 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // will not own the HUDs; their lifetimes are managed by themselves. Whenever 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // the widget showing a HUD is being destroyed (e.g. because of detaching a 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // display), the HUD deletes itself. 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_touch_hud_debug(TouchHudDebug* hud) { 147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch touch_hud_debug_ = hud; 148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_touch_hud_projection(TouchHudProjection* hud) { 150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch touch_hud_projection_ = hud; 151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DesktopBackgroundWidgetController* wallpaper_controller() { 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return wallpaper_controller_.get(); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetWallpaperController(DesktopBackgroundWidgetController* controller); 157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AnimatingDesktopController* animating_wallpaper_controller() { 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return animating_wallpaper_controller_.get(); 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetAnimatingWallpaperController(AnimatingDesktopController* controller); 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Access the shelf layout manager associated with this root 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // window controller, NULL if no such shelf exists. 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShelfLayoutManager* GetShelfLayoutManager(); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the system tray on this root window. Note that 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // calling this on the root window that doesn't have a shelf will 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // lead to a crash. 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SystemTray* GetSystemTray(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shows context menu at the |location_in_screen|. This uses 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |ShellDelegate::CreateContextMenu| to define the content of the menu. 1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void ShowContextMenu(const gfx::Point& location_in_screen, 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ui::MenuSourceType source_type); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the layout-manager for the appropriate modal-container. If the 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window is inside the lockscreen modal container, then the layout manager 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for that is returned. Otherwise the layout manager for the default modal 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // container is returned. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If no window is specified (i.e. |window| is NULL), then the lockscreen 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // modal container is used if the screen is currently locked. Otherwise, the 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default modal container is used. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemModalContainerLayoutManager* GetSystemModalLayoutManager( 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::Window* window); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::Window* GetContainer(int container_id); 1872385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch const aura::Window* GetContainer(int container_id) const; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Show shelf view if it was created hidden (before session has started). 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ShowShelf(); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Called when the shelf associated with this root window is created. 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnShelfCreated(); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the login status changes after login (such as lock/unlock). 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(oshima): Investigate if we can merge this and |OnLoginStateChanged|. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateAfterLoginStatusChange(user::LoginStatus status); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the brightness/grayscale animation from white to the login 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // desktop background image has started. Starts |boot_splash_screen_|'s 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // hiding animation (if the screen is non-NULL). 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleInitialDesktopBackgroundAnimationStarted(); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Called when the wallpaper ainmation is finished. Updates |background_| 205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // to be black and drops |boot_splash_screen_| and moves the wallpaper 206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // controller into the root window controller. |widget| holds the wallpaper 207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // image, or NULL if the background is a solid color. 208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void OnWallpaperAnimationFinished(views::Widget* widget); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Deletes associated objects and clears the state, but doesn't delete 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the root window yet. This is used to delete a secondary displays' 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // root window safely when the display disconnect signal is received, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which may come while we're in the nested message loop. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Shutdown(); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Deletes all child windows and performs necessary cleanup. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CloseChildWindows(); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Moves child windows to |dest|. 2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void MoveWindowsTo(aura::Window* dest); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force the shelf to query for it's current visibility state. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateShelfVisibility(); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Initialize touch HUDs if necessary. 226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void InitTouchHuds(); 227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Returns the topmost window or one of its transient parents, if any of them 229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // are in fullscreen mode. 230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const aura::Window* GetWindowForFullscreenMode() const; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Activate virtual keyboard on current root window controller. 2334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void ActivateKeyboard(keyboard::KeyboardController* keyboard_controller); 2344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Deactivate virtual keyboard on current root window controller. 2364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void DeactivateKeyboard(keyboard::KeyboardController* keyboard_controller); 2374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 238e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Tests if a window is associated with the virtual keyboard. 239e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bool IsVirtualKeyboardWindow(aura::Window* window); 240e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 242a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch explicit RootWindowController(AshWindowTreeHost* host); 2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) enum RootWindowType { 2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PRIMARY, 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SECONDARY 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 2478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Initializes the RootWindowController. |is_primary| is true if 2498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // the controller is for primary display. |first_run_after_boot| is 2508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // set to true only for primary root window after boot. 2511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void Init(RootWindowType root_window_type, bool first_run_after_boot); 2528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void InitLayoutManagers(); 254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Initializes |system_background_| and possibly also |boot_splash_screen_|. 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // |is_first_run_after_boot| determines the background's initial color. 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void CreateSystemBackground(bool is_first_run_after_boot); 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates each of the special window containers that holds windows of various 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // types in the shell UI. 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void CreateContainersInRootWindow(aura::Window* root_window); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Enables projection touch HUD. 2647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void EnableTouchHudProjection(); 2657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Disables projection touch HUD. 2677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void DisableTouchHudProjection(); 2687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Overridden from ShellObserver. 2707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnLoginStateChanged(user::LoginStatus status) OVERRIDE; 2717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnTouchHudProjectionToggled(bool enabled) OVERRIDE; 2727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 273a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<AshWindowTreeHost> ash_host_; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RootWindowLayoutManager* root_window_layout_; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<StackingController> stacking_controller_; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The shelf for managing the shelf and the status widget. 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ShelfWidget> shelf_; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 281bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // An invisible/empty window used as a event target for 282bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // |MouseCursorEventFilter| before a user logs in. 283bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // (crbug.com/266987) 284bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Its container is |LockScreenBackgroundContainer| and 285bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // this must be deleted before the container is deleted. 286bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch scoped_ptr<aura::Window> mouse_event_target_; 287bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 2887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Manages layout of docked windows. Owned by DockedContainer. 2897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DockedWindowLayoutManager* docked_layout_manager_; 2907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Manages layout of panels. Owned by PanelContainer. 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PanelLayoutManager* panel_layout_manager_; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<SystemBackgroundController> system_background_; 295010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_CHROMEOS) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BootSplashScreen> boot_splash_screen_; 298010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Responsible for initializing TouchExplorationController when spoken 299010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // feedback is on. 3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<AshTouchExplorationManager> touch_exploration_manager_; 3013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ScreenDimmer> screen_dimmer_; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<WorkspaceController> workspace_controller_; 305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<AlwaysOnTopController> always_on_top_controller_; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Heads-up displays for touch events. These HUDs are not owned by the root 308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // window controller and manage their own lifetimes. 309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TouchHudDebug* touch_hud_debug_; 310eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TouchHudProjection* touch_hud_projection_; 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Handles double clicks on the panel window header. 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<ui::EventHandler> panel_container_handler_; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<DesktopBackgroundWidgetController> wallpaper_controller_; 316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<AnimatingDesktopController> animating_wallpaper_controller_; 317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr< ::wm::ScopedCaptureClient> capture_client_; 318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RootWindowController); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 32358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Gets the RootWindowController for |root_window|. 32458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)ASH_EXPORT RootWindowController* GetRootWindowController( 3251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const aura::Window* root_window); 32658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 327f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace ash 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // ASH_ROOT_WINDOW_CONTROLLER_H_ 330