blob: 6e874c03a82b7ebbaf24a51fc380a20a1eec1203 [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#pragma once
8
[email protected]cac10fc62011-10-07 23:22:569#include <utility>
10#include <vector>
11
[email protected]b65bdda2011-12-23 23:35:3112#include "ash/ash_export.h"
[email protected]82d3954ae2012-04-20 09:02:2213#include "ash/system/user/login_status.h"
[email protected]09f3fc82012-03-26 23:26:5614#include "ash/wm/shelf_auto_hide_behavior.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]2eb6b892012-05-31 13:28:2120#include "ui/gfx/insets.h"
[email protected]9ec0f452012-05-31 15:58:5321#include "ui/gfx/size.h"
[email protected]87b0d82e2011-10-07 21:02:5922
[email protected]b0639282011-12-22 21:12:2723class CommandLine;
24
[email protected]87b0d82e2011-10-07 21:02:5925namespace aura {
[email protected]e29014c2011-11-16 18:25:5126class EventFilter;
[email protected]a857dbe2012-05-30 22:10:1427class FocusManager;
[email protected]e050ef142012-03-21 01:04:2428class Monitor;
[email protected]35304ce2011-12-14 23:21:0129class RootWindow;
[email protected]87b0d82e2011-10-07 21:02:5930class Window;
[email protected]c28853612012-05-31 22:43:4431namespace client {
32class UserActionClient;
33}
[email protected]0e46c272012-05-15 18:15:2334namespace shared {
35class InputMethodEventFilter;
36class RootWindowEventFilter;
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;
57}
[email protected]87b0d82e2011-10-07 21:02:5958
[email protected]55f593352011-12-24 05:42:4659namespace ash {
[email protected]87b0d82e2011-10-07 21:02:5960
[email protected]2f744282011-12-23 22:40:5261class AcceleratorController;
[email protected]e70cf0ed2012-03-15 16:24:4762class DesktopBackgroundController;
[email protected]f48075d2012-05-24 11:06:5163class HighContrastController;
[email protected]671a2ae2011-10-13 21:53:2364class Launcher;
[email protected]8f80db0f2012-02-07 14:44:5365class NestedDispatcherController;
[email protected]e0d22e82012-01-04 00:46:5766class PowerButtonController;
[email protected]1a2145b2012-03-13 21:09:1767class ScreenAsh;
[email protected]2b99f8c2011-10-11 19:42:2468class ShellDelegate;
[email protected]1a2145b2012-03-13 21:09:1769class ShellObserver;
[email protected]bfb411312012-02-27 20:59:2770class SystemTrayDelegate;
71class SystemTray;
[email protected]10b22612012-03-22 17:07:5572class UserWallpaperDelegate;
[email protected]6aa614a2012-01-19 22:13:3873class VideoDetector;
[email protected]40c4cbb2012-01-10 23:26:0774class WindowCycleController;
[email protected]60fa9bba2011-10-28 21:21:5175
76namespace internal {
[email protected]2f744282011-12-23 22:40:5277class AcceleratorFilter;
[email protected]0039db92012-05-09 04:11:4578class ActivationController;
79class AppListController;
[email protected]084b6bb2011-11-17 05:18:1680class DragDropController;
[email protected]262f8bd2012-03-23 19:30:2781class EventClientImpl;
[email protected]3d29912a2012-02-07 07:41:5182class FocusCycler;
[email protected]42f06f92012-03-27 00:57:5783class KeyRewriterEventFilter;
[email protected]c1c670172012-04-26 04:20:2684class MagnificationController;
[email protected]e050ef142012-03-21 01:04:2485class MonitorController;
[email protected]7cf8dd62012-04-22 05:14:5886class PanelLayoutManager;
[email protected]0b0b0742012-02-16 13:23:4587class PartialScreenshotEventFilter;
[email protected]e4a181cc2012-03-17 02:20:5788class ResizeShadowController;
[email protected]b0079a92012-01-25 20:13:3889class RootWindowLayoutManager;
[email protected]42993212012-04-30 23:42:0490class ScreenDimmer;
[email protected]a54e65b2011-11-21 22:03:3491class ShadowController;
[email protected]4e437632012-02-13 22:39:4092class ShelfLayoutManager;
[email protected]0cfc18e2012-04-11 18:17:4793class ShellContextMenu;
[email protected]9861f1752012-06-01 07:16:1494class SlowAnimationEventFilter;
[email protected]435b212e2012-04-05 19:43:3795class SystemGestureEventFilter;
[email protected]ee1e1a22011-12-15 01:51:1096class StackingController;
[email protected]6d6546e2012-05-30 23:12:0297class StatusAreaWidget;
[email protected]862deef2011-12-15 22:07:3398class TooltipController;
[email protected]73074742012-05-17 01:44:4199class TouchObserverHUD;
[email protected]ddd91e92012-01-27 16:03:48100class VisibilityController;
[email protected]80373572012-01-06 23:14:30101class WindowModalityController;
[email protected]60fa9bba2011-10-28 21:21:51102class WorkspaceController;
103}
[email protected]2b99f8c2011-10-11 19:42:24104
[email protected]87b0d82e2011-10-07 21:02:59105// Shell is a singleton object that presents the Shell API and implements the
[email protected]99f07e02011-12-07 00:02:59106// RootWindow's delegate interface.
[email protected]b0079a92012-01-25 20:13:38107//
108// Upon creation, the Shell sets itself as the RootWindow's delegate, which
109// takes ownership of the Shell.
[email protected]e050ef142012-03-21 01:04:24110class ASH_EXPORT Shell {
[email protected]87b0d82e2011-10-07 21:02:59111 public:
[email protected]3d29912a2012-02-07 07:41:51112 enum Direction {
113 FORWARD,
114 BACKWARD
115 };
116
[email protected]2b4cd302012-02-24 20:21:13117 // Accesses private data from a Shell for testing.
118 class ASH_EXPORT TestApi {
119 public:
120 explicit TestApi(Shell* shell);
121
[email protected]2b4cd302012-02-24 20:21:13122 internal::RootWindowLayoutManager* root_window_layout();
[email protected]0e46c272012-05-15 18:15:23123 aura::shared::InputMethodEventFilter* input_method_event_filter();
[email protected]435b212e2012-04-05 19:43:37124 internal::SystemGestureEventFilter* system_gesture_event_filter();
[email protected]db9131602012-02-29 19:06:32125 internal::WorkspaceController* workspace_controller();
[email protected]2b4cd302012-02-24 20:21:13126
127 private:
128 Shell* shell_; // not owned
129
130 DISALLOW_COPY_AND_ASSIGN(TestApi);
131 };
132
[email protected]3266c2b92011-11-14 00:06:08133 // A shell must be explicitly created so that it can call |Init()| with the
134 // delegate set. |delegate| can be NULL (if not required for initialization).
135 static Shell* CreateInstance(ShellDelegate* delegate);
136
137 // Should never be called before |CreateInstance()|.
[email protected]cac10fc62011-10-07 23:22:56138 static Shell* GetInstance();
[email protected]3266c2b92011-11-14 00:06:08139
[email protected]b3b7bcd2012-03-06 19:35:45140 // Returns true if the ash shell has been instantiated.
141 static bool HasInstance();
142
[email protected]ef589af2011-12-03 01:07:15143 static void DeleteInstance();
[email protected]cac10fc62011-10-07 23:22:56144
[email protected]a857dbe2012-05-30 22:10:14145 // Gets the primary RootWindow. The primary RootWindow is the one
[email protected]42713f72012-05-25 00:41:50146 // that has a launcher.
147 static aura::RootWindow* GetPrimaryRootWindow();
[email protected]e73bd7802012-02-17 20:10:34148
[email protected]a857dbe2012-05-30 22:10:14149 // Gets the active RootWindow. The active RootWindow is the one that
150 // contains the current active window as a decendant child. The active
151 // RootWindow remains the same even when the active window becomes NULL,
152 // until the another window who has a different root window becomes active.
153 static aura::RootWindow* GetActiveRootWindow();
154
155 void set_active_root_window(aura::RootWindow* active_root_window) {
156 active_root_window_ = active_root_window;
157 }
158
[email protected]e70cf0ed2012-03-15 16:24:47159 internal::RootWindowLayoutManager* root_window_layout() const {
160 return root_window_layout_;
[email protected]a8bd1cb2012-02-17 23:05:54161 }
162
[email protected]87b0d82e2011-10-07 21:02:59163 aura::Window* GetContainer(int container_id);
164 const aura::Window* GetContainer(int container_id) const;
165
[email protected]99f07e02011-12-07 00:02:59166 // Adds or removes |filter| from the RootWindowEventFilter.
167 void AddRootWindowEventFilter(aura::EventFilter* filter);
168 void RemoveRootWindowEventFilter(aura::EventFilter* filter);
[email protected]2c456102011-12-26 06:26:34169 size_t GetRootWindowEventFilterCount() const;
[email protected]e29014c2011-11-16 18:25:51170
[email protected]b5f30602012-01-30 15:16:57171 // Shows the background menu over |widget|.
172 void ShowBackgroundMenu(views::Widget* widget, const gfx::Point& location);
[email protected]cac10fc62011-10-07 23:22:56173
[email protected]ae4987d2011-11-21 22:52:44174 // Toggles app list.
175 void ToggleAppList();
176
[email protected]7510d1082012-03-30 21:58:34177 // Returns app list target visibility.
178 bool GetAppListTargetVisibility() const;
179
[email protected]1e51a9d2012-04-09 23:31:11180 // Returns app list window or NULL if it is not visible.
181 aura::Window* GetAppListWindow();
182
[email protected]f7eb89c2011-12-13 09:48:54183 // Returns true if the screen is locked.
184 bool IsScreenLocked() const;
185
[email protected]40c4cbb2012-01-10 23:26:07186 // Returns true if a modal dialog window is currently open.
187 bool IsModalWindowOpen() const;
188
[email protected]57b8bb352012-01-11 05:11:46189 // Creates a default views::NonClientFrameView for use by windows in the
190 // Ash environment.
191 views::NonClientFrameView* CreateDefaultNonClientFrameView(
192 views::Widget* widget);
193
[email protected]d9456cb2012-03-21 16:41:04194 // Rotates focus through containers that can receive focus.
[email protected]3d29912a2012-02-07 07:41:51195 void RotateFocus(Direction direction);
196
[email protected]8a45c972012-03-14 18:22:44197 // Sets the work area insets of the monitor that contains |window|,
198 // this notifies observers too.
[email protected]27f6af62012-03-21 05:34:40199 // TODO(sky): this no longer really replicates what happens and is unreliable.
200 // Remove this.
[email protected]8a45c972012-03-14 18:22:44201 void SetMonitorWorkAreaInsets(aura::Window* window,
202 const gfx::Insets& insets);
[email protected]1a2145b2012-03-13 21:09:17203
[email protected]82d3954ae2012-04-20 09:02:22204 // Called when the user logs in.
205 void OnLoginStateChanged(user::LoginStatus status);
206
207 // Called when the application is exiting.
208 void OnAppTerminating();
209
210 // Called when the screen is locked (after the lock window is visible) or
211 // unlocked.
212 void OnLockStateChanged(bool locked);
213
[email protected]d9456cb2012-03-21 16:41:04214 // Initializes |launcher_|. Does nothing if it's already initialized.
215 void CreateLauncher();
216
217 // Adds/removes observer.
[email protected]1a2145b2012-03-13 21:09:17218 void AddShellObserver(ShellObserver* observer);
219 void RemoveShellObserver(ShellObserver* observer);
220
[email protected]6e9f6aa2012-02-09 04:16:20221#if !defined(OS_MACOSX)
[email protected]2f744282011-12-23 22:40:52222 AcceleratorController* accelerator_controller() {
[email protected]745816be2011-11-22 05:08:30223 return accelerator_controller_.get();
224 }
[email protected]6e9f6aa2012-02-09 04:16:20225#endif // !defined(OS_MACOSX)
226
[email protected]0e46c272012-05-15 18:15:23227 aura::shared::RootWindowEventFilter* root_filter() {
[email protected]627a62f2012-02-14 22:59:14228 return root_filter_;
229 }
[email protected]862deef2011-12-15 22:07:33230 internal::TooltipController* tooltip_controller() {
231 return tooltip_controller_.get();
[email protected]4a229e902011-12-01 21:21:11232 }
[email protected]42f06f92012-03-27 00:57:57233 internal::KeyRewriterEventFilter* key_rewriter_filter() {
234 return key_rewriter_filter_.get();
235 }
[email protected]0b0b0742012-02-16 13:23:45236 internal::PartialScreenshotEventFilter* partial_screenshot_filter() {
237 return partial_screenshot_filter_.get();
238 }
[email protected]e70cf0ed2012-03-15 16:24:47239 DesktopBackgroundController* desktop_background_controller() {
240 return desktop_background_controller_.get();
241 }
[email protected]e0d22e82012-01-04 00:46:57242 PowerButtonController* power_button_controller() {
243 return power_button_controller_.get();
244 }
[email protected]6aa614a2012-01-19 22:13:38245 VideoDetector* video_detector() {
246 return video_detector_.get();
247 }
[email protected]40c4cbb2012-01-10 23:26:07248 WindowCycleController* window_cycle_controller() {
249 return window_cycle_controller_.get();
250 }
[email protected]2d511542012-03-07 09:13:34251 internal::FocusCycler* focus_cycler() {
252 return focus_cycler_.get();
253 }
[email protected]4a229e902011-12-01 21:21:11254
[email protected]3266c2b92011-11-14 00:06:08255 ShellDelegate* delegate() { return delegate_.get(); }
[email protected]bfb411312012-02-27 20:59:27256 SystemTrayDelegate* tray_delegate() { return tray_delegate_.get(); }
[email protected]10b22612012-03-22 17:07:55257 UserWallpaperDelegate* user_wallpaper_delegate() {
258 return user_wallpaper_delegate_.get();
259 }
[email protected]35304ce2011-12-14 23:21:01260
[email protected]f48075d2012-05-24 11:06:51261 HighContrastController* high_contrast_controller() {
262 return high_contrast_controller_.get();
263 }
264
[email protected]c1c670172012-04-26 04:20:26265 internal::MagnificationController* magnification_controller() {
266 return magnification_controller_.get();
267 }
[email protected]f48075d2012-05-24 11:06:51268
[email protected]42993212012-04-30 23:42:04269 internal::ScreenDimmer* screen_dimmer() {
270 return screen_dimmer_.get();
271 }
[email protected]c1c670172012-04-26 04:20:26272
[email protected]671a2ae2011-10-13 21:53:23273 Launcher* launcher() { return launcher_.get(); }
274
[email protected]1a2145b2012-03-13 21:09:17275 const ScreenAsh* screen() { return screen_; }
276
[email protected]c758fbf2012-03-25 22:53:59277 // Force the shelf to query for it's current visibility state.
278 void UpdateShelfVisibility();
279
[email protected]09f3fc82012-03-26 23:26:56280 // Sets/gets the shelf auto-hide behavior.
281 void SetShelfAutoHideBehavior(ShelfAutoHideBehavior behavior);
282 ShelfAutoHideBehavior GetShelfAutoHideBehavior() const;
[email protected]c758fbf2012-03-25 22:53:59283
[email protected]55444502012-05-10 15:43:53284 void SetShelfAlignment(ShelfAlignment alignment);
285 ShelfAlignment GetShelfAlignment();
286
[email protected]c758fbf2012-03-25 22:53:59287 // TODO(sky): don't expose this!
[email protected]4e437632012-02-13 22:39:40288 internal::ShelfLayoutManager* shelf() const { return shelf_; }
289
[email protected]6d6546e2012-05-30 23:12:02290 internal::StatusAreaWidget* status_area_widget() const {
291 return status_area_widget_;
292 }
293
294 SystemTray* system_tray() const { return system_tray_.get(); }
[email protected]bfb411312012-02-27 20:59:27295
[email protected]85d43f02012-03-14 21:11:19296 // Returns the size of the grid.
297 int GetGridSize() const;
298
[email protected]9628e0af2012-04-12 20:40:56299 // Returns true if in maximized or fullscreen mode.
300 bool IsInMaximizedMode() const;
301
[email protected]9488d4d2012-02-29 18:32:37302 static void set_initially_hide_cursor(bool hide) {
303 initially_hide_cursor_ = hide;
304 }
305
[email protected]e4a181cc2012-03-17 02:20:57306 internal::ResizeShadowController* resize_shadow_controller() {
307 return resize_shadow_controller_.get();
308 }
309
[email protected]a54e65b2011-11-21 22:03:34310 // Made available for tests.
311 internal::ShadowController* shadow_controller() {
312 return shadow_controller_.get();
313 }
314
[email protected]fa4a45832012-04-12 21:32:48315 content::BrowserContext* browser_context() { return browser_context_; }
316 void set_browser_context(content::BrowserContext* browser_context) {
317 browser_context_ = browser_context;
318 }
319
[email protected]a857dbe2012-05-30 22:10:14320 // Initialize the root window to be used for a secondary monitor.
321 void InitRootWindowForSecondaryMonitor(aura::RootWindow* root);
322
[email protected]70b3e7d52012-06-02 22:12:25323#if defined(OS_CHROMEOS)
324 chromeos::OutputConfigurator* output_configurator() {
325 return output_configurator_.get();
326 }
327#endif // defined(OS_CHROMEOS)
328
[email protected]2b4cd302012-02-24 20:21:13329 private:
[email protected]ad0c8722012-03-02 20:17:45330 FRIEND_TEST_ALL_PREFIXES(RootWindowEventFilterTest, MouseEventCursors);
331 FRIEND_TEST_ALL_PREFIXES(RootWindowEventFilterTest, TransformActivate);
332
[email protected]cac10fc62011-10-07 23:22:56333 typedef std::pair<aura::Window*, gfx::Rect> WindowAndBoundsPair;
334
[email protected]3266c2b92011-11-14 00:06:08335 explicit Shell(ShellDelegate* delegate);
336 virtual ~Shell();
337
338 void Init();
[email protected]b0639282011-12-22 21:12:27339
[email protected]c73d1332012-03-08 17:11:04340 // Initializes the layout managers and event filters.
341 void InitLayoutManagers();
[email protected]1b62b892012-01-17 17:08:15342
[email protected]ad0c8722012-03-02 20:17:45343 // Disables the workspace grid layout.
344 void DisableWorkspaceGridLayout();
345
[email protected]cac10fc62011-10-07 23:22:56346 static Shell* instance_;
347
[email protected]9488d4d2012-02-29 18:32:37348 // If set before the Shell is initialized, the mouse cursor will be hidden
349 // when the screen is initially created.
350 static bool initially_hide_cursor_;
351
[email protected]58482fa2012-03-02 14:57:39352 scoped_ptr<aura::RootWindow> root_window_;
[email protected]1a2145b2012-03-13 21:09:17353 ScreenAsh* screen_;
[email protected]58482fa2012-03-02 14:57:39354
[email protected]a857dbe2012-05-30 22:10:14355 // Active root window. Never become NULL.
356 aura::RootWindow* active_root_window_;
357
[email protected]0e46c272012-05-15 18:15:23358 aura::shared::RootWindowEventFilter* root_filter_; // not owned
[email protected]627a62f2012-02-14 22:59:14359
[email protected]cac10fc62011-10-07 23:22:56360 std::vector<WindowAndBoundsPair> to_restore_;
361
[email protected]6e9f6aa2012-02-09 04:16:20362#if !defined(OS_MACOSX)
[email protected]8f80db0f2012-02-07 14:44:53363 scoped_ptr<NestedDispatcherController> nested_dispatcher_controller_;
364
[email protected]2f744282011-12-23 22:40:52365 scoped_ptr<AcceleratorController> accelerator_controller_;
[email protected]6e9f6aa2012-02-09 04:16:20366#endif // !defined(OS_MACOSX)
[email protected]745816be2011-11-22 05:08:30367
[email protected]2b99f8c2011-10-11 19:42:24368 scoped_ptr<ShellDelegate> delegate_;
[email protected]bfb411312012-02-27 20:59:27369 scoped_ptr<SystemTrayDelegate> tray_delegate_;
[email protected]10b22612012-03-22 17:07:55370 scoped_ptr<UserWallpaperDelegate> user_wallpaper_delegate_;
[email protected]2b99f8c2011-10-11 19:42:24371
[email protected]671a2ae2011-10-13 21:53:23372 scoped_ptr<Launcher> launcher_;
373
[email protected]0039db92012-05-09 04:11:45374 scoped_ptr<internal::AppListController> app_list_controller_;
[email protected]ae4987d2011-11-21 22:52:44375
[email protected]0cfc18e2012-04-11 18:17:47376 scoped_ptr<internal::ShellContextMenu> shell_context_menu_;
[email protected]ee1e1a22011-12-15 01:51:10377 scoped_ptr<internal::StackingController> stacking_controller_;
[email protected]9fc206d2011-12-13 00:05:33378 scoped_ptr<internal::ActivationController> activation_controller_;
[email protected]80373572012-01-06 23:14:30379 scoped_ptr<internal::WindowModalityController> window_modality_controller_;
[email protected]084b6bb2011-11-17 05:18:16380 scoped_ptr<internal::DragDropController> drag_drop_controller_;
[email protected]60fa9bba2011-10-28 21:21:51381 scoped_ptr<internal::WorkspaceController> workspace_controller_;
[email protected]e4a181cc2012-03-17 02:20:57382 scoped_ptr<internal::ResizeShadowController> resize_shadow_controller_;
[email protected]a54e65b2011-11-21 22:03:34383 scoped_ptr<internal::ShadowController> shadow_controller_;
[email protected]862deef2011-12-15 22:07:33384 scoped_ptr<internal::TooltipController> tooltip_controller_;
[email protected]ddd91e92012-01-27 16:03:48385 scoped_ptr<internal::VisibilityController> visibility_controller_;
[email protected]e70cf0ed2012-03-15 16:24:47386 scoped_ptr<DesktopBackgroundController> desktop_background_controller_;
[email protected]e0d22e82012-01-04 00:46:57387 scoped_ptr<PowerButtonController> power_button_controller_;
[email protected]6aa614a2012-01-19 22:13:38388 scoped_ptr<VideoDetector> video_detector_;
[email protected]40c4cbb2012-01-10 23:26:07389 scoped_ptr<WindowCycleController> window_cycle_controller_;
[email protected]3d29912a2012-02-07 07:41:51390 scoped_ptr<internal::FocusCycler> focus_cycler_;
[email protected]262f8bd2012-03-23 19:30:27391 scoped_ptr<internal::EventClientImpl> event_client_;
[email protected]e050ef142012-03-21 01:04:24392 scoped_ptr<internal::MonitorController> monitor_controller_;
[email protected]f48075d2012-05-24 11:06:51393 scoped_ptr<HighContrastController> high_contrast_controller_;
[email protected]c1c670172012-04-26 04:20:26394 scoped_ptr<internal::MagnificationController> magnification_controller_;
[email protected]42993212012-04-30 23:42:04395 scoped_ptr<internal::ScreenDimmer> screen_dimmer_;
[email protected]a857dbe2012-05-30 22:10:14396 scoped_ptr<aura::FocusManager> focus_manager_;
[email protected]c28853612012-05-31 22:43:44397 scoped_ptr<aura::client::UserActionClient> user_action_client_;
[email protected]ae18b9112011-11-07 16:59:13398
[email protected]42f06f92012-03-27 00:57:57399 // An event filter that rewrites or drops a key event.
400 scoped_ptr<internal::KeyRewriterEventFilter> key_rewriter_filter_;
[email protected]6e9f6aa2012-02-09 04:16:20401
[email protected]0b0b0742012-02-16 13:23:45402 // An event filter that pre-handles key events while the partial
403 // screenshot UI is active.
404 scoped_ptr<internal::PartialScreenshotEventFilter> partial_screenshot_filter_;
405
[email protected]435b212e2012-04-05 19:43:37406 // An event filter which handles system level gestures
407 scoped_ptr<internal::SystemGestureEventFilter> system_gesture_filter_;
408
[email protected]6e9f6aa2012-02-09 04:16:20409#if !defined(OS_MACOSX)
[email protected]745816be2011-11-22 05:08:30410 // An event filter that pre-handles global accelerators.
[email protected]2f744282011-12-23 22:40:52411 scoped_ptr<internal::AcceleratorFilter> accelerator_filter_;
[email protected]6e9f6aa2012-02-09 04:16:20412#endif
[email protected]745816be2011-11-22 05:08:30413
[email protected]42f06f92012-03-27 00:57:57414 // An event filter that pre-handles all key events to send them to an IME.
[email protected]0e46c272012-05-15 18:15:23415 scoped_ptr<aura::shared::InputMethodEventFilter> input_method_filter_;
[email protected]42f06f92012-03-27 00:57:57416
[email protected]73074742012-05-17 01:44:41417 // An event filter that silently keeps track of all touch events and controls
418 // a heads-up display. This is enabled only if --ash-touch-hud flag is used.
419 scoped_ptr<internal::TouchObserverHUD> touch_observer_hud_;
420
[email protected]9861f1752012-06-01 07:16:14421 // An event filter that looks for modifier keypresses and triggers a slowdown
422 // of layer animations for visual debugging.
423 scoped_ptr<internal::SlowAnimationEventFilter> slow_animation_filter_;
424
[email protected]70b3e7d52012-06-02 22:12:25425#if defined(OS_CHROMEOS)
426 // Controls video output device state.
427 scoped_ptr<chromeos::OutputConfigurator> output_configurator_;
428#endif // defined(OS_CHROMEOS)
429
[email protected]4e437632012-02-13 22:39:40430 // The shelf for managing the launcher and the status widget in non-compact
431 // mode. Shell does not own the shelf. Instead, it is owned by container of
432 // the status area.
433 internal::ShelfLayoutManager* shelf_;
434
[email protected]7cf8dd62012-04-22 05:14:58435 // Manages layout of panels. Owned by PanelContainer.
436 internal::PanelLayoutManager* panel_layout_manager_;
437
[email protected]1a2145b2012-03-13 21:09:17438 ObserverList<ShellObserver> observers_;
439
[email protected]b0079a92012-01-25 20:13:38440 // Owned by aura::RootWindow, cached here for type safety.
441 internal::RootWindowLayoutManager* root_window_layout_;
442
[email protected]6d6546e2012-05-30 23:12:02443 // Widget containing system tray.
444 internal::StatusAreaWidget* status_area_widget_;
445
[email protected]860f5942012-04-24 16:11:39446 // System tray with clock, Wi-Fi signal, etc.
[email protected]6d6546e2012-05-30 23:12:02447 scoped_ptr<SystemTray> system_tray_;
[email protected]bfb411312012-02-27 20:59:27448
[email protected]fa4a45832012-04-12 21:32:48449 // Used by ash/shell.
450 content::BrowserContext* browser_context_;
451
[email protected]87b0d82e2011-10-07 21:02:59452 DISALLOW_COPY_AND_ASSIGN(Shell);
453};
454
[email protected]55f593352011-12-24 05:42:46455} // namespace ash
[email protected]87b0d82e2011-10-07 21:02:59456
[email protected]b65bdda2011-12-23 23:35:31457#endif // ASH_SHELL_H_