// Copyright (c) 2012 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.

#ifndef ASH_WM_WINDOW_PROPERTIES_H_
#define ASH_WM_WINDOW_PROPERTIES_H_

#include "ash/ash_export.h"
#include "ui/base/class_property.h"
#include "ui/base/ui_base_types.h"

namespace aura {
template <typename T>
using WindowProperty = ui::ClassProperty<T>;
}

namespace ash {
namespace wm {
class WindowState;
}  // namespace wm

// Used with kWidgetCreationType to indicate source of the widget creation.
//
// TODO: investigate removing this. If it's still needed, we can likely ask
// the window service if it has a remote client for the window rather than using
// a property. https://crbug.com/865616
enum class WidgetCreationType {
  // The widget was created internally, and not at the request of a client.
  // For example, overview mode creates a number of widgets. These widgets are
  // created with a type of INTERNAL. This is the default.
  INTERNAL,

  // The widget was created for a client. In other words there is a client
  // embedded in the aura::Window. For example, when Chrome creates a new
  // browser window the window manager is asked to create the aura::Window.
  // The window manager creates an aura::Window and a views::Widget to show
  // the non-client frame decorations. In this case the creation type is
  // FOR_CLIENT.
  FOR_CLIENT,
};

// Shell-specific window property keys; some keys are exported for use in tests.

// Alphabetical sort.

// If this is set to true, the window stays in the same root window even if the
// bounds outside of its root window is set.
ASH_EXPORT extern const aura::WindowProperty<bool>* const kLockedToRootKey;

ASH_EXPORT extern const aura::WindowProperty<WidgetCreationType>* const
    kWidgetCreationTypeKey;

// Set to true if the window server tells us the window is janky (see
// WindowManagerDelegate::OnWmClientJankinessChanged()).
ASH_EXPORT extern const aura::WindowProperty<bool>* const kWindowIsJanky;

// A property key to store WindowState in the window. The window state
// is owned by the window.
ASH_EXPORT extern const aura::WindowProperty<wm::WindowState*>* const
    kWindowStateKey;

// Alphabetical sort.

}  // namespace ash

#endif  // ASH_WM_WINDOW_PROPERTIES_H_
