1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef UI_PLATFORM_WINDOW_X11_X11_WINDOW_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define UI_PLATFORM_WINDOW_X11_X11_WINDOW_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/events/platform/platform_event_dispatcher.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/rect.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/x/x11_atom_cache.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/platform_window/platform_window.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/platform_window/platform_window_delegate.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/platform_window/x11/x11_window_export.h"
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochtypedef struct _XDisplay XDisplay;
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochtypedef unsigned long XID;
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace ui {
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass X11_WINDOW_EXPORT X11Window : public PlatformWindow,
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                    public PlatformEventDispatcher {
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  explicit X11Window(PlatformWindowDelegate* delegate);
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~X11Window();
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void Destroy();
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void ProcessXInput2Event(XEvent* xevent);
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // PlatformWindow:
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Show() OVERRIDE;
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Hide() OVERRIDE;
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Close() OVERRIDE;
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE;
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual gfx::Rect GetBounds() OVERRIDE;
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetCapture() OVERRIDE;
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void ReleaseCapture() OVERRIDE;
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void ToggleFullscreen() OVERRIDE;
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Maximize() OVERRIDE;
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Minimize() OVERRIDE;
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Restore() OVERRIDE;
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SetCursor(PlatformCursor cursor) OVERRIDE;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void MoveCursorTo(const gfx::Point& location) OVERRIDE;
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // PlatformEventDispatcher:
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool CanDispatchEvent(const PlatformEvent& event) OVERRIDE;
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual uint32_t DispatchEvent(const PlatformEvent& event) OVERRIDE;
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  PlatformWindowDelegate* delegate_;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  XDisplay* xdisplay_;
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  XID xwindow_;
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  XID xroot_window_;
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  X11AtomCache atom_cache_;
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Setting the bounds is an asynchronous operation in X11. |requested_bounds_|
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // is the bounds requested using XConfigureWindow, and |confirmed_bounds_| is
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // the bounds the X11 server has set on the window.
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect requested_bounds_;
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect confirmed_bounds_;
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool window_mapped_;
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(X11Window);
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace ui
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // UI_PLATFORM_WINDOW_X11_X11_WINDOW_H_
71