| Index: chrome/browser/chromeos/wm_overview_controller.h | 
| =================================================================== | 
| --- chrome/browser/chromeos/wm_overview_controller.h	(revision 0) | 
| +++ chrome/browser/chromeos/wm_overview_controller.h	(revision 0) | 
| @@ -0,0 +1,147 @@ | 
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef CHROME_BROWSER_CHROMEOS_WM_OVERVIEW_CONTROLLER_H_ | 
| +#define CHROME_BROWSER_CHROMEOS_WM_OVERVIEW_CONTROLLER_H_ | 
| + | 
| +#include <vector> | 
| + | 
| +#include "base/linked_ptr.h" | 
| +#include "base/singleton.h" | 
| +#include "base/timer.h" | 
| +#include "chrome/browser/browser_list.h" | 
| +#include "chrome/browser/chromeos/wm_message_listener.h" | 
| +#include "chrome/common/notification_registrar.h" | 
| +#include "gfx/rect.h" | 
| + | 
| +namespace views { | 
| +class Widget; | 
| +} | 
| + | 
| +class Animation; | 
| +class Browser; | 
| + | 
| +namespace chromeos { | 
| + | 
| +class BrowserListener; | 
| +class WmOverviewSnapshot; | 
| + | 
| +// WmOverviewController is responsible for managing a list of objects | 
| +// that listen to the browsers (BrowserListeners, defined in the | 
| +// source file for this class) for changes, and keep a list of | 
| +// snapshot images in sync with the browser tab contents. | 
| +// | 
| +// As tabs are added/removed from the browsers, the number of snapshot | 
| +// windows changes to match. | 
| +// | 
| +// As obtaining and setting snapshots is expensive we delay setting | 
| +// the snapshot. The delay is controlled by delay_timer_. Once the | 
| +// timer fires another timer is started (configure_timer_). This timer | 
| +// invokes ConfigureNextUnconfiguredCell on the BrowserListener, which | 
| +// obtains and sets the snapshot of the next uncofigured | 
| +// cell. ConfigureNextUnconfiguredCell only configures one cell at a | 
| +// time until they are all configured. | 
| + | 
| +class WmOverviewController : public BrowserList::Observer, | 
| +                             public WmMessageListener::Observer, | 
| +                             public NotificationObserver { | 
| + public: | 
| +  // This class is a singleton. | 
| +  static WmOverviewController* instance(); | 
| + | 
| +  // BrowserList::Observer methods | 
| +  // This is called immediately after a browser is added to the list. | 
| +  void OnBrowserAdded(const Browser* browser) {} | 
| + | 
| +  // This is called immediately before a browser is removed from the list. | 
| +  void OnBrowserRemoving(const Browser* browser); | 
| +  // End BrowserList::Observer methods | 
| + | 
| +  // WmMessageListener::Observer methods | 
| +  // This is called immediately after a browser is added to the list. | 
| +  void ProcessWmMessage(const WmIpc::Message& message, | 
| +                        GdkWindow* window); | 
| +  // End WmMessageListener::Observer methods | 
| + | 
| +  // NotificationObserver methods | 
| +  void Observe(NotificationType type, | 
| +               const NotificationSource& source, | 
| +               const NotificationDetails& details); | 
| +  // End NotificationObserver methods | 
| + | 
| +  // Used by the BrowserListeners to configure their snapshots. | 
| +  const gfx::Rect& monitor_bounds() const { return monitor_bounds_; } | 
| + | 
| +  // Tells the listeners whether or not they're allowed to show | 
| +  // snapshots yet. | 
| +  bool allow_show_snapshots() const { return allow_show_snapshots_; } | 
| + | 
| +  // Starts the delay timer, and once the delay is over, configures | 
| +  // any unconfigured snapshots one at a time until none are left to | 
| +  // be configured. | 
| +  void StartDelayTimer(); | 
| + | 
| + private: | 
| +  friend struct DefaultSingletonTraits<WmOverviewController>; | 
| + | 
| +  // This class is a singleton. | 
| +  WmOverviewController(); | 
| +  ~WmOverviewController(); | 
| + | 
| +  // Restores tab selections on all browsers to what they were when | 
| +  // Show was last called.  Used when cancelling overview mode. | 
| +  void RestoreTabSelections(); | 
| + | 
| +  // Saves the currently selected tabs in the snapshots so that they | 
| +  // can be restored later with RestoreTabSelections. | 
| +  void SaveTabSelections(); | 
| + | 
| +  // Show the snapshot windows, saving current tab selections. | 
| +  void Show(); | 
| + | 
| +  // Hide the snapshot windows.  When |cancelled| is true, then the | 
| +  // tab selections that were saved when the snapshot windows were | 
| +  // shown are restored. | 
| +  void Hide(bool cancelled); | 
| + | 
| +  // Invoked by delay_timer_. Sets allow_show_snapshots_ to true and starts | 
| +  // configure_timer_. | 
| +  void StartConfiguring(); | 
| + | 
| +  // Configure the next unconfigured snapshot window owned by any of | 
| +  // the listeners. | 
| +  void ConfigureNextUnconfiguredSnapshot(); | 
| + | 
| +  // Add browser listeners for all existing browsers, reusing any that | 
| +  // were already there. | 
| +  void AddAllBrowsers(); | 
| + | 
| +  // This is so we can register for notifications. | 
| +  NotificationRegistrar registrar_; | 
| + | 
| +  // This is a vector of listeners that listen to all the browsers. | 
| +  typedef std::vector<linked_ptr<BrowserListener> > BrowserListenerVector; | 
| +  BrowserListenerVector listeners_; | 
| + | 
| +  // This is the bounds of the monitor we're being displayed on. This | 
| +  // is used to adjust the size of snapshots so they'll fit. | 
| +  gfx::Rect monitor_bounds_; | 
| + | 
| +  // This indicates whether we should actually set the snapshots so we | 
| +  // don't do it when we don't need to. It is initially false, then | 
| +  // set to true by StartConfiguring. | 
| +  bool allow_show_snapshots_; | 
| + | 
| +  // See description above class for details. | 
| +  base::OneShotTimer<WmOverviewController> delay_timer_; | 
| + | 
| +  // See description above class for details. | 
| +  base::RepeatingTimer<WmOverviewController> configure_timer_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(WmOverviewController); | 
| +}; | 
| + | 
| +}  // namespace chromeos | 
| + | 
| +#endif  // CHROME_BROWSER_CHROMEOS_WM_OVERVIEW_CONTROLLER_H_ | 
|  | 
| Property changes on: chrome/browser/chromeos/wm_overview_controller.h | 
| ___________________________________________________________________ | 
| Added: svn:eol-style | 
| + LF | 
|  | 
|  |