165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// Copyright (c) 2012 The Chromium Authors. All rights reserved.
265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// Use of this source code is governed by a BSD-style license that can be
365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// found in the LICENSE file.
465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef UI_WM_PUBLIC_ACTIVATION_CLIENT_H_
665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UI_WM_PUBLIC_ACTIVATION_CLIENT_H_
765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include "ui/aura/aura_export.h"
965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
1065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichnamespace ui {
1165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichclass Event;
1265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich}
1365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
1465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichnamespace aura {
1565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichclass Window;
1665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
1765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichnamespace client {
1865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichclass ActivationChangeObserver;
1965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
2065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// An interface implemented by an object that manages window activation.
2165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichclass AURA_EXPORT ActivationClient {
2265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich public:
2365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // Adds/Removes ActivationChangeObservers.
2465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  virtual void AddObserver(ActivationChangeObserver* observer) = 0;
2565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  virtual void RemoveObserver(ActivationChangeObserver* observer) = 0;
2665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
2765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // Activates |window|. If |window| is NULL, nothing happens.
2865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  virtual void ActivateWindow(Window* window) = 0;
2965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
3065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // Deactivates |window|. What (if anything) is activated next is up to the
3165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // client. If |window| is NULL, nothing happens.
3265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  virtual void DeactivateWindow(Window* window) = 0;
3365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
3465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // Retrieves the active window, or NULL if there is none.
3565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  virtual Window* GetActiveWindow() = 0;
3665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
3765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // Retrieves the activatable window for |window|, or NULL if there is none.
3865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // Note that this is often but not always the toplevel window (see
3965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // GetToplevelWindow() below), as the toplevel window may not be activatable
4065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // (for example it may be blocked by a modal transient, or some other
4165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // condition).
4265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  virtual Window* GetActivatableWindow(Window* window) = 0;
4365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
4465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // Retrieves the toplevel window for |window|, or NULL if there is none.
4565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  virtual Window* GetToplevelWindow(Window* window) = 0;
4665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
4765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // Returns true if |window| can be activated, false otherwise. If |window| has
4865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  // a modal child it can not be activated.
4965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  virtual bool CanActivateWindow(Window* window) const = 0;
5065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
5165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich protected:
5265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  virtual ~ActivationClient() {}
5365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich};
5465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
5565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// Sets/Gets the activation client on the root Window.
5665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichAURA_EXPORT void SetActivationClient(Window* root_window,
5765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich                                     ActivationClient* client);
5865de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichAURA_EXPORT ActivationClient* GetActivationClient(Window* root_window);
5965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
6065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// Some types of transient window are only visible when active.
6165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// The transient parents of these windows may have visual appearance properties
6265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// that differ from transient parents that can be deactivated.
6365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// The presence of this property implies these traits.
6465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich// TODO(beng): currently the UI framework (views) implements the actual
6565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich//             close-on-deactivate component of this feature but it should be
6665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich//             possible to implement in the aura client.
6765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichAURA_EXPORT void SetHideOnDeactivate(Window* window, bool hide_on_deactivate);
6865de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichAURA_EXPORT bool GetHideOnDeactivate(Window* window);
6965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
7065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich}  // namespace clients
7165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich}  // namespace aura
7265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
7365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif  // UI_WM_PUBLIC_ACTIVATION_CLIENT_H_
7465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich