blob: b63010be5ea2aedf15325146303d2806792a019e [file] [log] [blame]
[email protected]e0d22e82012-01-04 00:46:571// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]87b0d82e2011-10-07 21:02:592// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]b65bdda2011-12-23 23:35:315#ifndef ASH_SHELL_H_
6#define ASH_SHELL_H_
[email protected]87b0d82e2011-10-07 21:02:597
[email protected]cac10fc62011-10-07 23:22:568#include <utility>
9#include <vector>
10
[email protected]b65bdda2011-12-23 23:35:3111#include "ash/ash_export.h"
[email protected]ef80e4302012-12-04 19:37:3112#include "ash/shelf_types.h"
[email protected]82d3954ae2012-04-20 09:02:2213#include "ash/system/user/login_status.h"
[email protected]4b8003c2012-07-26 00:54:1914#include "ash/wm/cursor_manager.h"
[email protected]c0ce80e2012-10-05 23:28:2715#include "ash/wm/system_modal_container_event_filter_delegate.h"
[email protected]87b0d82e2011-10-07 21:02:5916#include "base/basictypes.h"
[email protected]c45fdc72012-02-22 22:59:1217#include "base/compiler_specific.h"
[email protected]b0639282011-12-22 21:12:2718#include "base/gtest_prod_util.h"
[email protected]2b99f8c2011-10-11 19:42:2419#include "base/memory/scoped_ptr.h"
[email protected]1a2145b2012-03-13 21:09:1720#include "base/observer_list.h"
[email protected]5097e692012-10-30 22:08:4121#include "ui/base/events/event_target.h"
[email protected]2eb6b892012-05-31 13:28:2122#include "ui/gfx/insets.h"
[email protected]ffabb1e2012-10-12 19:51:1723#include "ui/gfx/screen.h"
[email protected]9ec0f452012-05-31 15:58:5324#include "ui/gfx/size.h"
[email protected]87b0d82e2011-10-07 21:02:5925
[email protected]b0639282011-12-22 21:12:2726class CommandLine;
27
[email protected]87b0d82e2011-10-07 21:02:5928namespace aura {
[email protected]e29014c2011-11-16 18:25:5129class EventFilter;
[email protected]35304ce2011-12-14 23:21:0130class RootWindow;
[email protected]87b0d82e2011-10-07 21:02:5931class Window;
[email protected]c28853612012-05-31 22:43:4432namespace client {
[email protected]39718b52012-12-03 17:24:5633class ActivationClient;
[email protected]8cfb6722012-11-28 03:28:4634class FocusClient;
[email protected]d8f10042012-11-14 01:10:4635class StackingClient;
[email protected]c28853612012-05-31 22:43:4436class UserActionClient;
37}
[email protected]87b0d82e2011-10-07 21:02:5938}
[email protected]70b3e7d52012-06-02 22:12:2539namespace chromeos {
40class OutputConfigurator;
41}
[email protected]fa4a45832012-04-12 21:32:4842namespace content {
43class BrowserContext;
44}
45
[email protected]2b99f8c2011-10-11 19:42:2446namespace gfx {
[email protected]9ec0f452012-05-31 15:58:5347class ImageSkia;
[email protected]b5f30602012-01-30 15:16:5748class Point;
[email protected]cac10fc62011-10-07 23:22:5649class Rect;
50}
[email protected]a8bd1cb2012-02-17 23:05:5451namespace ui {
52class Layer;
53}
[email protected]57b8bb352012-01-11 05:11:4654namespace views {
55class NonClientFrameView;
56class Widget;
[email protected]4a59e4e2012-11-12 21:15:4057namespace corewm {
58class CompoundEventFilter;
59class InputMethodEventFilter;
[email protected]86f2b5e2012-11-14 20:37:0060class ShadowController;
[email protected]b5756e22012-11-30 01:32:0261class VisibilityController;
[email protected]0c2dc012012-12-02 00:00:2362class WindowModalityController;
[email protected]4a59e4e2012-11-12 21:15:4063}
[email protected]57b8bb352012-01-11 05:11:4664}
[email protected]87b0d82e2011-10-07 21:02:5965
[email protected]55f593352011-12-24 05:42:4666namespace ash {
[email protected]87b0d82e2011-10-07 21:02:5967
[email protected]2f744282011-12-23 22:40:5268class AcceleratorController;
[email protected]f4c92b382012-08-28 00:59:5969class CapsLockDelegate;
[email protected]e70cf0ed2012-03-15 16:24:4770class DesktopBackgroundController;
[email protected]edbfb8d2012-09-03 08:33:4371class DisplayController;
[email protected]f48075d2012-05-24 11:06:5172class HighContrastController;
[email protected]671a2ae2011-10-13 21:53:2373class Launcher;
[email protected]b913a3a2012-12-11 13:07:1974class LauncherDelegate;
75class LauncherModel;
[email protected]77f7c132012-11-15 06:52:5476class MagnificationController;
[email protected]8f80db0f2012-02-07 14:44:5377class NestedDispatcherController;
[email protected]77f7c132012-11-15 06:52:5478class PartialMagnificationController;
[email protected]e0d22e82012-01-04 00:46:5779class PowerButtonController;
[email protected]1a2145b2012-03-13 21:09:1780class ScreenAsh;
[email protected]222f40c2012-10-18 08:58:1381class SessionStateController;
[email protected]2b99f8c2011-10-11 19:42:2482class ShellDelegate;
[email protected]1a2145b2012-03-13 21:09:1783class ShellObserver;
[email protected]bfb411312012-02-27 20:59:2784class SystemTray;
[email protected]51ed5992012-11-07 10:14:3985class SystemTrayDelegate;
[email protected]83b2b84c2012-11-14 01:11:0086class SystemTrayNotifier;
[email protected]c16b9422012-06-06 21:51:1187class UserActivityDetector;
[email protected]10b22612012-03-22 17:07:5588class UserWallpaperDelegate;
[email protected]6aa614a2012-01-19 22:13:3889class VideoDetector;
[email protected]88d71122012-10-18 07:11:0190class WebNotificationTray;
[email protected]40c4cbb2012-01-10 23:26:0791class WindowCycleController;
[email protected]60fa9bba2011-10-28 21:21:5192
93namespace internal {
[email protected]2f744282011-12-23 22:40:5294class AcceleratorFilter;
[email protected]0039db92012-05-09 04:11:4595class ActivationController;
96class AppListController;
[email protected]60a978b72012-06-08 00:29:1897class CaptureController;
[email protected]6bdf7952012-11-14 10:10:5898class DisplayChangeObserverX11;
99class DisplayManager;
[email protected]084b6bb2011-11-17 05:18:16100class DragDropController;
[email protected]e67291f12012-10-10 05:52:38101class EventClientImpl;
[email protected]b9d224c2012-07-13 01:09:03102class EventRewriterEventFilter;
[email protected]3d29912a2012-02-07 07:41:51103class FocusCycler;
[email protected]78d96302012-06-22 00:58:07104class MouseCursorEventFilter;
[email protected]196e9452012-08-01 06:42:51105class OutputConfiguratorAnimation;
[email protected]9ae32df2012-07-26 03:25:18106class OverlayEventFilter;
[email protected]e4a181cc2012-03-17 02:20:57107class ResizeShadowController;
[email protected]d90b8392012-06-13 09:34:56108class RootWindowController;
[email protected]b0079a92012-01-25 20:13:38109class RootWindowLayoutManager;
[email protected]8d625fb2012-07-18 16:40:06110class ScreenPositionController;
[email protected]9861f1752012-06-01 07:16:14111class SlowAnimationEventFilter;
[email protected]6d6546e2012-05-30 23:12:02112class StatusAreaWidget;
[email protected]9ae32df2012-07-26 03:25:18113class SystemGestureEventFilter;
[email protected]c0ce80e2012-10-05 23:28:27114class SystemModalContainerEventFilter;
[email protected]862deef2011-12-15 22:07:33115class TooltipController;
[email protected]73074742012-05-17 01:44:41116class TouchObserverHUD;
[email protected]60fa9bba2011-10-28 21:21:51117class WorkspaceController;
118}
[email protected]2b99f8c2011-10-11 19:42:24119
[email protected]0c68e892012-12-08 16:54:53120namespace test {
121class ShellTestApi;
122}
123
[email protected]87b0d82e2011-10-07 21:02:59124// Shell is a singleton object that presents the Shell API and implements the
[email protected]99f07e02011-12-07 00:02:59125// RootWindow's delegate interface.
[email protected]b0079a92012-01-25 20:13:38126//
127// Upon creation, the Shell sets itself as the RootWindow's delegate, which
128// takes ownership of the Shell.
[email protected]5097e692012-10-30 22:08:41129class ASH_EXPORT Shell : internal::SystemModalContainerEventFilterDelegate,
130 public ui::EventTarget {
[email protected]87b0d82e2011-10-07 21:02:59131 public:
[email protected]be65be362012-06-15 07:38:23132 typedef std::vector<aura::RootWindow*> RootWindowList;
133 typedef std::vector<internal::RootWindowController*> RootWindowControllerList;
134
[email protected]3d29912a2012-02-07 07:41:51135 enum Direction {
136 FORWARD,
137 BACKWARD
138 };
139
[email protected]3266c2b92011-11-14 00:06:08140 // A shell must be explicitly created so that it can call |Init()| with the
141 // delegate set. |delegate| can be NULL (if not required for initialization).
142 static Shell* CreateInstance(ShellDelegate* delegate);
143
144 // Should never be called before |CreateInstance()|.
[email protected]cac10fc62011-10-07 23:22:56145 static Shell* GetInstance();
[email protected]3266c2b92011-11-14 00:06:08146
[email protected]b3b7bcd2012-03-06 19:35:45147 // Returns true if the ash shell has been instantiated.
148 static bool HasInstance();
149
[email protected]ef589af2011-12-03 01:07:15150 static void DeleteInstance();
[email protected]cac10fc62011-10-07 23:22:56151
[email protected]d90b8392012-06-13 09:34:56152 // Returns the root window controller for the primary root window.
[email protected]a0afeb12012-12-10 22:57:09153 // TODO(oshima): move this to |RootWindowController|
[email protected]d90b8392012-06-13 09:34:56154 static internal::RootWindowController* GetPrimaryRootWindowController();
155
[email protected]cf1c70e2012-08-30 01:13:02156 // Returns all root window controllers.
[email protected]a0afeb12012-12-10 22:57:09157 // TODO(oshima): move this to |RootWindowController|
[email protected]be65be362012-06-15 07:38:23158 static RootWindowControllerList GetAllRootWindowControllers();
159
160 // Returns the primary RootWindow. The primary RootWindow is the one
[email protected]42713f72012-05-25 00:41:50161 // that has a launcher.
162 static aura::RootWindow* GetPrimaryRootWindow();
[email protected]e73bd7802012-02-17 20:10:34163
[email protected]be65be362012-06-15 07:38:23164 // Returns the active RootWindow. The active RootWindow is the one that
[email protected]a857dbe2012-05-30 22:10:14165 // contains the current active window as a decendant child. The active
166 // RootWindow remains the same even when the active window becomes NULL,
167 // until the another window who has a different root window becomes active.
168 static aura::RootWindow* GetActiveRootWindow();
169
[email protected]ffabb1e2012-10-12 19:51:17170 // Returns the global Screen object that's always active in ash.
171 static gfx::Screen* GetScreen();
172
[email protected]cf1c70e2012-08-30 01:13:02173 // Returns all root windows.
[email protected]be65be362012-06-15 07:38:23174 static RootWindowList GetAllRootWindows();
175
[email protected]7b0f7502012-06-11 00:12:39176 static aura::Window* GetContainer(aura::RootWindow* root_window,
177 int container_id);
[email protected]e67291f12012-10-10 05:52:38178 static const aura::Window* GetContainer(const aura::RootWindow* root_window,
179 int container_id);
[email protected]7b0f7502012-06-11 00:12:39180
181 // Returns the list of containers that match |container_id| in
182 // all root windows.
183 static std::vector<aura::Window*> GetAllContainers(int container_id);
184
[email protected]e74aaf0a2012-10-12 18:42:28185 // True if "launcher per display" feature is enabled.
186 static bool IsLauncherPerDisplayEnabled();
187
[email protected]a857dbe2012-05-30 22:10:14188 void set_active_root_window(aura::RootWindow* active_root_window) {
189 active_root_window_ = active_root_window;
190 }
191
[email protected]cb054f972012-10-11 20:27:28192 // Shows the context menu for the background and launcher at
[email protected]431552c2012-10-23 00:38:33193 // |location_in_screen| (in screen coordinates).
194 void ShowContextMenu(const gfx::Point& location_in_screen);
[email protected]cac10fc62011-10-07 23:22:56195
[email protected]b913a3a2012-12-11 13:07:19196 // Toggles the app list. |window| specifies in which display the app
197 // list should be shown. If this is NULL, the active root window
198 // will be used.
199 void ToggleAppList(aura::Window* anchor);
[email protected]ae4987d2011-11-21 22:52:44200
[email protected]7510d1082012-03-30 21:58:34201 // Returns app list target visibility.
202 bool GetAppListTargetVisibility() const;
203
[email protected]1e51a9d2012-04-09 23:31:11204 // Returns app list window or NULL if it is not visible.
205 aura::Window* GetAppListWindow();
206
[email protected]91545872012-11-21 13:58:27207 // Returns true if a user is logged in whose session can be locked (i.e. the
208 // user has a password with which to unlock the session).
209 bool CanLockScreen();
210
[email protected]f7eb89c2011-12-13 09:48:54211 // Returns true if the screen is locked.
212 bool IsScreenLocked() const;
213
[email protected]dc09739372012-11-15 20:17:39214 // Returns true if a system-modal dialog window is currently open.
215 bool IsSystemModalWindowOpen() const;
[email protected]40c4cbb2012-01-10 23:26:07216
[email protected]852a55d2012-10-17 13:30:30217 // For testing only: set simulation that a modal window is open
218 void SimulateModalWindowOpenForTesting(bool modal_window_open) {
219 simulate_modal_window_open_for_testing_ = modal_window_open;
220 }
221
[email protected]57b8bb352012-01-11 05:11:46222 // Creates a default views::NonClientFrameView for use by windows in the
223 // Ash environment.
224 views::NonClientFrameView* CreateDefaultNonClientFrameView(
225 views::Widget* widget);
226
[email protected]d9456cb2012-03-21 16:41:04227 // Rotates focus through containers that can receive focus.
[email protected]3d29912a2012-02-07 07:41:51228 void RotateFocus(Direction direction);
229
[email protected]2e236a52012-06-27 22:21:47230 // Sets the work area insets of the display that contains |window|,
[email protected]8a45c972012-03-14 18:22:44231 // this notifies observers too.
[email protected]27f6af62012-03-21 05:34:40232 // TODO(sky): this no longer really replicates what happens and is unreliable.
233 // Remove this.
[email protected]2e236a52012-06-27 22:21:47234 void SetDisplayWorkAreaInsets(aura::Window* window,
[email protected]8a45c972012-03-14 18:22:44235 const gfx::Insets& insets);
[email protected]1a2145b2012-03-13 21:09:17236
[email protected]82d3954ae2012-04-20 09:02:22237 // Called when the user logs in.
238 void OnLoginStateChanged(user::LoginStatus status);
239
[email protected]88d71122012-10-18 07:11:01240 // Called when the login status changes.
241 // TODO(oshima): Investigate if we can merge this and |OnLoginStateChanged|.
242 void UpdateAfterLoginStatusChange(user::LoginStatus status);
243
[email protected]82d3954ae2012-04-20 09:02:22244 // Called when the application is exiting.
245 void OnAppTerminating();
246
247 // Called when the screen is locked (after the lock window is visible) or
248 // unlocked.
249 void OnLockStateChanged(bool locked);
250
[email protected]d9456cb2012-03-21 16:41:04251 // Initializes |launcher_|. Does nothing if it's already initialized.
252 void CreateLauncher();
253
[email protected]7e1df2f62012-07-19 19:17:18254 // Show launcher view if it was created hidden (before session has started).
255 void ShowLauncher();
256
[email protected]d9456cb2012-03-21 16:41:04257 // Adds/removes observer.
[email protected]1a2145b2012-03-13 21:09:17258 void AddShellObserver(ShellObserver* observer);
259 void RemoveShellObserver(ShellObserver* observer);
260
[email protected]6e9f6aa2012-02-09 04:16:20261#if !defined(OS_MACOSX)
[email protected]2f744282011-12-23 22:40:52262 AcceleratorController* accelerator_controller() {
[email protected]745816be2011-11-22 05:08:30263 return accelerator_controller_.get();
264 }
[email protected]6e9f6aa2012-02-09 04:16:20265#endif // !defined(OS_MACOSX)
266
[email protected]6bdf7952012-11-14 10:10:58267 internal::DisplayManager* display_manager() {
268 return display_manager_.get();
269 }
[email protected]4a59e4e2012-11-12 21:15:40270 views::corewm::CompoundEventFilter* env_filter() {
[email protected]492533b32012-09-21 19:06:14271 return env_filter_.get();
[email protected]627a62f2012-02-14 22:59:14272 }
[email protected]862deef2011-12-15 22:07:33273 internal::TooltipController* tooltip_controller() {
274 return tooltip_controller_.get();
[email protected]4a229e902011-12-01 21:21:11275 }
[email protected]b9d224c2012-07-13 01:09:03276 internal::EventRewriterEventFilter* event_rewriter_filter() {
277 return event_rewriter_filter_.get();
[email protected]42f06f92012-03-27 00:57:57278 }
[email protected]9ae32df2012-07-26 03:25:18279 internal::OverlayEventFilter* overlay_filter() {
280 return overlay_filter_.get();
[email protected]0b0b0742012-02-16 13:23:45281 }
[email protected]e70cf0ed2012-03-15 16:24:47282 DesktopBackgroundController* desktop_background_controller() {
283 return desktop_background_controller_.get();
284 }
[email protected]e0d22e82012-01-04 00:46:57285 PowerButtonController* power_button_controller() {
286 return power_button_controller_.get();
287 }
[email protected]222f40c2012-10-18 08:58:13288 SessionStateController* session_state_controller() {
289 return session_state_controller_.get();
290 }
[email protected]c16b9422012-06-06 21:51:11291 UserActivityDetector* user_activity_detector() {
292 return user_activity_detector_.get();
293 }
[email protected]6aa614a2012-01-19 22:13:38294 VideoDetector* video_detector() {
295 return video_detector_.get();
296 }
[email protected]40c4cbb2012-01-10 23:26:07297 WindowCycleController* window_cycle_controller() {
298 return window_cycle_controller_.get();
299 }
[email protected]2d511542012-03-07 09:13:34300 internal::FocusCycler* focus_cycler() {
301 return focus_cycler_.get();
302 }
[email protected]edbfb8d2012-09-03 08:33:43303 DisplayController* display_controller() {
[email protected]2e236a52012-06-27 22:21:47304 return display_controller_.get();
[email protected]3e1cdd312012-06-07 03:48:41305 }
[email protected]8b7ba87b2012-09-01 00:40:40306 internal::MouseCursorEventFilter* mouse_cursor_filter() {
307 return mouse_cursor_filter_.get();
308 }
[email protected]4b8003c2012-07-26 00:54:19309 CursorManager* cursor_manager() { return &cursor_manager_; }
[email protected]4a229e902011-12-01 21:21:11310
[email protected]3266c2b92011-11-14 00:06:08311 ShellDelegate* delegate() { return delegate_.get(); }
[email protected]aa54218b2012-06-12 16:51:42312
[email protected]10b22612012-03-22 17:07:55313 UserWallpaperDelegate* user_wallpaper_delegate() {
314 return user_wallpaper_delegate_.get();
315 }
[email protected]35304ce2011-12-14 23:21:01316
[email protected]f4c92b382012-08-28 00:59:59317 CapsLockDelegate* caps_lock_delegate() {
318 return caps_lock_delegate_.get();
319 }
320
[email protected]f48075d2012-05-24 11:06:51321 HighContrastController* high_contrast_controller() {
322 return high_contrast_controller_.get();
323 }
324
[email protected]77f7c132012-11-15 06:52:54325 MagnificationController* magnification_controller() {
[email protected]c1c670172012-04-26 04:20:26326 return magnification_controller_.get();
327 }
[email protected]f48075d2012-05-24 11:06:51328
[email protected]77f7c132012-11-15 06:52:54329 PartialMagnificationController* partial_magnification_controller() {
330 return partial_magnification_controller_.get();
331 }
332
[email protected]6bdf7952012-11-14 10:10:58333 ScreenAsh* screen() { return screen_; }
[email protected]1a2145b2012-03-13 21:09:17334
[email protected]c758fbf2012-03-25 22:53:59335 // Force the shelf to query for it's current visibility state.
336 void UpdateShelfVisibility();
337
[email protected]431552c2012-10-23 00:38:33338 // TODO(oshima): Define an interface to access shelf/launcher
339 // state, or just use Launcher.
[email protected]c758fbf2012-03-25 22:53:59340
[email protected]431552c2012-10-23 00:38:33341 // Sets/gets the shelf auto-hide behavior on |root_window|.
342 void SetShelfAutoHideBehavior(ShelfAutoHideBehavior behavior,
343 aura::RootWindow* root_window);
344 ShelfAutoHideBehavior GetShelfAutoHideBehavior(
345 aura::RootWindow* root_window) const;
346
[email protected]431552c2012-10-23 00:38:33347 // Sets/gets shelf's alignment on |root_window|.
348 void SetShelfAlignment(ShelfAlignment alignment,
349 aura::RootWindow* root_window);
350 ShelfAlignment GetShelfAlignment(aura::RootWindow* root_window);
[email protected]55444502012-05-10 15:43:53351
[email protected]d90b8392012-06-13 09:34:56352 // Dims or undims the screen.
353 void SetDimming(bool should_dim);
354
[email protected]090c4f12012-10-29 18:56:42355 // Creates a modal background (a partially-opaque fullscreen window)
356 // on all displays for |window|.
357 void CreateModalBackground(aura::Window* window);
[email protected]c0ce80e2012-10-05 23:28:27358
359 // Called when a modal window is removed. It will activate
360 // another modal window if any, or remove modal screens
361 // on all displays.
362 void OnModalWindowRemoved(aura::Window* removed);
363
[email protected]88d71122012-10-18 07:11:01364 // Returns WebNotificationTray on the primary root window.
365 WebNotificationTray* GetWebNotificationTray();
[email protected]6d6546e2012-05-30 23:12:02366
[email protected]a0afeb12012-12-10 22:57:09367 // Does the primary display have status area?
368 bool HasPrimaryStatusArea();
369
370 // Returns the system tray on primary display.
371 SystemTray* GetPrimarySystemTray();
[email protected]bfb411312012-02-27 20:59:27372
[email protected]b913a3a2012-12-11 13:07:19373 // Returns the launcher delegate, creating if necesary.
374 LauncherDelegate* GetLauncherDelegate();
375
[email protected]945f9cae2012-12-12 09:54:29376 SystemTrayDelegate* system_tray_delegate() {
[email protected]51ed5992012-11-07 10:14:39377 return system_tray_delegate_.get();
378 }
379
[email protected]83b2b84c2012-11-14 01:11:00380 SystemTrayNotifier* system_tray_notifier() {
381 return system_tray_notifier_.get();
382 }
383
[email protected]b913a3a2012-12-11 13:07:19384 LauncherModel* launcher_model() {
385 return launcher_model_.get();
386 }
387
[email protected]9488d4d2012-02-29 18:32:37388 static void set_initially_hide_cursor(bool hide) {
389 initially_hide_cursor_ = hide;
390 }
391
[email protected]e4a181cc2012-03-17 02:20:57392 internal::ResizeShadowController* resize_shadow_controller() {
393 return resize_shadow_controller_.get();
394 }
395
[email protected]a54e65b2011-11-21 22:03:34396 // Made available for tests.
[email protected]86f2b5e2012-11-14 20:37:00397 views::corewm::ShadowController* shadow_controller() {
[email protected]a54e65b2011-11-21 22:03:34398 return shadow_controller_.get();
399 }
400
[email protected]fa4a45832012-04-12 21:32:48401 content::BrowserContext* browser_context() { return browser_context_; }
402 void set_browser_context(content::BrowserContext* browser_context) {
403 browser_context_ = browser_context;
404 }
405
[email protected]2e236a52012-06-27 22:21:47406 // Initializes the root window to be used for a secondary display.
407 void InitRootWindowForSecondaryDisplay(aura::RootWindow* root);
[email protected]a857dbe2012-05-30 22:10:14408
[email protected]f9466702012-09-17 16:35:27409 // Starts the animation that occurs on first login.
410 void DoInitialWorkspaceAnimation();
411
[email protected]70b3e7d52012-06-02 22:12:25412#if defined(OS_CHROMEOS)
413 chromeos::OutputConfigurator* output_configurator() {
414 return output_configurator_.get();
415 }
[email protected]196e9452012-08-01 06:42:51416 internal::OutputConfiguratorAnimation* output_configurator_animation() {
417 return output_configurator_animation_.get();
418 }
[email protected]70b3e7d52012-06-02 22:12:25419#endif // defined(OS_CHROMEOS)
420
[email protected]d8f10042012-11-14 01:10:46421 aura::client::StackingClient* stacking_client();
422
[email protected]2b4cd302012-02-24 20:21:13423 private:
[email protected]c39be8f2012-06-15 22:58:36424 FRIEND_TEST_ALL_PREFIXES(ExtendedDesktopTest, TestCursor);
[email protected]1aad3322012-06-06 06:37:09425 FRIEND_TEST_ALL_PREFIXES(WindowManagerTest, MouseEventCursors);
426 FRIEND_TEST_ALL_PREFIXES(WindowManagerTest, TransformActivate);
[email protected]d90b8392012-06-13 09:34:56427 friend class internal::RootWindowController;
[email protected]0c68e892012-12-08 16:54:53428 friend class test::ShellTestApi;
[email protected]ad0c8722012-03-02 20:17:45429
[email protected]cac10fc62011-10-07 23:22:56430 typedef std::pair<aura::Window*, gfx::Rect> WindowAndBoundsPair;
431
[email protected]3266c2b92011-11-14 00:06:08432 explicit Shell(ShellDelegate* delegate);
433 virtual ~Shell();
434
435 void Init();
[email protected]b0639282011-12-22 21:12:27436
[email protected]be65be362012-06-15 07:38:23437 // Initializes the root window and root window controller so that it
438 // can host browser windows.
439 void InitRootWindowController(internal::RootWindowController* root);
[email protected]d90b8392012-06-13 09:34:56440
441 // Initializes the layout managers and event filters specific for
442 // primary display.
443 void InitLayoutManagersForPrimaryDisplay(
444 internal::RootWindowController* root_window_controller);
[email protected]1b62b892012-01-17 17:08:15445
[email protected]c0ce80e2012-10-05 23:28:27446 // ash::internal::SystemModalContainerEventFilterDelegate overrides:
447 virtual bool CanWindowReceiveEvents(aura::Window* window) OVERRIDE;
448
[email protected]5097e692012-10-30 22:08:41449 // Overridden from ui::EventTarget:
[email protected]869f6352012-12-06 20:47:17450 virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE;
[email protected]5097e692012-10-30 22:08:41451 virtual EventTarget* GetParentTarget() OVERRIDE;
[email protected]049cf34b2012-12-07 17:15:48452 virtual void OnEvent(ui::Event* event) OVERRIDE;
[email protected]5097e692012-10-30 22:08:41453
[email protected]cac10fc62011-10-07 23:22:56454 static Shell* instance_;
455
[email protected]9488d4d2012-02-29 18:32:37456 // If set before the Shell is initialized, the mouse cursor will be hidden
457 // when the screen is initially created.
458 static bool initially_hide_cursor_;
459
[email protected]b0a8faa2012-10-19 03:22:22460 ScreenAsh* screen_;
[email protected]58482fa2012-03-02 14:57:39461
[email protected]f634dd32012-07-23 22:49:07462 // Active root window. Never becomes NULL during the session.
[email protected]a857dbe2012-05-30 22:10:14463 aura::RootWindow* active_root_window_;
464
[email protected]1aad3322012-06-06 06:37:09465 // The CompoundEventFilter owned by aura::Env object.
[email protected]4a59e4e2012-11-12 21:15:40466 scoped_ptr<views::corewm::CompoundEventFilter> env_filter_;
[email protected]627a62f2012-02-14 22:59:14467
[email protected]cac10fc62011-10-07 23:22:56468 std::vector<WindowAndBoundsPair> to_restore_;
469
[email protected]6e9f6aa2012-02-09 04:16:20470#if !defined(OS_MACOSX)
[email protected]8f80db0f2012-02-07 14:44:53471 scoped_ptr<NestedDispatcherController> nested_dispatcher_controller_;
472
[email protected]2f744282011-12-23 22:40:52473 scoped_ptr<AcceleratorController> accelerator_controller_;
[email protected]6e9f6aa2012-02-09 04:16:20474#endif // !defined(OS_MACOSX)
[email protected]745816be2011-11-22 05:08:30475
[email protected]2b99f8c2011-10-11 19:42:24476 scoped_ptr<ShellDelegate> delegate_;
[email protected]51ed5992012-11-07 10:14:39477 scoped_ptr<SystemTrayDelegate> system_tray_delegate_;
[email protected]83b2b84c2012-11-14 01:11:00478 scoped_ptr<SystemTrayNotifier> system_tray_notifier_;
[email protected]10b22612012-03-22 17:07:55479 scoped_ptr<UserWallpaperDelegate> user_wallpaper_delegate_;
[email protected]f4c92b382012-08-28 00:59:59480 scoped_ptr<CapsLockDelegate> caps_lock_delegate_;
[email protected]b913a3a2012-12-11 13:07:19481 scoped_ptr<LauncherDelegate> launcher_delegate_;
482
483 scoped_ptr<LauncherModel> launcher_model_;
[email protected]2b99f8c2011-10-11 19:42:24484
[email protected]0039db92012-05-09 04:11:45485 scoped_ptr<internal::AppListController> app_list_controller_;
[email protected]ae4987d2011-11-21 22:52:44486
[email protected]d8f10042012-11-14 01:10:46487 scoped_ptr<aura::client::StackingClient> stacking_client_;
[email protected]9fc206d2011-12-13 00:05:33488 scoped_ptr<internal::ActivationController> activation_controller_;
[email protected]60a978b72012-06-08 00:29:18489 scoped_ptr<internal::CaptureController> capture_controller_;
[email protected]084b6bb2011-11-17 05:18:16490 scoped_ptr<internal::DragDropController> drag_drop_controller_;
[email protected]e4a181cc2012-03-17 02:20:57491 scoped_ptr<internal::ResizeShadowController> resize_shadow_controller_;
[email protected]86f2b5e2012-11-14 20:37:00492 scoped_ptr<views::corewm::ShadowController> shadow_controller_;
[email protected]b5756e22012-11-30 01:32:02493 scoped_ptr<views::corewm::VisibilityController> visibility_controller_;
[email protected]0c2dc012012-12-02 00:00:23494 scoped_ptr<views::corewm::WindowModalityController>
495 window_modality_controller_;
[email protected]862deef2011-12-15 22:07:33496 scoped_ptr<internal::TooltipController> tooltip_controller_;
[email protected]e70cf0ed2012-03-15 16:24:47497 scoped_ptr<DesktopBackgroundController> desktop_background_controller_;
[email protected]e0d22e82012-01-04 00:46:57498 scoped_ptr<PowerButtonController> power_button_controller_;
[email protected]222f40c2012-10-18 08:58:13499 scoped_ptr<SessionStateController> session_state_controller_;
[email protected]c16b9422012-06-06 21:51:11500 scoped_ptr<UserActivityDetector> user_activity_detector_;
[email protected]6aa614a2012-01-19 22:13:38501 scoped_ptr<VideoDetector> video_detector_;
[email protected]40c4cbb2012-01-10 23:26:07502 scoped_ptr<WindowCycleController> window_cycle_controller_;
[email protected]3d29912a2012-02-07 07:41:51503 scoped_ptr<internal::FocusCycler> focus_cycler_;
[email protected]edbfb8d2012-09-03 08:33:43504 scoped_ptr<DisplayController> display_controller_;
[email protected]f48075d2012-05-24 11:06:51505 scoped_ptr<HighContrastController> high_contrast_controller_;
[email protected]77f7c132012-11-15 06:52:54506 scoped_ptr<MagnificationController> magnification_controller_;
507 scoped_ptr<PartialMagnificationController> partial_magnification_controller_;
[email protected]8cfb6722012-11-28 03:28:46508 scoped_ptr<aura::client::FocusClient> focus_client_;
[email protected]c28853612012-05-31 22:43:44509 scoped_ptr<aura::client::UserActionClient> user_action_client_;
[email protected]39718b52012-12-03 17:24:56510 aura::client::ActivationClient* activation_client_;
[email protected]78d96302012-06-22 00:58:07511 scoped_ptr<internal::MouseCursorEventFilter> mouse_cursor_filter_;
[email protected]8d625fb2012-07-18 16:40:06512 scoped_ptr<internal::ScreenPositionController> screen_position_controller_;
[email protected]c0ce80e2012-10-05 23:28:27513 scoped_ptr<internal::SystemModalContainerEventFilter> modality_filter_;
[email protected]e67291f12012-10-10 05:52:38514 scoped_ptr<internal::EventClientImpl> event_client_;
[email protected]ae18b9112011-11-07 16:59:13515
[email protected]b9d224c2012-07-13 01:09:03516 // An event filter that rewrites or drops an event.
517 scoped_ptr<internal::EventRewriterEventFilter> event_rewriter_filter_;
[email protected]6e9f6aa2012-02-09 04:16:20518
[email protected]0b0b0742012-02-16 13:23:45519 // An event filter that pre-handles key events while the partial
[email protected]a1584a712012-07-30 21:02:26520 // screenshot UI or the keyboard overlay is active.
[email protected]9ae32df2012-07-26 03:25:18521 scoped_ptr<internal::OverlayEventFilter> overlay_filter_;
[email protected]0b0b0742012-02-16 13:23:45522
[email protected]435b212e2012-04-05 19:43:37523 // An event filter which handles system level gestures
524 scoped_ptr<internal::SystemGestureEventFilter> system_gesture_filter_;
525
[email protected]6e9f6aa2012-02-09 04:16:20526#if !defined(OS_MACOSX)
[email protected]745816be2011-11-22 05:08:30527 // An event filter that pre-handles global accelerators.
[email protected]2f744282011-12-23 22:40:52528 scoped_ptr<internal::AcceleratorFilter> accelerator_filter_;
[email protected]6e9f6aa2012-02-09 04:16:20529#endif
[email protected]745816be2011-11-22 05:08:30530
[email protected]42f06f92012-03-27 00:57:57531 // An event filter that pre-handles all key events to send them to an IME.
[email protected]4a59e4e2012-11-12 21:15:40532 scoped_ptr<views::corewm::InputMethodEventFilter> input_method_filter_;
[email protected]42f06f92012-03-27 00:57:57533
[email protected]73074742012-05-17 01:44:41534 // An event filter that silently keeps track of all touch events and controls
535 // a heads-up display. This is enabled only if --ash-touch-hud flag is used.
536 scoped_ptr<internal::TouchObserverHUD> touch_observer_hud_;
537
[email protected]6bdf7952012-11-14 10:10:58538 scoped_ptr<internal::DisplayManager> display_manager_;
539
[email protected]70b3e7d52012-06-02 22:12:25540#if defined(OS_CHROMEOS)
541 // Controls video output device state.
542 scoped_ptr<chromeos::OutputConfigurator> output_configurator_;
[email protected]196e9452012-08-01 06:42:51543 scoped_ptr<internal::OutputConfiguratorAnimation>
544 output_configurator_animation_;
[email protected]6bdf7952012-11-14 10:10:58545
546 // Receives output change events and udpates the display manager.
547 scoped_ptr<internal::DisplayChangeObserverX11> display_change_observer_;
[email protected]70b3e7d52012-06-02 22:12:25548#endif // defined(OS_CHROMEOS)
549
[email protected]4b8003c2012-07-26 00:54:19550 CursorManager cursor_manager_;
551
[email protected]1a2145b2012-03-13 21:09:17552 ObserverList<ShellObserver> observers_;
553
[email protected]fa4a45832012-04-12 21:32:48554 // Used by ash/shell.
555 content::BrowserContext* browser_context_;
556
[email protected]852a55d2012-10-17 13:30:30557 // For testing only: simulate that a modal window is open
558 bool simulate_modal_window_open_for_testing_;
559
[email protected]87b0d82e2011-10-07 21:02:59560 DISALLOW_COPY_AND_ASSIGN(Shell);
561};
562
[email protected]55f593352011-12-24 05:42:46563} // namespace ash
[email protected]87b0d82e2011-10-07 21:02:59564
[email protected]b65bdda2011-12-23 23:35:31565#endif // ASH_SHELL_H_