17 #ifndef TOPLEVELWINDOWMODEL_H 18 #define TOPLEVELWINDOWMODEL_H 20 #include <QAbstractListModel> 21 #include <QLoggingCategory> 23 #include "WindowManagerGlobal.h" 25 Q_DECLARE_LOGGING_CATEGORY(TOPLEVELWINDOWMODEL)
31 namespace application {
32 class ApplicationInfoInterface;
33 class ApplicationManagerInterface;
34 class MirSurfaceInterface;
35 class SurfaceManagerInterface;
61 Q_PROPERTY(
int count READ rowCount NOTIFY countChanged)
68 Q_PROPERTY(
unity::shell::application::MirSurfaceInterface* inputMethodSurface READ inputMethodSurface NOTIFY inputMethodSurfaceChanged)
73 Q_PROPERTY(
Window* focusedWindow READ focusedWindow NOTIFY focusedWindowChanged)
75 Q_PROPERTY(
unity::shell::application::SurfaceManagerInterface* surfaceManager
77 WRITE setSurfaceManager
78 NOTIFY surfaceManagerChanged)
80 Q_PROPERTY(
unity::shell::application::ApplicationManagerInterface* applicationManager
81 READ applicationManager
82 WRITE setApplicationManager
83 NOTIFY applicationManagerChanged)
89 Q_PROPERTY(
int nextId READ nextId NOTIFY nextIdChanged)
99 WindowRole = Qt::UserRole,
100 ApplicationRole = Qt::UserRole + 1,
106 int rowCount(
const QModelIndex &parent = QModelIndex())
const override;
107 QVariant data(
const QModelIndex& index,
int role)
const override;
108 QHash<int, QByteArray> roleNames()
const override {
109 QHash<int, QByteArray> roleNames { {WindowRole,
"window"},
110 {ApplicationRole,
"application"} };
116 unity::shell::application::MirSurfaceInterface* inputMethodSurface()
const;
117 Window* focusedWindow()
const;
119 unity::shell::application::ApplicationManagerInterface *applicationManager()
const {
return m_applicationManager; }
120 void setApplicationManager(unity::shell::application::ApplicationManagerInterface*);
122 unity::shell::application::SurfaceManagerInterface *surfaceManager()
const {
return m_surfaceManager; }
123 void setSurfaceManager(unity::shell::application::SurfaceManagerInterface*);
125 int nextId()
const {
return m_nextId; }
136 Q_INVOKABLE unity::shell::application::MirSurfaceInterface *surfaceAt(
int index)
const;
143 Q_INVOKABLE
Window *windowAt(
int index)
const;
148 Q_INVOKABLE unity::shell::application::ApplicationInfoInterface *applicationAt(
int index)
const;
153 Q_INVOKABLE
int idAt(
int index)
const;
160 Q_INVOKABLE
int indexForId(
int id)
const;
165 Q_INVOKABLE
void raiseId(
int id);
169 void inputMethodSurfaceChanged(unity::shell::application::MirSurfaceInterface* inputMethodSurface);
170 void focusedWindowChanged(
Window *focusedWindow);
171 void applicationManagerChanged(unity::shell::application::ApplicationManagerInterface*);
172 void surfaceManagerChanged(unity::shell::application::SurfaceManagerInterface*);
181 void nextIdChanged();
184 void onSurfaceCreated(unity::shell::application::MirSurfaceInterface *surface);
185 void onSurfacesRaised(
const QVector<unity::shell::application::MirSurfaceInterface*> &surfaces);
187 void onModificationsStarted();
188 void onModificationsEnded();
191 void doRaiseId(
int id);
193 int nextFreeId(
int candidateId,
const int latestId);
194 int nextId(
int id)
const;
196 int indexOf(unity::shell::application::MirSurfaceInterface *surface);
198 void setInputMethodWindow(
Window *window);
199 void setFocusedWindow(
Window *window);
200 void removeInputMethodWindow();
201 int findIndexOf(
const unity::shell::application::MirSurfaceInterface *surface)
const;
202 void deleteAt(
int index);
203 void removeAt(
int index);
205 void addApplication(unity::shell::application::ApplicationInfoInterface *application);
206 void removeApplication(unity::shell::application::ApplicationInfoInterface *application);
208 void prependPlaceholder(unity::shell::application::ApplicationInfoInterface *application);
209 void prependSurface(unity::shell::application::MirSurfaceInterface *surface,
210 unity::shell::application::ApplicationInfoInterface *application);
211 void prependSurfaceHelper(unity::shell::application::MirSurfaceInterface *surface,
212 unity::shell::application::ApplicationInfoInterface *application);
213 void prependWindow(
Window *window, unity::shell::application::ApplicationInfoInterface *application);
215 void connectWindow(
Window *window);
216 void connectSurface(unity::shell::application::MirSurfaceInterface *surface);
218 void onSurfaceDied(unity::shell::application::MirSurfaceInterface *surface);
219 void onSurfaceDestroyed(unity::shell::application::MirSurfaceInterface *surface);
221 void move(
int from,
int to);
223 void activateEmptyWindow(
Window *window);
225 void activateTopMostWindowWithoutId(
int forbiddenId);
227 Window *createWindow(unity::shell::application::MirSurfaceInterface *surface);
231 ModelEntry(
Window *window,
232 unity::shell::application::ApplicationInfoInterface *application)
233 : window(window), application(application) {}
235 unity::shell::application::ApplicationInfoInterface *application{
nullptr};
236 bool removeOnceSurfaceDestroyed{
false};
239 QVector<ModelEntry> m_windowModel;
240 Window* m_inputMethodWindow{
nullptr};
241 Window* m_focusedWindow{
nullptr};
247 static const int m_maxId{1000000};
249 unity::shell::application::ApplicationManagerInterface* m_applicationManager{
nullptr};
250 unity::shell::application::SurfaceManagerInterface *m_surfaceManager{
nullptr};
259 ModelState m_modelState{IdleState};
262 bool m_focusedWindowChanged{
false};
263 Window *m_newlyFocusedWindow{
nullptr};
266 #endif // TOPLEVELWINDOWMODEL_H A slightly higher concept than MirSurface.
Roles
The Roles supported by the model.
A model of top-level surfaces.