17 #ifndef TOPLEVELWINDOWMODEL_H 18 #define TOPLEVELWINDOWMODEL_H 20 #include <QAbstractListModel> 21 #include <QLoggingCategory> 23 Q_DECLARE_LOGGING_CATEGORY(TOPLEVELWINDOWMODEL)
29 namespace application {
30 class ApplicationInfoInterface;
31 class ApplicationManagerInterface;
32 class MirSurfaceInterface;
33 class SurfaceManagerInterface;
59 Q_PROPERTY(
int count READ rowCount NOTIFY countChanged)
66 Q_PROPERTY(
unity::shell::application::MirSurfaceInterface* inputMethodSurface READ inputMethodSurface NOTIFY inputMethodSurfaceChanged)
71 Q_PROPERTY(
Window* focusedWindow READ focusedWindow NOTIFY focusedWindowChanged)
73 Q_PROPERTY(
unity::shell::application::SurfaceManagerInterface* surfaceManager
75 WRITE setSurfaceManager
76 NOTIFY surfaceManagerChanged)
78 Q_PROPERTY(
unity::shell::application::ApplicationManagerInterface* applicationManager
79 READ applicationManager
80 WRITE setApplicationManager
81 NOTIFY applicationManagerChanged)
87 Q_PROPERTY(
int nextId READ nextId NOTIFY nextIdChanged)
97 WindowRole = Qt::UserRole,
98 ApplicationRole = Qt::UserRole + 1,
104 int rowCount(
const QModelIndex &parent = QModelIndex())
const override;
105 QVariant data(
const QModelIndex& index,
int role)
const override;
106 QHash<int, QByteArray> roleNames()
const override {
107 QHash<int, QByteArray> roleNames { {WindowRole,
"window"},
108 {ApplicationRole,
"application"} };
114 unity::shell::application::MirSurfaceInterface* inputMethodSurface()
const;
115 Window* focusedWindow()
const;
117 unity::shell::application::ApplicationManagerInterface *applicationManager()
const {
return m_applicationManager; }
118 void setApplicationManager(unity::shell::application::ApplicationManagerInterface*);
120 unity::shell::application::SurfaceManagerInterface *surfaceManager()
const {
return m_surfaceManager; }
121 void setSurfaceManager(unity::shell::application::SurfaceManagerInterface*);
123 int nextId()
const {
return m_nextId; }
134 Q_INVOKABLE unity::shell::application::MirSurfaceInterface *surfaceAt(
int index)
const;
141 Q_INVOKABLE
Window *windowAt(
int index)
const;
146 Q_INVOKABLE unity::shell::application::ApplicationInfoInterface *applicationAt(
int index)
const;
151 Q_INVOKABLE
int idAt(
int index)
const;
158 Q_INVOKABLE
int indexForId(
int id)
const;
163 Q_INVOKABLE
void raiseId(
int id);
167 void inputMethodSurfaceChanged(unity::shell::application::MirSurfaceInterface* inputMethodSurface);
168 void focusedWindowChanged(
Window *focusedWindow);
169 void applicationManagerChanged(unity::shell::application::ApplicationManagerInterface*);
170 void surfaceManagerChanged(unity::shell::application::SurfaceManagerInterface*);
179 void nextIdChanged();
182 void onSurfaceCreated(unity::shell::application::MirSurfaceInterface *surface);
183 void onSurfacesRaised(
const QVector<unity::shell::application::MirSurfaceInterface*> &surfaces);
185 void onModificationsStarted();
186 void onModificationsEnded();
189 void doRaiseId(
int id);
191 int nextFreeId(
int candidateId,
const int latestId);
192 int nextId(
int id)
const;
194 int indexOf(unity::shell::application::MirSurfaceInterface *surface);
196 void setInputMethodWindow(
Window *window);
197 void setFocusedWindow(
Window *window);
198 void removeInputMethodWindow();
199 int findIndexOf(
const unity::shell::application::MirSurfaceInterface *surface)
const;
200 void removeAt(
int index);
202 void addApplication(unity::shell::application::ApplicationInfoInterface *application);
203 void removeApplication(unity::shell::application::ApplicationInfoInterface *application);
205 void prependPlaceholder(unity::shell::application::ApplicationInfoInterface *application);
206 void prependSurface(unity::shell::application::MirSurfaceInterface *surface,
207 unity::shell::application::ApplicationInfoInterface *application);
208 void prependSurfaceHelper(unity::shell::application::MirSurfaceInterface *surface,
209 unity::shell::application::ApplicationInfoInterface *application);
211 void connectWindow(
Window *window);
212 void connectSurface(unity::shell::application::MirSurfaceInterface *surface);
214 void onSurfaceDied(unity::shell::application::MirSurfaceInterface *surface);
215 void onSurfaceDestroyed(unity::shell::application::MirSurfaceInterface *surface);
217 void move(
int from,
int to);
219 void activateEmptyWindow(
Window *window);
221 void activateTopMostWindowWithoutId(
int forbiddenId);
225 ModelEntry(
Window *window,
226 unity::shell::application::ApplicationInfoInterface *application)
227 : window(window), application(application) {}
229 unity::shell::application::ApplicationInfoInterface *application{
nullptr};
230 bool removeOnceSurfaceDestroyed{
false};
233 QVector<ModelEntry> m_windowModel;
234 Window* m_inputMethodWindow{
nullptr};
235 Window* m_focusedWindow{
nullptr};
241 static const int m_maxId{1000000};
243 unity::shell::application::ApplicationManagerInterface* m_applicationManager{
nullptr};
244 unity::shell::application::SurfaceManagerInterface *m_surfaceManager{
nullptr};
253 ModelState m_modelState{IdleState};
256 bool m_focusedWindowChanged{
false};
257 Window *m_newlyFocusedWindow{
nullptr};
260 #endif // TOPLEVELWINDOWMODEL_H A slightly higher concept than MirSurface.
Roles
The Roles supported by the model.
A model of top-level surfaces.