blob: 43ee1c624cf6fb6e8186428d95ed1ca6320477ce [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]478c6c32013-03-09 02:50:5812#include "ash/shelf/shelf_types.h"
[email protected]82d3954ae2012-04-20 09:02:2213#include "ash/system/user/login_status.h"
[email protected]c0ce80e2012-10-05 23:28:2714#include "ash/wm/system_modal_container_event_filter_delegate.h"
[email protected]87b0d82e2011-10-07 21:02:5915#include "base/basictypes.h"
[email protected]c45fdc72012-02-22 22:59:1216#include "base/compiler_specific.h"
[email protected]b0639282011-12-22 21:12:2717#include "base/gtest_prod_util.h"
[email protected]2b99f8c2011-10-11 19:42:2418#include "base/memory/scoped_ptr.h"
[email protected]1a2145b2012-03-13 21:09:1719#include "base/observer_list.h"
[email protected]1ae361652012-12-12 22:39:5120#include "ui/aura/client/activation_change_observer.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]c0ff0342013-02-27 00:41:2925#include "ui/views/corewm/cursor_manager.h"
[email protected]87b0d82e2011-10-07 21:02:5926
[email protected]b0639282011-12-22 21:12:2727class CommandLine;
28
[email protected]87b0d82e2011-10-07 21:02:5929namespace aura {
[email protected]e29014c2011-11-16 18:25:5130class EventFilter;
[email protected]35304ce2011-12-14 23:21:0131class RootWindow;
[email protected]87b0d82e2011-10-07 21:02:5932class Window;
[email protected]c28853612012-05-31 22:43:4433namespace client {
[email protected]39718b52012-12-03 17:24:5634class ActivationClient;
[email protected]8cfb6722012-11-28 03:28:4635class FocusClient;
[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]a1b7a822013-02-23 19:08:0461class TooltipController;
[email protected]b5756e22012-11-30 01:32:0262class VisibilityController;
[email protected]0c2dc012012-12-02 00:00:2363class WindowModalityController;
[email protected]4a59e4e2012-11-12 21:15:4064}
[email protected]57b8bb352012-01-11 05:11:4665}
[email protected]87b0d82e2011-10-07 21:02:5966
[email protected]55f593352011-12-24 05:42:4667namespace ash {
[email protected]87b0d82e2011-10-07 21:02:5968
[email protected]2f744282011-12-23 22:40:5269class AcceleratorController;
[email protected]c0ff0342013-02-27 00:41:2970class AshNativeCursorManager;
[email protected]f4c92b382012-08-28 00:59:5971class CapsLockDelegate;
[email protected]e70cf0ed2012-03-15 16:24:4772class DesktopBackgroundController;
[email protected]edbfb8d2012-09-03 08:33:4373class DisplayController;
[email protected]f48075d2012-05-24 11:06:5174class HighContrastController;
[email protected]671a2ae2011-10-13 21:53:2375class Launcher;
[email protected]b913a3a2012-12-11 13:07:1976class LauncherDelegate;
77class LauncherModel;
[email protected]77f7c132012-11-15 06:52:5478class MagnificationController;
[email protected]8f80db0f2012-02-07 14:44:5379class NestedDispatcherController;
[email protected]77f7c132012-11-15 06:52:5480class PartialMagnificationController;
[email protected]e0d22e82012-01-04 00:46:5781class PowerButtonController;
[email protected]fca90ea2012-12-14 04:13:3082class RootWindowHostFactory;
[email protected]1a2145b2012-03-13 21:09:1783class ScreenAsh;
[email protected]222f40c2012-10-18 08:58:1384class SessionStateController;
[email protected]fcb123d2013-04-17 15:58:4985class SessionStateDelegate;
[email protected]2b99f8c2011-10-11 19:42:2486class ShellDelegate;
[email protected]1a2145b2012-03-13 21:09:1787class ShellObserver;
[email protected]bfb411312012-02-27 20:59:2788class SystemTray;
[email protected]51ed5992012-11-07 10:14:3989class SystemTrayDelegate;
[email protected]83b2b84c2012-11-14 01:11:0090class SystemTrayNotifier;
[email protected]c16b9422012-06-06 21:51:1191class UserActivityDetector;
[email protected]10b22612012-03-22 17:07:5592class UserWallpaperDelegate;
[email protected]6aa614a2012-01-19 22:13:3893class VideoDetector;
[email protected]88d71122012-10-18 07:11:0194class WebNotificationTray;
[email protected]40c4cbb2012-01-10 23:26:0795class WindowCycleController;
[email protected]60fa9bba2011-10-28 21:21:5196
97namespace internal {
[email protected]2f744282011-12-23 22:40:5298class AcceleratorFilter;
[email protected]0039db92012-05-09 04:11:4599class ActivationController;
100class AppListController;
[email protected]60a978b72012-06-08 00:29:18101class CaptureController;
[email protected]6bdf7952012-11-14 10:10:58102class DisplayChangeObserverX11;
[email protected]18b21b2e2013-03-01 20:56:23103class DisplayErrorObserver;
[email protected]6bdf7952012-11-14 10:10:58104class DisplayManager;
[email protected]084b6bb2011-11-17 05:18:16105class DragDropController;
[email protected]e67291f12012-10-10 05:52:38106class EventClientImpl;
[email protected]b9d224c2012-07-13 01:09:03107class EventRewriterEventFilter;
[email protected]682990f2013-01-10 06:49:11108class EventTransformationHandler;
[email protected]3d29912a2012-02-07 07:41:51109class FocusCycler;
[email protected]78d96302012-06-22 00:58:07110class MouseCursorEventFilter;
[email protected]196e9452012-08-01 06:42:51111class OutputConfiguratorAnimation;
[email protected]9ae32df2012-07-26 03:25:18112class OverlayEventFilter;
[email protected]e4a181cc2012-03-17 02:20:57113class ResizeShadowController;
[email protected]d90b8392012-06-13 09:34:56114class RootWindowController;
[email protected]b0079a92012-01-25 20:13:38115class RootWindowLayoutManager;
[email protected]8d625fb2012-07-18 16:40:06116class ScreenPositionController;
[email protected]9861f1752012-06-01 07:16:14117class SlowAnimationEventFilter;
[email protected]6d6546e2012-05-30 23:12:02118class StatusAreaWidget;
[email protected]9ae32df2012-07-26 03:25:18119class SystemGestureEventFilter;
[email protected]c0ce80e2012-10-05 23:28:27120class SystemModalContainerEventFilter;
[email protected]73074742012-05-17 01:44:41121class TouchObserverHUD;
[email protected]60fa9bba2011-10-28 21:21:51122class WorkspaceController;
123}
[email protected]2b99f8c2011-10-11 19:42:24124
[email protected]0af58042012-12-13 03:21:35125namespace shell {
126class WindowWatcher;
127}
128
[email protected]0c68e892012-12-08 16:54:53129namespace test {
130class ShellTestApi;
131}
132
[email protected]87b0d82e2011-10-07 21:02:59133// Shell is a singleton object that presents the Shell API and implements the
[email protected]99f07e02011-12-07 00:02:59134// RootWindow's delegate interface.
[email protected]b0079a92012-01-25 20:13:38135//
136// Upon creation, the Shell sets itself as the RootWindow's delegate, which
137// takes ownership of the Shell.
[email protected]1ae361652012-12-12 22:39:51138class ASH_EXPORT Shell
139 : public internal::SystemModalContainerEventFilterDelegate,
140 public ui::EventTarget,
141 public aura::client::ActivationChangeObserver {
[email protected]87b0d82e2011-10-07 21:02:59142 public:
[email protected]be65be362012-06-15 07:38:23143 typedef std::vector<aura::RootWindow*> RootWindowList;
144 typedef std::vector<internal::RootWindowController*> RootWindowControllerList;
145
[email protected]3d29912a2012-02-07 07:41:51146 enum Direction {
147 FORWARD,
148 BACKWARD
149 };
150
[email protected]3266c2b92011-11-14 00:06:08151 // A shell must be explicitly created so that it can call |Init()| with the
152 // delegate set. |delegate| can be NULL (if not required for initialization).
[email protected]09464c72013-04-26 07:31:28153 // Takes ownership of |delegate|.
[email protected]3266c2b92011-11-14 00:06:08154 static Shell* CreateInstance(ShellDelegate* delegate);
155
156 // Should never be called before |CreateInstance()|.
[email protected]cac10fc62011-10-07 23:22:56157 static Shell* GetInstance();
[email protected]3266c2b92011-11-14 00:06:08158
[email protected]b3b7bcd2012-03-06 19:35:45159 // Returns true if the ash shell has been instantiated.
160 static bool HasInstance();
161
[email protected]ef589af2011-12-03 01:07:15162 static void DeleteInstance();
[email protected]cac10fc62011-10-07 23:22:56163
[email protected]d90b8392012-06-13 09:34:56164 // Returns the root window controller for the primary root window.
[email protected]a0afeb12012-12-10 22:57:09165 // TODO(oshima): move this to |RootWindowController|
[email protected]d90b8392012-06-13 09:34:56166 static internal::RootWindowController* GetPrimaryRootWindowController();
167
[email protected]cf1c70e2012-08-30 01:13:02168 // Returns all root window controllers.
[email protected]a0afeb12012-12-10 22:57:09169 // TODO(oshima): move this to |RootWindowController|
[email protected]be65be362012-06-15 07:38:23170 static RootWindowControllerList GetAllRootWindowControllers();
171
172 // Returns the primary RootWindow. The primary RootWindow is the one
[email protected]42713f72012-05-25 00:41:50173 // that has a launcher.
174 static aura::RootWindow* GetPrimaryRootWindow();
[email protected]e73bd7802012-02-17 20:10:34175
[email protected]be65be362012-06-15 07:38:23176 // Returns the active RootWindow. The active RootWindow is the one that
[email protected]a857dbe2012-05-30 22:10:14177 // contains the current active window as a decendant child. The active
178 // RootWindow remains the same even when the active window becomes NULL,
179 // until the another window who has a different root window becomes active.
180 static aura::RootWindow* GetActiveRootWindow();
181
[email protected]ffabb1e2012-10-12 19:51:17182 // Returns the global Screen object that's always active in ash.
183 static gfx::Screen* GetScreen();
184
[email protected]cf1c70e2012-08-30 01:13:02185 // Returns all root windows.
[email protected]be65be362012-06-15 07:38:23186 static RootWindowList GetAllRootWindows();
187
[email protected]7b0f7502012-06-11 00:12:39188 static aura::Window* GetContainer(aura::RootWindow* root_window,
189 int container_id);
[email protected]e67291f12012-10-10 05:52:38190 static const aura::Window* GetContainer(const aura::RootWindow* root_window,
191 int container_id);
[email protected]7b0f7502012-06-11 00:12:39192
193 // Returns the list of containers that match |container_id| in
[email protected]429433f2012-12-28 20:14:46194 // all root windows. If |priority_root| is given, the container
195 // in the |priority_root| will be inserted at the top of the list.
196 static std::vector<aura::Window*> GetContainersFromAllRootWindows(
197 int container_id,
198 aura::RootWindow* priority_root);
[email protected]7b0f7502012-06-11 00:12:39199
[email protected]e74aaf0a2012-10-12 18:42:28200 // True if "launcher per display" feature is enabled.
201 static bool IsLauncherPerDisplayEnabled();
202
[email protected]a4016f12013-05-02 07:53:47203 // True if an experimental maximize mode is enabled which forces browser and
204 // application windows to be maximized only.
205 static bool IsForcedMaximizeMode();
206
[email protected]a857dbe2012-05-30 22:10:14207 void set_active_root_window(aura::RootWindow* active_root_window) {
208 active_root_window_ = active_root_window;
209 }
210
[email protected]cb054f972012-10-11 20:27:28211 // Shows the context menu for the background and launcher at
[email protected]431552c2012-10-23 00:38:33212 // |location_in_screen| (in screen coordinates).
213 void ShowContextMenu(const gfx::Point& location_in_screen);
[email protected]cac10fc62011-10-07 23:22:56214
[email protected]b913a3a2012-12-11 13:07:19215 // Toggles the app list. |window| specifies in which display the app
216 // list should be shown. If this is NULL, the active root window
217 // will be used.
218 void ToggleAppList(aura::Window* anchor);
[email protected]ae4987d2011-11-21 22:52:44219
[email protected]7510d1082012-03-30 21:58:34220 // Returns app list target visibility.
221 bool GetAppListTargetVisibility() const;
222
[email protected]1e51a9d2012-04-09 23:31:11223 // Returns app list window or NULL if it is not visible.
224 aura::Window* GetAppListWindow();
225
[email protected]dc09739372012-11-15 20:17:39226 // Returns true if a system-modal dialog window is currently open.
227 bool IsSystemModalWindowOpen() const;
[email protected]40c4cbb2012-01-10 23:26:07228
[email protected]852a55d2012-10-17 13:30:30229 // For testing only: set simulation that a modal window is open
230 void SimulateModalWindowOpenForTesting(bool modal_window_open) {
231 simulate_modal_window_open_for_testing_ = modal_window_open;
232 }
233
[email protected]57b8bb352012-01-11 05:11:46234 // Creates a default views::NonClientFrameView for use by windows in the
235 // Ash environment.
236 views::NonClientFrameView* CreateDefaultNonClientFrameView(
237 views::Widget* widget);
238
[email protected]d9456cb2012-03-21 16:41:04239 // Rotates focus through containers that can receive focus.
[email protected]3d29912a2012-02-07 07:41:51240 void RotateFocus(Direction direction);
241
[email protected]2e236a52012-06-27 22:21:47242 // Sets the work area insets of the display that contains |window|,
[email protected]8a45c972012-03-14 18:22:44243 // this notifies observers too.
[email protected]27f6af62012-03-21 05:34:40244 // TODO(sky): this no longer really replicates what happens and is unreliable.
245 // Remove this.
[email protected]2e236a52012-06-27 22:21:47246 void SetDisplayWorkAreaInsets(aura::Window* window,
[email protected]8a45c972012-03-14 18:22:44247 const gfx::Insets& insets);
[email protected]1a2145b2012-03-13 21:09:17248
[email protected]82d3954ae2012-04-20 09:02:22249 // Called when the user logs in.
250 void OnLoginStateChanged(user::LoginStatus status);
251
[email protected]88d71122012-10-18 07:11:01252 // Called when the login status changes.
253 // TODO(oshima): Investigate if we can merge this and |OnLoginStateChanged|.
254 void UpdateAfterLoginStatusChange(user::LoginStatus status);
255
[email protected]82d3954ae2012-04-20 09:02:22256 // Called when the application is exiting.
257 void OnAppTerminating();
258
259 // Called when the screen is locked (after the lock window is visible) or
260 // unlocked.
261 void OnLockStateChanged(bool locked);
262
[email protected]d9456cb2012-03-21 16:41:04263 // Initializes |launcher_|. Does nothing if it's already initialized.
264 void CreateLauncher();
265
[email protected]7e1df2f62012-07-19 19:17:18266 // Show launcher view if it was created hidden (before session has started).
267 void ShowLauncher();
268
[email protected]d9456cb2012-03-21 16:41:04269 // Adds/removes observer.
[email protected]1a2145b2012-03-13 21:09:17270 void AddShellObserver(ShellObserver* observer);
271 void RemoveShellObserver(ShellObserver* observer);
272
[email protected]6e9f6aa2012-02-09 04:16:20273#if !defined(OS_MACOSX)
[email protected]2f744282011-12-23 22:40:52274 AcceleratorController* accelerator_controller() {
[email protected]745816be2011-11-22 05:08:30275 return accelerator_controller_.get();
276 }
[email protected]6e9f6aa2012-02-09 04:16:20277#endif // !defined(OS_MACOSX)
278
[email protected]6bdf7952012-11-14 10:10:58279 internal::DisplayManager* display_manager() {
280 return display_manager_.get();
281 }
[email protected]f1d5c3a2013-04-23 17:42:56282 views::corewm::InputMethodEventFilter* input_method_filter() {
283 return input_method_filter_.get();
284 }
[email protected]4a59e4e2012-11-12 21:15:40285 views::corewm::CompoundEventFilter* env_filter() {
[email protected]492533b32012-09-21 19:06:14286 return env_filter_.get();
[email protected]627a62f2012-02-14 22:59:14287 }
[email protected]a1b7a822013-02-23 19:08:04288 views::corewm::TooltipController* tooltip_controller() {
[email protected]862deef2011-12-15 22:07:33289 return tooltip_controller_.get();
[email protected]4a229e902011-12-01 21:21:11290 }
[email protected]b9d224c2012-07-13 01:09:03291 internal::EventRewriterEventFilter* event_rewriter_filter() {
292 return event_rewriter_filter_.get();
[email protected]42f06f92012-03-27 00:57:57293 }
[email protected]9ae32df2012-07-26 03:25:18294 internal::OverlayEventFilter* overlay_filter() {
295 return overlay_filter_.get();
[email protected]0b0b0742012-02-16 13:23:45296 }
[email protected]e70cf0ed2012-03-15 16:24:47297 DesktopBackgroundController* desktop_background_controller() {
298 return desktop_background_controller_.get();
299 }
[email protected]e0d22e82012-01-04 00:46:57300 PowerButtonController* power_button_controller() {
301 return power_button_controller_.get();
302 }
[email protected]222f40c2012-10-18 08:58:13303 SessionStateController* session_state_controller() {
304 return session_state_controller_.get();
305 }
[email protected]c16b9422012-06-06 21:51:11306 UserActivityDetector* user_activity_detector() {
307 return user_activity_detector_.get();
308 }
[email protected]6aa614a2012-01-19 22:13:38309 VideoDetector* video_detector() {
310 return video_detector_.get();
311 }
[email protected]40c4cbb2012-01-10 23:26:07312 WindowCycleController* window_cycle_controller() {
313 return window_cycle_controller_.get();
314 }
[email protected]2d511542012-03-07 09:13:34315 internal::FocusCycler* focus_cycler() {
316 return focus_cycler_.get();
317 }
[email protected]edbfb8d2012-09-03 08:33:43318 DisplayController* display_controller() {
[email protected]2e236a52012-06-27 22:21:47319 return display_controller_.get();
[email protected]3e1cdd312012-06-07 03:48:41320 }
[email protected]8b7ba87b2012-09-01 00:40:40321 internal::MouseCursorEventFilter* mouse_cursor_filter() {
322 return mouse_cursor_filter_.get();
323 }
[email protected]682990f2013-01-10 06:49:11324 internal::EventTransformationHandler* event_transformation_handler() {
325 return event_transformation_handler_.get();
326 }
[email protected]c0ff0342013-02-27 00:41:29327 views::corewm::CursorManager* cursor_manager() { return &cursor_manager_; }
[email protected]4a229e902011-12-01 21:21:11328
[email protected]3266c2b92011-11-14 00:06:08329 ShellDelegate* delegate() { return delegate_.get(); }
[email protected]aa54218b2012-06-12 16:51:42330
[email protected]10b22612012-03-22 17:07:55331 UserWallpaperDelegate* user_wallpaper_delegate() {
332 return user_wallpaper_delegate_.get();
333 }
[email protected]35304ce2011-12-14 23:21:01334
[email protected]f4c92b382012-08-28 00:59:59335 CapsLockDelegate* caps_lock_delegate() {
336 return caps_lock_delegate_.get();
337 }
338
[email protected]fcb123d2013-04-17 15:58:49339 SessionStateDelegate* session_state_delegate() {
340 return session_state_delegate_.get();
341 }
342
[email protected]f48075d2012-05-24 11:06:51343 HighContrastController* high_contrast_controller() {
344 return high_contrast_controller_.get();
345 }
346
[email protected]77f7c132012-11-15 06:52:54347 MagnificationController* magnification_controller() {
[email protected]c1c670172012-04-26 04:20:26348 return magnification_controller_.get();
349 }
[email protected]f48075d2012-05-24 11:06:51350
[email protected]77f7c132012-11-15 06:52:54351 PartialMagnificationController* partial_magnification_controller() {
352 return partial_magnification_controller_.get();
353 }
[email protected]d219a192012-12-14 00:08:18354 aura::client::ActivationClient* activation_client() {
355 return activation_client_;
356 }
[email protected]77f7c132012-11-15 06:52:54357
[email protected]6bdf7952012-11-14 10:10:58358 ScreenAsh* screen() { return screen_; }
[email protected]1a2145b2012-03-13 21:09:17359
[email protected]c758fbf2012-03-25 22:53:59360 // Force the shelf to query for it's current visibility state.
361 void UpdateShelfVisibility();
362
[email protected]431552c2012-10-23 00:38:33363 // TODO(oshima): Define an interface to access shelf/launcher
364 // state, or just use Launcher.
[email protected]c758fbf2012-03-25 22:53:59365
[email protected]431552c2012-10-23 00:38:33366 // Sets/gets the shelf auto-hide behavior on |root_window|.
367 void SetShelfAutoHideBehavior(ShelfAutoHideBehavior behavior,
368 aura::RootWindow* root_window);
369 ShelfAutoHideBehavior GetShelfAutoHideBehavior(
370 aura::RootWindow* root_window) const;
371
[email protected]431552c2012-10-23 00:38:33372 // Sets/gets shelf's alignment on |root_window|.
373 void SetShelfAlignment(ShelfAlignment alignment,
374 aura::RootWindow* root_window);
375 ShelfAlignment GetShelfAlignment(aura::RootWindow* root_window);
[email protected]55444502012-05-10 15:43:53376
[email protected]d90b8392012-06-13 09:34:56377 // Dims or undims the screen.
378 void SetDimming(bool should_dim);
379
[email protected]090c4f12012-10-29 18:56:42380 // Creates a modal background (a partially-opaque fullscreen window)
381 // on all displays for |window|.
382 void CreateModalBackground(aura::Window* window);
[email protected]c0ce80e2012-10-05 23:28:27383
384 // Called when a modal window is removed. It will activate
385 // another modal window if any, or remove modal screens
386 // on all displays.
387 void OnModalWindowRemoved(aura::Window* removed);
388
[email protected]88d71122012-10-18 07:11:01389 // Returns WebNotificationTray on the primary root window.
390 WebNotificationTray* GetWebNotificationTray();
[email protected]6d6546e2012-05-30 23:12:02391
[email protected]a0afeb12012-12-10 22:57:09392 // Does the primary display have status area?
393 bool HasPrimaryStatusArea();
394
395 // Returns the system tray on primary display.
396 SystemTray* GetPrimarySystemTray();
[email protected]bfb411312012-02-27 20:59:27397
[email protected]945f9cae2012-12-12 09:54:29398 SystemTrayDelegate* system_tray_delegate() {
[email protected]51ed5992012-11-07 10:14:39399 return system_tray_delegate_.get();
400 }
401
[email protected]83b2b84c2012-11-14 01:11:00402 SystemTrayNotifier* system_tray_notifier() {
403 return system_tray_notifier_.get();
404 }
405
[email protected]9488d4d2012-02-29 18:32:37406 static void set_initially_hide_cursor(bool hide) {
407 initially_hide_cursor_ = hide;
408 }
409
[email protected]e4a181cc2012-03-17 02:20:57410 internal::ResizeShadowController* resize_shadow_controller() {
411 return resize_shadow_controller_.get();
412 }
413
[email protected]a54e65b2011-11-21 22:03:34414 // Made available for tests.
[email protected]86f2b5e2012-11-14 20:37:00415 views::corewm::ShadowController* shadow_controller() {
[email protected]a54e65b2011-11-21 22:03:34416 return shadow_controller_.get();
417 }
418
[email protected]fa4a45832012-04-12 21:32:48419 content::BrowserContext* browser_context() { return browser_context_; }
420 void set_browser_context(content::BrowserContext* browser_context) {
421 browser_context_ = browser_context;
422 }
423
[email protected]2e236a52012-06-27 22:21:47424 // Initializes the root window to be used for a secondary display.
425 void InitRootWindowForSecondaryDisplay(aura::RootWindow* root);
[email protected]a857dbe2012-05-30 22:10:14426
[email protected]f9466702012-09-17 16:35:27427 // Starts the animation that occurs on first login.
428 void DoInitialWorkspaceAnimation();
429
[email protected]117542c2013-04-30 20:27:21430#if defined(OS_CHROMEOS) && defined(USE_X11)
[email protected]945ece962013-03-21 06:42:39431 // TODO(oshima): Move these objects to DisplayController.
[email protected]70b3e7d52012-06-02 22:12:25432 chromeos::OutputConfigurator* output_configurator() {
433 return output_configurator_.get();
434 }
[email protected]196e9452012-08-01 06:42:51435 internal::OutputConfiguratorAnimation* output_configurator_animation() {
436 return output_configurator_animation_.get();
437 }
[email protected]18b21b2e2013-03-01 20:56:23438 internal::DisplayErrorObserver* display_error_observer() {
439 return display_error_observer_.get();
440 }
[email protected]117542c2013-04-30 20:27:21441#endif // defined(OS_CHROMEOS) && defined(USE_X11)
[email protected]70b3e7d52012-06-02 22:12:25442
[email protected]8393aa62013-01-23 19:40:10443 RootWindowHostFactory* root_window_host_factory() {
444 return root_window_host_factory_.get();
445 }
446
[email protected]478c6c32013-03-09 02:50:58447 LauncherModel* launcher_model() {
448 return launcher_model_.get();
449 }
450
[email protected]4f084702013-04-30 14:53:34451 internal::AppListController* app_list_controller() {
452 return app_list_controller_.get();
453 }
454
[email protected]478c6c32013-03-09 02:50:58455 // Returns the launcher delegate, creating if necesary.
456 LauncherDelegate* GetLauncherDelegate();
457
[email protected]2b4cd302012-02-24 20:21:13458 private:
[email protected]c39be8f2012-06-15 22:58:36459 FRIEND_TEST_ALL_PREFIXES(ExtendedDesktopTest, TestCursor);
[email protected]1aad3322012-06-06 06:37:09460 FRIEND_TEST_ALL_PREFIXES(WindowManagerTest, MouseEventCursors);
461 FRIEND_TEST_ALL_PREFIXES(WindowManagerTest, TransformActivate);
[email protected]d90b8392012-06-13 09:34:56462 friend class internal::RootWindowController;
[email protected]0c68e892012-12-08 16:54:53463 friend class test::ShellTestApi;
[email protected]0af58042012-12-13 03:21:35464 friend class shell::WindowWatcher;
[email protected]ad0c8722012-03-02 20:17:45465
[email protected]cac10fc62011-10-07 23:22:56466 typedef std::pair<aura::Window*, gfx::Rect> WindowAndBoundsPair;
467
[email protected]09464c72013-04-26 07:31:28468 // Takes ownership of |delegate|.
[email protected]3266c2b92011-11-14 00:06:08469 explicit Shell(ShellDelegate* delegate);
470 virtual ~Shell();
471
472 void Init();
[email protected]b0639282011-12-22 21:12:27473
[email protected]be65be362012-06-15 07:38:23474 // Initializes the root window and root window controller so that it
475 // can host browser windows.
476 void InitRootWindowController(internal::RootWindowController* root);
[email protected]d90b8392012-06-13 09:34:56477
[email protected]c0ce80e2012-10-05 23:28:27478 // ash::internal::SystemModalContainerEventFilterDelegate overrides:
479 virtual bool CanWindowReceiveEvents(aura::Window* window) OVERRIDE;
480
[email protected]5097e692012-10-30 22:08:41481 // Overridden from ui::EventTarget:
[email protected]869f6352012-12-06 20:47:17482 virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE;
[email protected]5097e692012-10-30 22:08:41483 virtual EventTarget* GetParentTarget() OVERRIDE;
[email protected]049cf34b2012-12-07 17:15:48484 virtual void OnEvent(ui::Event* event) OVERRIDE;
[email protected]5097e692012-10-30 22:08:41485
[email protected]1ae361652012-12-12 22:39:51486 // Overridden from aura::client::ActivationChangeObserver:
487 virtual void OnWindowActivated(aura::Window* gained_active,
488 aura::Window* lost_active) OVERRIDE;
489
[email protected]cac10fc62011-10-07 23:22:56490 static Shell* instance_;
491
[email protected]9488d4d2012-02-29 18:32:37492 // If set before the Shell is initialized, the mouse cursor will be hidden
493 // when the screen is initially created.
494 static bool initially_hide_cursor_;
495
[email protected]b0a8faa2012-10-19 03:22:22496 ScreenAsh* screen_;
[email protected]58482fa2012-03-02 14:57:39497
[email protected]f634dd32012-07-23 22:49:07498 // Active root window. Never becomes NULL during the session.
[email protected]a857dbe2012-05-30 22:10:14499 aura::RootWindow* active_root_window_;
500
[email protected]1aad3322012-06-06 06:37:09501 // The CompoundEventFilter owned by aura::Env object.
[email protected]4a59e4e2012-11-12 21:15:40502 scoped_ptr<views::corewm::CompoundEventFilter> env_filter_;
[email protected]627a62f2012-02-14 22:59:14503
[email protected]cac10fc62011-10-07 23:22:56504 std::vector<WindowAndBoundsPair> to_restore_;
505
[email protected]6e9f6aa2012-02-09 04:16:20506#if !defined(OS_MACOSX)
[email protected]8f80db0f2012-02-07 14:44:53507 scoped_ptr<NestedDispatcherController> nested_dispatcher_controller_;
508
[email protected]2f744282011-12-23 22:40:52509 scoped_ptr<AcceleratorController> accelerator_controller_;
[email protected]6e9f6aa2012-02-09 04:16:20510#endif // !defined(OS_MACOSX)
[email protected]745816be2011-11-22 05:08:30511
[email protected]2b99f8c2011-10-11 19:42:24512 scoped_ptr<ShellDelegate> delegate_;
[email protected]51ed5992012-11-07 10:14:39513 scoped_ptr<SystemTrayDelegate> system_tray_delegate_;
[email protected]83b2b84c2012-11-14 01:11:00514 scoped_ptr<SystemTrayNotifier> system_tray_notifier_;
[email protected]10b22612012-03-22 17:07:55515 scoped_ptr<UserWallpaperDelegate> user_wallpaper_delegate_;
[email protected]f4c92b382012-08-28 00:59:59516 scoped_ptr<CapsLockDelegate> caps_lock_delegate_;
[email protected]fcb123d2013-04-17 15:58:49517 scoped_ptr<SessionStateDelegate> session_state_delegate_;
[email protected]b913a3a2012-12-11 13:07:19518 scoped_ptr<LauncherDelegate> launcher_delegate_;
519
520 scoped_ptr<LauncherModel> launcher_model_;
[email protected]2b99f8c2011-10-11 19:42:24521
[email protected]0039db92012-05-09 04:11:45522 scoped_ptr<internal::AppListController> app_list_controller_;
[email protected]ae4987d2011-11-21 22:52:44523
[email protected]9fc206d2011-12-13 00:05:33524 scoped_ptr<internal::ActivationController> activation_controller_;
[email protected]60a978b72012-06-08 00:29:18525 scoped_ptr<internal::CaptureController> capture_controller_;
[email protected]084b6bb2011-11-17 05:18:16526 scoped_ptr<internal::DragDropController> drag_drop_controller_;
[email protected]e4a181cc2012-03-17 02:20:57527 scoped_ptr<internal::ResizeShadowController> resize_shadow_controller_;
[email protected]86f2b5e2012-11-14 20:37:00528 scoped_ptr<views::corewm::ShadowController> shadow_controller_;
[email protected]b5756e22012-11-30 01:32:02529 scoped_ptr<views::corewm::VisibilityController> visibility_controller_;
[email protected]0c2dc012012-12-02 00:00:23530 scoped_ptr<views::corewm::WindowModalityController>
531 window_modality_controller_;
[email protected]a1b7a822013-02-23 19:08:04532 scoped_ptr<views::corewm::TooltipController> tooltip_controller_;
[email protected]e70cf0ed2012-03-15 16:24:47533 scoped_ptr<DesktopBackgroundController> desktop_background_controller_;
[email protected]e0d22e82012-01-04 00:46:57534 scoped_ptr<PowerButtonController> power_button_controller_;
[email protected]222f40c2012-10-18 08:58:13535 scoped_ptr<SessionStateController> session_state_controller_;
[email protected]c16b9422012-06-06 21:51:11536 scoped_ptr<UserActivityDetector> user_activity_detector_;
[email protected]6aa614a2012-01-19 22:13:38537 scoped_ptr<VideoDetector> video_detector_;
[email protected]40c4cbb2012-01-10 23:26:07538 scoped_ptr<WindowCycleController> window_cycle_controller_;
[email protected]3d29912a2012-02-07 07:41:51539 scoped_ptr<internal::FocusCycler> focus_cycler_;
[email protected]edbfb8d2012-09-03 08:33:43540 scoped_ptr<DisplayController> display_controller_;
[email protected]f48075d2012-05-24 11:06:51541 scoped_ptr<HighContrastController> high_contrast_controller_;
[email protected]77f7c132012-11-15 06:52:54542 scoped_ptr<MagnificationController> magnification_controller_;
543 scoped_ptr<PartialMagnificationController> partial_magnification_controller_;
[email protected]8cfb6722012-11-28 03:28:46544 scoped_ptr<aura::client::FocusClient> focus_client_;
[email protected]c28853612012-05-31 22:43:44545 scoped_ptr<aura::client::UserActionClient> user_action_client_;
[email protected]39718b52012-12-03 17:24:56546 aura::client::ActivationClient* activation_client_;
[email protected]78d96302012-06-22 00:58:07547 scoped_ptr<internal::MouseCursorEventFilter> mouse_cursor_filter_;
[email protected]8d625fb2012-07-18 16:40:06548 scoped_ptr<internal::ScreenPositionController> screen_position_controller_;
[email protected]c0ce80e2012-10-05 23:28:27549 scoped_ptr<internal::SystemModalContainerEventFilter> modality_filter_;
[email protected]e67291f12012-10-10 05:52:38550 scoped_ptr<internal::EventClientImpl> event_client_;
[email protected]682990f2013-01-10 06:49:11551 scoped_ptr<internal::EventTransformationHandler>
552 event_transformation_handler_;
[email protected]fca90ea2012-12-14 04:13:30553 scoped_ptr<RootWindowHostFactory> root_window_host_factory_;
[email protected]ae18b9112011-11-07 16:59:13554
[email protected]b9d224c2012-07-13 01:09:03555 // An event filter that rewrites or drops an event.
556 scoped_ptr<internal::EventRewriterEventFilter> event_rewriter_filter_;
[email protected]6e9f6aa2012-02-09 04:16:20557
[email protected]0b0b0742012-02-16 13:23:45558 // An event filter that pre-handles key events while the partial
[email protected]a1584a712012-07-30 21:02:26559 // screenshot UI or the keyboard overlay is active.
[email protected]9ae32df2012-07-26 03:25:18560 scoped_ptr<internal::OverlayEventFilter> overlay_filter_;
[email protected]0b0b0742012-02-16 13:23:45561
[email protected]435b212e2012-04-05 19:43:37562 // An event filter which handles system level gestures
563 scoped_ptr<internal::SystemGestureEventFilter> system_gesture_filter_;
564
[email protected]6e9f6aa2012-02-09 04:16:20565#if !defined(OS_MACOSX)
[email protected]745816be2011-11-22 05:08:30566 // An event filter that pre-handles global accelerators.
[email protected]2f744282011-12-23 22:40:52567 scoped_ptr<internal::AcceleratorFilter> accelerator_filter_;
[email protected]6e9f6aa2012-02-09 04:16:20568#endif
[email protected]745816be2011-11-22 05:08:30569
[email protected]42f06f92012-03-27 00:57:57570 // An event filter that pre-handles all key events to send them to an IME.
[email protected]4a59e4e2012-11-12 21:15:40571 scoped_ptr<views::corewm::InputMethodEventFilter> input_method_filter_;
[email protected]42f06f92012-03-27 00:57:57572
[email protected]6bdf7952012-11-14 10:10:58573 scoped_ptr<internal::DisplayManager> display_manager_;
574
[email protected]117542c2013-04-30 20:27:21575#if defined(OS_CHROMEOS) && defined(USE_X11)
[email protected]70b3e7d52012-06-02 22:12:25576 // Controls video output device state.
577 scoped_ptr<chromeos::OutputConfigurator> output_configurator_;
[email protected]196e9452012-08-01 06:42:51578 scoped_ptr<internal::OutputConfiguratorAnimation>
579 output_configurator_animation_;
[email protected]18b21b2e2013-03-01 20:56:23580 scoped_ptr<internal::DisplayErrorObserver> display_error_observer_;
[email protected]6bdf7952012-11-14 10:10:58581
582 // Receives output change events and udpates the display manager.
583 scoped_ptr<internal::DisplayChangeObserverX11> display_change_observer_;
[email protected]117542c2013-04-30 20:27:21584#endif // defined(OS_CHROMEOS) && defined(USE_X11)
[email protected]70b3e7d52012-06-02 22:12:25585
[email protected]c0ff0342013-02-27 00:41:29586 // |native_cursor_manager_| is owned by |cursor_manager_|, but we keep a
587 // pointer to vend to test code.
588 AshNativeCursorManager* native_cursor_manager_;
589 views::corewm::CursorManager cursor_manager_;
[email protected]4b8003c2012-07-26 00:54:19590
[email protected]1a2145b2012-03-13 21:09:17591 ObserverList<ShellObserver> observers_;
592
[email protected]fa4a45832012-04-12 21:32:48593 // Used by ash/shell.
594 content::BrowserContext* browser_context_;
595
[email protected]852a55d2012-10-17 13:30:30596 // For testing only: simulate that a modal window is open
597 bool simulate_modal_window_open_for_testing_;
598
[email protected]87b0d82e2011-10-07 21:02:59599 DISALLOW_COPY_AND_ASSIGN(Shell);
600};
601
[email protected]55f593352011-12-24 05:42:46602} // namespace ash
[email protected]87b0d82e2011-10-07 21:02:59603
[email protected]b65bdda2011-12-23 23:35:31604#endif // ASH_SHELL_H_