1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_AURA_CLIENT_WINDOW_STACKING_CLIENT_H_
6#define UI_AURA_CLIENT_WINDOW_STACKING_CLIENT_H_
7
8#include "base/basictypes.h"
9#include "base/memory/scoped_ptr.h"
10#include "ui/aura/aura_export.h"
11#include "ui/aura/window.h"
12
13namespace aura {
14namespace client {
15
16class AURA_EXPORT WindowStackingClient {
17 public:
18  // Invoked from the various Window stacking functions. Allows the
19  // WindowStackingClient to alter the source, target and/or direction to stack.
20  // Returns true if stacking should continue; false if the stacking should not
21  // happen.
22  virtual bool AdjustStacking(Window** child,
23                              Window** target,
24                              Window::StackDirection* direction) = 0;
25
26 protected:
27  virtual ~WindowStackingClient() {}
28};
29
30// Sets/gets the WindowStackingClient. This does *not* take ownership of
31// |client|. It is assumed the caller will invoke SetWindowStackingClient(NULL)
32// before deleting |client|.
33AURA_EXPORT void SetWindowStackingClient(WindowStackingClient* client);
34AURA_EXPORT WindowStackingClient* GetWindowStackingClient();
35
36}  // namespace client
37}  // namespace aura
38
39#endif  // UI_AURA_CLIENT_WINDOW_STACKING_CLIENT_H_
40