@@ -16,7 +16,7 @@
17#include "ApplicationInfo.h"
17#include "ApplicationInfo.h"
18#include "MirSurfaceItem.h"
18#include "MirSurfaceItem.h"
19−#include "SurfaceManager.h"
19+#include "MirSurfaceItemModel.h"
21#include <QGuiApplication>
21#include <QGuiApplication>
22#include <QQuickItem>
22#include <QQuickItem>
@@ -33,6 +33,7 @@ ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
33 , m_fullscreen(false)
33 , m_fullscreen(false)
34 , m_parentItem(0)
34 , m_parentItem(0)
35 , m_surface(0)
35 , m_surface(0)
36+ , m_promptSurfaces(new MirSurfaceItemModel(this))
37 connect(this, &ApplicationInfo::stateChanged, this, &ApplicationInfo::onStateChanged);
38 connect(this, &ApplicationInfo::stateChanged, this, &ApplicationInfo::onStateChanged);
@@ -45,16 +46,20 @@ ApplicationInfo::ApplicationInfo(QObject *parent)
45 , m_fullscreen(false)
46 , m_fullscreen(false)
46 , m_parentItem(0)
47 , m_parentItem(0)
47 , m_surface(0)
48 , m_surface(0)
49+ , m_promptSurfaces(new MirSurfaceItemModel(this))
49 connect(this, &ApplicationInfo::stateChanged, this, &ApplicationInfo::onStateChanged);
51 connect(this, &ApplicationInfo::stateChanged, this, &ApplicationInfo::onStateChanged);
52ApplicationInfo::~ApplicationInfo()
54ApplicationInfo::~ApplicationInfo()
54− if (m_surface) {
56+ QList<MirSurfaceItem*> promptSurfaces(m_promptSurfaces->list());
55− Q_EMIT SurfaceManager::singleton()->surfaceDestroyed(m_surface);
57+ for (MirSurfaceItem* promptSurface : promptSurfaces) {
56− m_surface->deleteLater();
58+ delete promptSurface;
62+ delete m_promptSurfaces;
60void ApplicationInfo::onStateChanged(State state)
65void ApplicationInfo::onStateChanged(State state)
@@ -70,7 +75,7 @@ void ApplicationInfo::createSurface()
71 if (m_surface || state() == ApplicationInfo::Stopped) return;
76 if (m_surface || state() == ApplicationInfo::Stopped) return;
73− setSurface(new MirSurfaceItem(name(),
78+ setSurface(SurfaceManager::singleton()->createSurface(name(),
74 MirSurfaceItem::Normal,
79 MirSurfaceItem::Normal,
75 fullscreen() ? MirSurfaceItem::Fullscreen : MirSurfaceItem::Maximized,
80 fullscreen() ? MirSurfaceItem::Fullscreen : MirSurfaceItem::Maximized,
76 screenshot()));
81 screenshot()));
@@ -85,7 +90,6 @@ void ApplicationInfo::setSurface(MirSurfaceItem* surface)
85 if (m_surface) {
90 if (m_surface) {
86 m_surface->setApplication(nullptr);
91 m_surface->setApplication(nullptr);
87 m_surface->setParent(nullptr);
92 m_surface->setParent(nullptr);
88− SurfaceManager::singleton()->unregisterSurface(m_surface);
91 m_surface = surface;
95 m_surface = surface;
@@ -93,61 +97,37 @@ void ApplicationInfo::setSurface(MirSurfaceItem* surface)
93 if (m_surface) {
97 if (m_surface) {
94 m_surface->setApplication(this);
98 m_surface->setApplication(this);
95 m_surface->setParent(this);
99 m_surface->setParent(this);
96− SurfaceManager::singleton()->registerSurface(m_surface);
99 Q_EMIT surfaceChanged(m_surface);
102 Q_EMIT surfaceChanged(m_surface);
100− SurfaceManager::singleton()->registerSurface(m_surface);
103void ApplicationInfo::addPromptSurface(MirSurfaceItem* surface)
105void ApplicationInfo::addPromptSurface(MirSurfaceItem* surface)
107+ insertPromptSurface(m_promptSurfaces->count(), surface);
110+void ApplicationInfo::insertPromptSurface(uint index, MirSurfaceItem* surface)
105− qDebug() << "ApplicationInfo::addPromptSurface " << surface->name() << " to " << name();
112+ qDebug() << "ApplicationInfo::insertPromptSurface - " << surface->name() << " to " << name() << " @ " << index;
106− if (surface == m_surface || m_promptSurfaces.contains(surface)) return;
108 surface->setApplication(this);
114 surface->setApplication(this);
109− m_promptSurfaces.append(surface);
115+ m_promptSurfaces->insertSurface(index, surface);
110− Q_EMIT promptSurfacesChanged();
113void ApplicationInfo::removeSurface(MirSurfaceItem* surface)
118void ApplicationInfo::removeSurface(MirSurfaceItem* surface)
120+ qDebug() << "Application::removeSurface - " << surface->name() << " from " << name();
115 if (m_surface == surface) {
122 if (m_surface == surface) {
116 setSurface(nullptr);
123 setSurface(nullptr);
117− } else if (m_promptSurfaces.contains(surface)) {
124+ } else {
118− qDebug() << "Application::removeSurface " << surface->name() << " from " << name();
125+ m_promptSurfaces->removeSurface(surface);
120− m_promptSurfaces.removeAll(surface);
121 surface->setApplication(nullptr);
126 surface->setApplication(nullptr);
123− Q_EMIT promptSurfacesChanged();
127−QList<MirSurfaceItem*> ApplicationInfo::promptSurfaceList() const
130+MirSurfaceItemModel* ApplicationInfo::promptSurfaces() const
129 return m_promptSurfaces;
132 return m_promptSurfaces;
132−QQmlListProperty<MirSurfaceItem> ApplicationInfo::promptSurfaces()
134− return QQmlListProperty<MirSurfaceItem>(this,
136− ApplicationInfo::promptSurfaceCount,
137− ApplicationInfo::promptSurfaceAt);
140−int ApplicationInfo::promptSurfaceCount(QQmlListProperty<MirSurfaceItem> *prop)
142− ApplicationInfo *p = qobject_cast<ApplicationInfo*>(prop->object);
143− return p->m_promptSurfaces.count();
146−MirSurfaceItem* ApplicationInfo::promptSurfaceAt(QQmlListProperty<MirSurfaceItem> *prop, int index)
148− ApplicationInfo *p = qobject_cast<ApplicationInfo*>(prop->object);
150− if (index < 0 || index >= p->m_promptSurfaces.count())
152− return p->m_promptSurfaces[index];