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 <memory>
9 
10 #include "ui/aura/aura_export.h"
11 #include "ui/aura/window.h"
12 
13 namespace aura {
14 namespace client {
15 
16 class 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:
~WindowStackingClient()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|.
33 AURA_EXPORT void SetWindowStackingClient(WindowStackingClient* client);
34 AURA_EXPORT WindowStackingClient* GetWindowStackingClient();
35 
36 }  // namespace client
37 }  // namespace aura
38 
39 #endif  // UI_AURA_CLIENT_WINDOW_STACKING_CLIENT_H_
40