display_controller.h revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_DISPLAY_DISPLAY_CONTROLLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_DISPLAY_DISPLAY_CONTROLLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ash_export.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/display/display_layout.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ash/display/display_manager.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/gtest_prod_util.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/aura/root_window_observer.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/display_observer.h" 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/gfx/point.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Display; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RootWindow; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename T> class JSONValueConverter; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace gfx { 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass Display; 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass Insets; 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DisplayInfo; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DisplayManager; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FocusActivationStore; 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass MirrorWindowController; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RootWindowController; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DisplayController owns and maintains RootWindows for each attached 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// display, keeping them in sync with display configuration changes. 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass ASH_EXPORT DisplayController : public gfx::DisplayObserver, 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public aura::RootWindowObserver, 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public internal::DisplayManager::Delegate { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class ASH_EXPORT Observer { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when the display configuration change is requested, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but before the change is applied to aura/ash. 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnDisplayConfigurationChanging() {} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Invoked when the all display configuration changes 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // have been applied. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnDisplayConfigurationChanged() {}; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Observer() {} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DisplayController(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DisplayController(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Start(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Shutdown(); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns primary display. This is safe to use after ash::Shell is 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // deleted. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const gfx::Display& GetPrimaryDisplay(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the number of display. This is safe to use after 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ash::Shell is deleted. 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static int GetNumDisplays(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch internal::MirrorWindowController* mirror_window_controller() { 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return mirror_window_controller_.get(); 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes primary display. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitPrimaryDisplay(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize secondary displays. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitSecondaryDisplays(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add/Remove observers. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddObserver(Observer* observer); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveObserver(Observer* observer); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the root window for primary display. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::RootWindow* GetPrimaryRootWindow(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the root window for |display_id|. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::RootWindow* GetRootWindowForDisplayId(int64 id); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Toggle mirror mode. 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void ToggleMirrorMode(); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Swap primary and secondary display. 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SwapPrimaryDisplay(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the ID of the primary display. If the display is not connected, it 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will switch the primary display when connected. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPrimaryDisplayId(int64 id); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets primary display. This re-assigns the current root 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window to given |display|. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPrimaryDisplay(const gfx::Display& display); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Closes all child windows in the all root windows. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CloseChildWindows(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns all root windows. In non extended desktop mode, this 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns the primary root window only. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<aura::RootWindow*> GetAllRootWindows(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns all oot window controllers. In non extended desktop 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mode, this return a RootWindowController for the primary root window only. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<internal::RootWindowController*> GetAllRootWindowControllers(); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets/Sets/Clears the overscan insets for the specified |display_id|. See 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // display_manager.h for the details. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Insets GetOverscanInsets(int64 display_id) const; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetOverscanInsets(int64 display_id, const gfx::Insets& insets_in_dip); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the layout for the current display pair. The |layout| specifies 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the locaion of the secondary display relative to the primary. 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetLayoutForCurrentDisplays(const DisplayLayout& layout); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the display layout used for current displays. 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DisplayLayout GetCurrentDisplayLayout(); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the current display pair. 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisplayIdPair GetCurrentDisplayIdPair() const; 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Checks if the mouse pointer is on one of displays, and moves to 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the center of the nearest display if it's outside of all displays. 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void EnsurePointerInDisplays(); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Sets the work area's |insets| to the display assigned to |window|. 1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool UpdateWorkAreaOfDisplayNearestWindow(const aura::Window* window, 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Insets& insets); 1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns the display object nearest given |point|. 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Display& GetDisplayNearestPoint( 1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Point& point) const; 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns the display object nearest given |window|. 1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Display& GetDisplayNearestWindow( 1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const aura::Window* window) const; 1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns the display that most closely intersects |match_rect|. 1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Display& GetDisplayMatching( 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Rect& match_rect)const; 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // aura::DisplayObserver overrides: 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDisplayBoundsChanged( 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Display& display) OVERRIDE; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDisplayAdded(const gfx::Display& display) OVERRIDE; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDisplayRemoved(const gfx::Display& display) OVERRIDE; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // RootWindowObserver overrides: 1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnRootWindowHostResized(const aura::RootWindow* root) OVERRIDE; 1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // aura::DisplayManager::Delegate overrides: 1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CreateOrUpdateMirrorWindow( 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const internal::DisplayInfo& info) OVERRIDE; 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CloseMirrorWindow() OVERRIDE; 1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void PreDisplayConfigurationChange() OVERRIDE; 1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void PostDisplayConfigurationChange() OVERRIDE; 1777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 179ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch FRIEND_TEST_ALL_PREFIXES(DisplayControllerTest, BoundsUpdated); 180ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch FRIEND_TEST_ALL_PREFIXES(DisplayControllerTest, SecondaryDisplayLayout); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class internal::DisplayManager; 182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch friend class internal::MirrorWindowController; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a root window for |display| and stores it in the |root_windows_| 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // map. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::RootWindow* AddRootWindowForDisplay(const gfx::Display& display); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateDisplayBoundsForLayout(); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetLayoutForDisplayIdPair(const DisplayIdPair& display_pair, 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DisplayLayout& layout); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnFadeOutForSwapDisplayFinished(); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void UpdateHostWindowNames(); 196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class DisplayChangeLimiter { 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisplayChangeLimiter(); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets how long the throttling should last. 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetThrottleTimeout(int64 throttle_ms); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsThrottled() const; 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The time when the throttling ends. 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time throttle_timeout_; 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DisplayChangeLimiter); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The limiter to throttle how fast a user can 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // change the display configuration. 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<DisplayChangeLimiter> limiter_; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The mapping from display ID to its root window. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<int64, aura::RootWindow*> root_windows_; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<Observer> observers_; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Store the primary root window temporarily while replacing 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // display. 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RootWindow* primary_root_window_for_replace_; 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<internal::FocusActivationStore> focus_activation_store_; 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<internal::MirrorWindowController> mirror_window_controller_; 2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Stores the curent cursor location (in native coordinates) used to 2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // restore the cursor location when display configuration 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // changed. 2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch gfx::Point cursor_location_in_native_coords_for_restore_; 2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DisplayController); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // ASH_DISPLAY_DISPLAY_CONTROLLER_H_ 242