| // Copyright 2017 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 COMPONENTS_EXO_XDG_SHELL_SURFACE_H_ | 
 | #define COMPONENTS_EXO_XDG_SHELL_SURFACE_H_ | 
 |  | 
 | #include <cstdint> | 
 | #include <memory> | 
 | #include <string> | 
 |  | 
 | #include "ash/display/window_tree_host_manager.h" | 
 | #include "ash/wm/window_state_observer.h" | 
 | #include "base/containers/circular_deque.h" | 
 | #include "base/macros.h" | 
 | #include "base/optional.h" | 
 | #include "base/strings/string16.h" | 
 | #include "components/exo/shell_surface.h" | 
 | #include "components/exo/surface_observer.h" | 
 | #include "components/exo/surface_tree_host.h" | 
 |  | 
 | #include "ui/aura/window_observer.h" | 
 | #include "ui/base/hit_test.h" | 
 | #include "ui/compositor/compositor_lock.h" | 
 | #include "ui/display/display_observer.h" | 
 | #include "ui/gfx/geometry/point.h" | 
 | #include "ui/gfx/geometry/rect.h" | 
 | #include "ui/gfx/geometry/vector2d.h" | 
 | #include "ui/views/widget/widget_delegate.h" | 
 | #include "ui/wm/public/activation_change_observer.h" | 
 |  | 
 | namespace ash { | 
 | namespace mojom { | 
 | enum class WindowPinType; | 
 | } | 
 | }  // namespace ash | 
 |  | 
 | namespace exo { | 
 | class Surface; | 
 |  | 
 | // This class implements shell surface for XDG protocol. | 
 | class XdgShellSurface : public ShellSurface { | 
 |  public: | 
 |   // The |origin| is the initial position in screen coordinates. The position | 
 |   // specified as part of the geometry is relative to the shell surface. | 
 |   XdgShellSurface(Surface* surface, | 
 |                   const gfx::Point& origin, | 
 |                   bool activatable, | 
 |                   bool can_minimize, | 
 |                   int container); | 
 |   ~XdgShellSurface() override; | 
 |  | 
 |   bool x_flipped() const { return x_flipped_; } | 
 |   void set_x_flipped(bool flipped) { x_flipped_ = flipped; } | 
 |  | 
 |   bool y_flipped() const { return y_flipped_; } | 
 |   void set_y_flipped(bool flipped) { y_flipped_ = flipped; } | 
 |  | 
 |  private: | 
 |   // Used by positioner to layout cascading menus in opposite | 
 |   // direction when the layout does not fit to the work area. | 
 |   bool y_flipped_ = false; | 
 |   bool x_flipped_ = false; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(XdgShellSurface); | 
 | }; | 
 |  | 
 | }  // namespace exo | 
 |  | 
 | #endif  // COMPONENTS_EXO_XDG_SHELL_SURFACE_H_ |