Unity 8
Window.h
1 /*
2  * Copyright (C) 2016-2017 Canonical, Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 3.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 #ifndef UNITY_WINDOW_H
18 #define UNITY_WINDOW_H
19 
20 #include <QLoggingCategory>
21 #include <QObject>
22 #include <QPoint>
23 
24 // Unity API
25 #include <unity/shell/application/Mir.h>
26 
27 #include "WindowManagerGlobal.h"
28 
29 namespace unity {
30  namespace shell {
31  namespace application {
32  class MirSurfaceInterface;
33  }
34  }
35 }
36 
37 Q_DECLARE_LOGGING_CATEGORY(UNITY_WINDOW)
38 
39 
47 class WINDOWMANAGERQML_EXPORT Window : public QObject
48 {
49  Q_OBJECT
50 
54  Q_PROPERTY(QPoint position READ position NOTIFY positionChanged)
55 
56 
59  Q_PROPERTY(QPoint requestedPosition READ requestedPosition WRITE setRequestedPosition NOTIFY requestedPositionChanged)
60 
64  Q_PROPERTY(Mir::State state READ state NOTIFY stateChanged)
65 
71  Q_PROPERTY(bool focused READ focused NOTIFY focusedChanged)
72 
78  Q_PROPERTY(bool confinesMousePointer READ confinesMousePointer NOTIFY confinesMousePointerChanged)
79 
84  Q_PROPERTY(int id READ id CONSTANT)
85 
92  Q_PROPERTY(unity::shell::application::MirSurfaceInterface* surface READ surface NOTIFY surfaceChanged)
93 
99  Q_PROPERTY(bool allowClientResize READ allowClientResize WRITE setAllowClientResize NOTIFY allowClientResizeChanged)
100 
101 public:
102  Window(int id, QObject *parent = nullptr);
103  virtual ~Window();
104  QPoint position() const;
105  QPoint requestedPosition() const;
106  void setRequestedPosition(const QPoint &);
107  Mir::State state() const;
108  bool focused() const;
109  bool confinesMousePointer() const;
110  int id() const;
111  unity::shell::application::MirSurfaceInterface* surface() const;
112 
113  void setSurface(unity::shell::application::MirSurfaceInterface *surface);
114  void setFocused(bool value);
115 
116  bool allowClientResize() const;
117  void setAllowClientResize(bool);
118 
119  QString toString() const;
120 
121 public Q_SLOTS:
125  void requestState(Mir::State state);
126 
131  void close();
132 
136  void activate();
137 
138 Q_SIGNALS:
139  void closeRequested();
140  void emptyWindowActivated();
141 
142  void positionChanged(QPoint position);
143  void requestedPositionChanged(QPoint position);
144  void stateChanged(Mir::State value);
145  void focusedChanged(bool value);
146  void confinesMousePointerChanged(bool value);
147  void surfaceChanged(unity::shell::application::MirSurfaceInterface *surface);
148  void allowClientResizeChanged(bool value);
149  void liveChanged(bool value);
150 
154  void focusRequested();
155 
156 private:
157  void updatePosition();
158  void updateState();
159  void updateFocused();
160 
161  QPoint m_position;
162  QPoint m_requestedPosition;
163  bool m_positionRequested{false};
164  bool m_focused{false};
165  int m_id;
166  Mir::State m_state{Mir::RestoredState};
167  bool m_stateRequested{false};
168  unity::shell::application::MirSurfaceInterface *m_surface{nullptr};
169 
170  bool m_allowClientResize{true};
171 };
172 
173 QDebug operator<<(QDebug dbg, const Window *window);
174 
175 Q_DECLARE_METATYPE(Window*)
176 #endif // UNITY_WINDOW_H
A slightly higher concept than MirSurface.
Definition: Window.h:47