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#include "ui/aura/client/window_tree_client.h"
6
7#include "ui/aura/env.h"
8#include "ui/aura/window_event_dispatcher.h"
9#include "ui/aura/window_property.h"
10
11DECLARE_WINDOW_PROPERTY_TYPE(aura::client::WindowTreeClient*)
12
13namespace aura {
14namespace client {
15
16DEFINE_WINDOW_PROPERTY_KEY(
17    WindowTreeClient*, kRootWindowWindowTreeClientKey, NULL);
18
19void SetWindowTreeClient(Window* window, WindowTreeClient* window_tree_client) {
20  DCHECK(window);
21
22  Window* root_window = window->GetRootWindow();
23  DCHECK(root_window);
24  root_window->SetProperty(kRootWindowWindowTreeClientKey, window_tree_client);
25}
26
27WindowTreeClient* GetWindowTreeClient(Window* window) {
28  DCHECK(window);
29  Window* root_window = window->GetRootWindow();
30  DCHECK(root_window);
31  WindowTreeClient* client =
32      root_window->GetProperty(kRootWindowWindowTreeClientKey);
33  DCHECK(client);
34  return client;
35}
36
37void ParentWindowWithContext(Window* window,
38                             Window* context,
39                             const gfx::Rect& screen_bounds) {
40  DCHECK(context);
41
42  // |context| must be attached to a hierarchy with a WindowTreeClient.
43  WindowTreeClient* client = GetWindowTreeClient(context);
44  DCHECK(client);
45  Window* default_parent =
46      client->GetDefaultParent(context, window, screen_bounds);
47  default_parent->AddChild(window);
48}
49
50}  // namespace client
51}  // namespace aura
52