// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/root_window_settings.h"

#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
#include "ui/base/class_property.h"
#include "ui/display/types/display_constants.h"

DEFINE_UI_CLASS_PROPERTY_TYPE(ash::RootWindowSettings*)

namespace ash {

DEFINE_OWNED_UI_CLASS_PROPERTY_KEY(RootWindowSettings,
                                   kRootWindowSettingsKey,
                                   NULL)

RootWindowSettings::RootWindowSettings()
    : display_id(display::kInvalidDisplayId), controller(NULL) {}

RootWindowSettings* InitRootWindowSettings(aura::Window* root) {
  RootWindowSettings* settings = new RootWindowSettings();
  root->SetProperty(kRootWindowSettingsKey, settings);
  return settings;
}

RootWindowSettings* GetRootWindowSettings(aura::Window* root) {
  return root->GetProperty(kRootWindowSettingsKey);
}

const RootWindowSettings* GetRootWindowSettings(const aura::Window* root) {
  return root->GetProperty(kRootWindowSettingsKey);
}

}  // namespace ash
