18 #ifndef TOPLEVELWINDOWMODEL_H 19 #define TOPLEVELWINDOWMODEL_H 21 #include <QAbstractListModel> 22 #include <QAtomicInteger> 23 #include <QLoggingCategory> 25 #include "WindowManagerGlobal.h" 27 Q_DECLARE_LOGGING_CATEGORY(TOPLEVELWINDOWMODEL)
33 namespace application {
34 class ApplicationInfoInterface;
35 class ApplicationManagerInterface;
36 class MirSurfaceInterface;
37 class SurfaceManagerInterface;
63 Q_PROPERTY(
int count READ rowCount NOTIFY countChanged)
70 Q_PROPERTY(
unity::shell::application::MirSurfaceInterface* inputMethodSurface READ inputMethodSurface NOTIFY inputMethodSurfaceChanged)
75 Q_PROPERTY(
Window* focusedWindow READ focusedWindow NOTIFY focusedWindowChanged)
77 Q_PROPERTY(
unity::shell::application::SurfaceManagerInterface* surfaceManager
79 WRITE setSurfaceManager
80 NOTIFY surfaceManagerChanged)
82 Q_PROPERTY(
unity::shell::application::ApplicationManagerInterface* applicationManager
83 READ applicationManager
84 WRITE setApplicationManager
85 NOTIFY applicationManagerChanged)
91 Q_PROPERTY(
int nextId READ nextId)
112 Q_PROPERTY(
bool rootFocus READ rootFocus WRITE setRootFocus NOTIFY rootFocusChanged)
122 WindowRole = Qt::UserRole,
123 ApplicationRole = Qt::UserRole + 1,
129 int rowCount(
const QModelIndex &parent = QModelIndex())
const override;
130 QVariant data(
const QModelIndex& index,
int role)
const override;
131 QHash<int, QByteArray> roleNames()
const override {
132 QHash<int, QByteArray> roleNames { {WindowRole,
"window"},
133 {ApplicationRole,
"application"} };
139 unity::shell::application::MirSurfaceInterface* inputMethodSurface()
const;
140 Window* focusedWindow()
const;
142 unity::shell::application::ApplicationManagerInterface *applicationManager()
const {
return m_applicationManager; }
143 void setApplicationManager(unity::shell::application::ApplicationManagerInterface*);
145 unity::shell::application::SurfaceManagerInterface *surfaceManager()
const {
return m_surfaceManager; }
146 void setSurfaceManager(unity::shell::application::SurfaceManagerInterface*);
148 int nextId()
const {
return m_nextId.load(); }
159 Q_INVOKABLE unity::shell::application::MirSurfaceInterface *surfaceAt(
int index)
const;
166 Q_INVOKABLE
Window *windowAt(
int index)
const;
171 Q_INVOKABLE unity::shell::application::ApplicationInfoInterface *applicationAt(
int index)
const;
176 Q_INVOKABLE
int idAt(
int index)
const;
183 Q_INVOKABLE
int indexForId(
int id)
const;
188 Q_INVOKABLE
void raiseId(
int id);
193 Q_INVOKABLE
void closeAllWindows();
198 Q_INVOKABLE
void pendingActivation();
200 void setRootFocus(
bool focus);
205 void inputMethodSurfaceChanged(unity::shell::application::MirSurfaceInterface* inputMethodSurface);
206 void focusedWindowChanged(
Window *focusedWindow);
207 void applicationManagerChanged(unity::shell::application::ApplicationManagerInterface*);
208 void surfaceManagerChanged(unity::shell::application::SurfaceManagerInterface*);
217 void closedAllWindows();
219 void rootFocusChanged();
222 void onSurfaceCreated(unity::shell::application::MirSurfaceInterface *surface);
223 void onSurfacesRaised(
const QVector<unity::shell::application::MirSurfaceInterface*> &surfaces);
225 void onModificationsStarted();
226 void onModificationsEnded();
229 void doRaiseId(
int id);
231 int nextFreeId(
int candidateId,
const int latestId);
232 int nextId(
int id)
const;
234 int indexOf(unity::shell::application::MirSurfaceInterface *surface);
236 void setInputMethodWindow(
Window *window);
237 void setFocusedWindow(
Window *window);
238 void removeInputMethodWindow();
239 int findIndexOf(
const unity::shell::application::MirSurfaceInterface *surface)
const;
240 void deleteAt(
int index);
241 void removeAt(
int index);
243 void addApplication(unity::shell::application::ApplicationInfoInterface *application);
244 void removeApplication(unity::shell::application::ApplicationInfoInterface *application);
246 void prependPlaceholder(unity::shell::application::ApplicationInfoInterface *application);
247 void prependSurface(unity::shell::application::MirSurfaceInterface *surface,
248 unity::shell::application::ApplicationInfoInterface *application);
249 void prependSurfaceHelper(unity::shell::application::MirSurfaceInterface *surface,
250 unity::shell::application::ApplicationInfoInterface *application);
251 void prependWindow(
Window *window, unity::shell::application::ApplicationInfoInterface *application);
253 void connectWindow(
Window *window);
254 void connectSurface(unity::shell::application::MirSurfaceInterface *surface);
256 void onSurfaceDied(unity::shell::application::MirSurfaceInterface *surface);
257 void onSurfaceDestroyed(unity::shell::application::MirSurfaceInterface *surface);
259 void move(
int from,
int to);
261 void activateEmptyWindow(
Window *window);
263 void activateTopMostWindowWithoutId(
int forbiddenId);
265 Window *createWindow(unity::shell::application::MirSurfaceInterface *surface);
266 Window *createWindowWithId(unity::shell::application::MirSurfaceInterface *surface,
int id);
267 Window *createNullWindow();
271 ModelEntry(
Window *window,
272 unity::shell::application::ApplicationInfoInterface *application)
273 : window(window), application(application) {}
275 unity::shell::application::ApplicationInfoInterface *application{
nullptr};
276 bool removeOnceSurfaceDestroyed{
false};
279 QVector<ModelEntry> m_windowModel;
280 Window* m_inputMethodWindow{
nullptr};
281 Window* m_focusedWindow{
nullptr};
283 Window* m_previousWindow{
nullptr};
284 bool m_pendingActivation;
286 QAtomicInteger<int> m_nextId{1};
288 unity::shell::application::ApplicationManagerInterface* m_applicationManager{
nullptr};
289 unity::shell::application::SurfaceManagerInterface *m_surfaceManager{
nullptr};
290 bool m_surfaceManagerBusy;
299 ModelState m_modelState{IdleState};
302 bool m_focusedWindowChanged{
false};
303 Window *m_newlyFocusedWindow{
nullptr};
305 bool m_closingAllApps{
false};
308 #endif // TOPLEVELWINDOWMODEL_H A slightly higher concept than MirSurface.
Roles
The Roles supported by the model.
A model of top-level surfaces.