15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2013 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef UI_WM_CORE_DEFAULT_ACTIVATION_CLIENT_H_ 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define UI_WM_CORE_DEFAULT_ACTIVATION_CLIENT_H_ 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <vector> 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/compiler_specific.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/logging.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/observer_list.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ui/aura/window_observer.h" 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ui/wm/public/activation_client.h" 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ui/wm/wm_export.h" 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace aura { 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace client { 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass ActivationChangeObserver; 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace wm { 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Simple ActivationClient implementation for use by tests and other targets 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// that just need basic behavior (e.g. activate windows whenever requested, 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// restack windows at the top when they're activated, etc.). This object deletes 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// itself when the root window it is associated with is destroyed. 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass WM_EXPORT DefaultActivationClient : public aura::client::ActivationClient, 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public aura::WindowObserver { 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public: 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu explicit DefaultActivationClient(aura::Window* root_window); 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Overridden from aura::client::ActivationClient: 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void AddObserver( 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu aura::client::ActivationChangeObserver* observer) OVERRIDE; 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void RemoveObserver( 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu aura::client::ActivationChangeObserver* observer) OVERRIDE; 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void ActivateWindow(aura::Window* window) OVERRIDE; 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void DeactivateWindow(aura::Window* window) OVERRIDE; 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual aura::Window* GetActiveWindow() OVERRIDE; 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual aura::Window* GetActivatableWindow(aura::Window* window) OVERRIDE; 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual aura::Window* GetToplevelWindow(aura::Window* window) OVERRIDE; 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool CanActivateWindow(aura::Window* window) const OVERRIDE; 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Overridden from WindowObserver: 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE; 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu class Deleter; 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~DefaultActivationClient(); 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void RemoveActiveWindow(aura::Window* window); 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // This class explicitly does NOT store the active window in a window property 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // to make sure that ActivationChangeObserver is not treated as part of the 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // aura API. Assumptions to that end will cause tests that use this client to 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // fail. 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::vector<aura::Window*> active_windows_; 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The window which was active before the currently active one. 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu aura::Window* last_active_; 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ObserverList<aura::client::ActivationChangeObserver> observers_; 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(DefaultActivationClient); 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace wm 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif // UI_WM_CORE_DEFAULT_ACTIVATION_CLIENT_H_ 72