@@ -17,9 +17,10 @@
1717#include "ApplicationInfo.h"
1818#include "ApplicationTestInterface.h"
1919#include "ApplicationManager.h"
20+#include "SessionManager.h"
2021#include "SurfaceManager.h"
22+#include "MirSessionItem.h"
2123#include "MirSurfaceItem.h"
22−#include "MirSurfaceItemModel.h"
2324
2425quint32 nextId = 0;
2526
@@ -31,29 +32,51 @@ ApplicationTestInterface::ApplicationTestInterface(QObject* parent)
3132 connection.registerObject("/com/canonical/Unity8/Mocks", parent);
3233}
3334
34−quint32 ApplicationTestInterface::addPromptSurface(const QString &appId, const QString &surfaceImage)
35+quint32 ApplicationTestInterface::addChildSession(const QString& appId, quint32 existingSessionId, const QString& surfaceImage)
3536{
36− qDebug() << "ApplicationTestInterface::addPromptSurface to " << appId;
37+ qDebug() << "ApplicationTestInterface::addChildSession to " << appId;
3738
3839 ApplicationInfo* application = ApplicationManager::singleton()->findApplication(appId);
3940 if (!application) {
40− qDebug() << "ApplicationTestInterface::addPromptSurface - No application found for " << appId;
41+ qDebug() << "ApplicationTestInterface::addChildSession - No application found for " << appId;
4142 return 0;
4243 }
43− quint32 surfaceId = ++nextId;
44− MirSurfaceItem* surface = SurfaceManager::singleton()->createSurface(
45− QString("%1-Prompt%2").arg(appId)
46− .arg(surfaceId),
47− MirSurfaceItem::Normal,
48− MirSurfaceItem::Maximized,
44+
45+ MirSessionItem* parentSession = nullptr;
46+ if (m_childSessions.contains(existingSessionId)) {
47+ parentSession = m_childSessions[existingSessionId];
48+ } else if (application->session()) {
49+ parentSession = application->session();
50+ } else {
51+ qDebug() << "ApplicationTestInterface::addChildSession - No session for " << appId << ":" << existingSessionId;
52+ return 0;
53+ }
54+
55+ quint32 sessionId = ++nextId;
56+ MirSessionItem* session = SessionManager::singleton()->createSession(
57+ QString("%1-Child%2").arg(parentSession->name())
58+ .arg(sessionId),
4959 QUrl(surfaceImage));
50− m_childItems[surfaceId] = surface;
51− application->addPromptSurface(surface);
60+ parentSession->addChildSession(session);
61+ session->createSurface();
62+ m_childSessions[sessionId] = session;
5263
53− return surfaceId;
64+ return sessionId;
65+}
66+
67+void ApplicationTestInterface::removeSession(quint32 sessionId)
68+{
69+ qDebug() << "ApplicationTestInterface::removeSession - " << sessionId;
70+
71+ if (!m_childSessions.contains(sessionId)) {
72+ qDebug() << "ApplicationTestInterface::removeSession - No added session for " << sessionId;
73+ return;
74+ }
75+ MirSessionItem* session = m_childSessions.take(sessionId);
76+ Q_EMIT session->removed();
5477}
5578
56−quint32 ApplicationTestInterface::addChildSurface(const QString& appId, const quint32 existingSurfaceId, const QString& surfaceImage)
79+quint32 ApplicationTestInterface::addChildSurface(const QString& appId, quint32 existingSessionId, quint32 existingSurfaceId, const QString& surfaceImage)
5780{
5881 qDebug() << "ApplicationTestInterface::addChildSurface to " << appId;
5982
@@ -64,10 +87,12 @@ quint32 ApplicationTestInterface::addChildSurface(const QString& appId, const qu
6487 }
6588
6689 MirSurfaceItem* parentSurface = nullptr;
67− if (m_childItems.contains(existingSurfaceId)) {
68− parentSurface = m_childItems[existingSurfaceId];
69− } else if (application->surface()) {
70− parentSurface = application->surface();
90+ if (m_childSessions.contains(existingSessionId) && m_childSessions[existingSessionId]->surface()) {
91+ parentSurface = m_childSessions[existingSessionId]->surface();
92+ } else if (m_childSurfaces.contains(existingSurfaceId)) {
93+ parentSurface = m_childSurfaces[existingSurfaceId];
94+ } else if (application->session() && application->session()->surface()) {
95+ parentSurface = application->session()->surface();
7196 } else {
7297 qDebug() << "ApplicationTestInterface::addChildSurface - No surface for " << appId << ":" << existingSurfaceId;
7398 return 0;
@@ -81,19 +106,19 @@ quint32 ApplicationTestInterface::addChildSurface(const QString& appId, const qu
81106 MirSurfaceItem::Maximized,
82107 QUrl(surfaceImage));
83108 parentSurface->addChildSurface(surface);
84− m_childItems[surfaceId] = surface;
109+ m_childSurfaces[surfaceId] = surface;
85110
86111 return surfaceId;
87112}
88113
89−void ApplicationTestInterface::removeSurface(int surfaceId)
114+void ApplicationTestInterface::removeSurface(quint32 surfaceId)
90115{
91116 qDebug() << "ApplicationTestInterface::removeSurface - " << surfaceId;
92117
93− if (!m_childItems.contains(surfaceId)) {
118+ if (!m_childSurfaces.contains(surfaceId)) {
94119 qDebug() << "ApplicationTestInterface::removeSurface - No added surface for " << surfaceId;
95120 return;
96121 }
97− MirSurfaceItem* surface = m_childItems.take(surfaceId);
122+ MirSurfaceItem* surface = m_childSurfaces.take(surfaceId);
98123 Q_EMIT surface->removed();
99124}