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