@@ -1,5 +1,5 @@
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2014 Canonical, Ltd.
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -16,6 +16,7 @@
17#include "ApplicationManager.h"
17#include "ApplicationManager.h"
18#include "ApplicationInfo.h"
18#include "ApplicationInfo.h"
19+#include "MirSurfaceItem.h"
20#include <paths.h>
21#include <paths.h>
@@ -36,6 +37,9 @@ ApplicationManager::ApplicationManager(QObject *parent)
36 , m_sideStage(0)
37 , m_sideStage(0)
37 , m_rightMargin(0)
38 , m_rightMargin(0)
40+ m_roleNames.insert(RoleSurface, "surface");
41+ m_roleNames.insert(RoleFullscreen, "fullscreen");
39 buildListOfAvailableApplications();
43 buildListOfAvailableApplications();
@@ -69,6 +73,10 @@ QVariant ApplicationManager::data(const QModelIndex& index, int role) const {
69 return app->focused();
73 return app->focused();
70 case RoleScreenshot:
74 case RoleScreenshot:
71 return app->screenshot();
75 return app->screenshot();
77+ return QVariant::fromValue(app->surface());
79+ return app->fullscreen();
73 return QVariant();
81 return QVariant();
@@ -89,6 +97,17 @@ ApplicationInfo *ApplicationManager::findApplication(const QString &appId) const
89 return nullptr;
97 return nullptr;
100+QModelIndex ApplicationManager::findIndex(ApplicationInfo* application)
102+ for (int i = 0; i < m_runningApplications.size(); ++i) {
103+ if (m_runningApplications.at(i) == application) {
108+ return QModelIndex();
92void ApplicationManager::add(ApplicationInfo *application) {
111void ApplicationManager::add(ApplicationInfo *application) {
93 if (!application) {
112 if (!application) {
@@ -100,6 +119,12 @@ void ApplicationManager::add(ApplicationInfo *application) {
100 Q_EMIT applicationAdded(application->appId());
119 Q_EMIT applicationAdded(application->appId());
101 Q_EMIT countChanged();
120 Q_EMIT countChanged();
102 Q_EMIT focusRequested(application->appId());
121 Q_EMIT focusRequested(application->appId());
123+ connect(application, &ApplicationInfo::surfaceChanged, this, [application, this]() {
124+ QModelIndex appIndex = findIndex(application);
125+ if (!appIndex.isValid()) return;
126+ Q_EMIT dataChanged(appIndex, appIndex, QVector<int>() << ApplicationManager::RoleSurface);
105void ApplicationManager::remove(ApplicationInfo *application) {
130void ApplicationManager::remove(ApplicationInfo *application) {
@@ -111,6 +136,7 @@ void ApplicationManager::remove(ApplicationInfo *application) {
111 Q_EMIT applicationRemoved(application->appId());
136 Q_EMIT applicationRemoved(application->appId());
112 Q_EMIT countChanged();
137 Q_EMIT countChanged();
139+ disconnect(application, &ApplicationInfo::surfaceChanged, this, 0);
116void ApplicationManager::move(int from, int to) {
142void ApplicationManager::move(int from, int to) {
@@ -180,6 +206,7 @@ ApplicationInfo* ApplicationManager::startApplication(const QString &appId,
180 application->setStage(ApplicationInfo::MainStage);
206 application->setStage(ApplicationInfo::MainStage);
182 add(application);
208 add(application);
209+ application->setState(ApplicationInfo::Running);
184 return application;
211 return application;
@@ -193,6 +220,7 @@ bool ApplicationManager::stopApplication(const QString &appId)
193 if (application->appId() == focusedApplicationId()) {
220 if (application->appId() == focusedApplicationId()) {
194 unfocusCurrentApplication();
221 unfocusCurrentApplication();
223+ application->setState(ApplicationInfo::Stopped);
196 remove(application);
224 remove(application);
197 return true;
225 return true;
@@ -213,7 +241,6 @@ bool ApplicationManager::updateScreenshot(const QString &appId)
213 return false;
241 return false;
216− application->setScreenshot(QString("image://application/%1/%2").arg(appId).arg(QDateTime::currentMSecsSinceEpoch()));
217 QModelIndex appIndex = index(idx);
244 QModelIndex appIndex = index(idx);
218 Q_EMIT dataChanged(appIndex, appIndex, QVector<int>() << RoleScreenshot);
245 Q_EMIT dataChanged(appIndex, appIndex, QVector<int>() << RoleScreenshot);
219 return true;
246 return true;
@@ -352,6 +379,9 @@ void ApplicationManager::generateQmlStrings(ApplicationInfo *application)
352 "}").arg(qmlDirectory())
379 "}").arg(qmlDirectory())
353 .arg(application->icon().toString());
380 .arg(application->icon().toString());
354 application->setImageQml(imageQml);
381 application->setImageQml(imageQml);
383+ application->setScreenshot(QString("file://%1/Dash/graphics/phone/screenshots/%2@12.png").arg(qmlDirectory())
384+ .arg(application->icon().toString()));
357void ApplicationManager::buildListOfAvailableApplications()
387void ApplicationManager::buildListOfAvailableApplications()
@@ -363,7 +393,6 @@ void ApplicationManager::buildListOfAvailableApplications()
363 application->setName("Dialer");
393 application->setName("Dialer");
364 application->setIcon(QUrl("dialer"));
394 application->setIcon(QUrl("dialer"));
365 application->setStage(ApplicationInfo::SideStage);
395 application->setStage(ApplicationInfo::SideStage);
366− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
367 generateQmlStrings(application);
396 generateQmlStrings(application);
368 m_availableApplications.append(application);
397 m_availableApplications.append(application);
@@ -372,7 +401,6 @@ void ApplicationManager::buildListOfAvailableApplications()
372 application->setName("Camera");
401 application->setName("Camera");
373 application->setIcon(QUrl("camera"));
402 application->setIcon(QUrl("camera"));
374 application->setFullscreen(true);
403 application->setFullscreen(true);
375− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
376 generateQmlStrings(application);
404 generateQmlStrings(application);
377 m_availableApplications.append(application);
405 m_availableApplications.append(application);
@@ -380,7 +408,6 @@ void ApplicationManager::buildListOfAvailableApplications()
380 application->setAppId("gallery-app");
408 application->setAppId("gallery-app");
381 application->setName("Gallery");
409 application->setName("Gallery");
382 application->setIcon(QUrl("gallery"));
410 application->setIcon(QUrl("gallery"));
383− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
384 generateQmlStrings(application);
411 generateQmlStrings(application);
385 m_availableApplications.append(application);
412 m_availableApplications.append(application);
@@ -389,7 +416,6 @@ void ApplicationManager::buildListOfAvailableApplications()
389 application->setName("Facebook");
416 application->setName("Facebook");
390 application->setIcon(QUrl("facebook"));
417 application->setIcon(QUrl("facebook"));
391 application->setStage(ApplicationInfo::SideStage);
418 application->setStage(ApplicationInfo::SideStage);
392− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
393 generateQmlStrings(application);
419 generateQmlStrings(application);
394 m_availableApplications.append(application);
420 m_availableApplications.append(application);
@@ -398,7 +424,6 @@ void ApplicationManager::buildListOfAvailableApplications()
398 application->setFullscreen(true);
424 application->setFullscreen(true);
399 application->setName("Browser");
425 application->setName("Browser");
400 application->setIcon(QUrl("browser"));
426 application->setIcon(QUrl("browser"));
401− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
402 generateQmlStrings(application);
427 generateQmlStrings(application);
403 m_availableApplications.append(application);
428 m_availableApplications.append(application);
@@ -407,7 +432,6 @@ void ApplicationManager::buildListOfAvailableApplications()
407 application->setName("Twitter");
432 application->setName("Twitter");
408 application->setIcon(QUrl("twitter"));
433 application->setIcon(QUrl("twitter"));
409 application->setStage(ApplicationInfo::SideStage);
434 application->setStage(ApplicationInfo::SideStage);
410− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
411 generateQmlStrings(application);
435 generateQmlStrings(application);
412 m_availableApplications.append(application);
436 m_availableApplications.append(application);
@@ -415,7 +439,6 @@ void ApplicationManager::buildListOfAvailableApplications()
415 application->setAppId("gmail-webapp");
439 application->setAppId("gmail-webapp");
416 application->setName("GMail");
440 application->setName("GMail");
417 application->setIcon(QUrl("gmail"));
441 application->setIcon(QUrl("gmail"));
418− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
419 m_availableApplications.append(application);
442 m_availableApplications.append(application);
421 application = new ApplicationInfo(this);
444 application = new ApplicationInfo(this);
@@ -423,7 +446,6 @@ void ApplicationManager::buildListOfAvailableApplications()
423 application->setName("Weather");
446 application->setName("Weather");
424 application->setIcon(QUrl("weather"));
447 application->setIcon(QUrl("weather"));
425 application->setStage(ApplicationInfo::SideStage);
448 application->setStage(ApplicationInfo::SideStage);
426− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
427 generateQmlStrings(application);
449 generateQmlStrings(application);
428 m_availableApplications.append(application);
450 m_availableApplications.append(application);
@@ -432,7 +454,6 @@ void ApplicationManager::buildListOfAvailableApplications()
432 application->setName("Notepad");
454 application->setName("Notepad");
433 application->setIcon(QUrl("notepad"));
455 application->setIcon(QUrl("notepad"));
434 application->setStage(ApplicationInfo::SideStage);
456 application->setStage(ApplicationInfo::SideStage);
435− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
436 m_availableApplications.append(application);
457 m_availableApplications.append(application);
438 application = new ApplicationInfo(this);
459 application = new ApplicationInfo(this);
@@ -440,7 +461,6 @@ void ApplicationManager::buildListOfAvailableApplications()
440 application->setName("Calendar");
461 application->setName("Calendar");
441 application->setIcon(QUrl("calendar"));
462 application->setIcon(QUrl("calendar"));
442 application->setStage(ApplicationInfo::SideStage);
463 application->setStage(ApplicationInfo::SideStage);
443− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
444 m_availableApplications.append(application);
464 m_availableApplications.append(application);
446 application = new ApplicationInfo(this);
466 application = new ApplicationInfo(this);
@@ -448,21 +468,18 @@ void ApplicationManager::buildListOfAvailableApplications()
448 application->setName("Media Player");
468 application->setName("Media Player");
449 application->setIcon(QUrl("mediaplayer-app"));
469 application->setIcon(QUrl("mediaplayer-app"));
450 application->setFullscreen(true);
470 application->setFullscreen(true);
451− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
452 m_availableApplications.append(application);
471 m_availableApplications.append(application);
454 application = new ApplicationInfo(this);
473 application = new ApplicationInfo(this);
455 application->setAppId("evernote");
474 application->setAppId("evernote");
456 application->setName("Evernote");
475 application->setName("Evernote");
457 application->setIcon(QUrl("evernote"));
476 application->setIcon(QUrl("evernote"));
458− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
459 m_availableApplications.append(application);
477 m_availableApplications.append(application);
461 application = new ApplicationInfo(this);
479 application = new ApplicationInfo(this);
462 application->setAppId("map");
480 application->setAppId("map");
463 application->setName("Map");
481 application->setName("Map");
464 application->setIcon(QUrl("map"));
482 application->setIcon(QUrl("map"));
465− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
466 generateQmlStrings(application);
483 generateQmlStrings(application);
467 m_availableApplications.append(application);
484 m_availableApplications.append(application);
@@ -470,28 +487,24 @@ void ApplicationManager::buildListOfAvailableApplications()
470 application->setAppId("pinterest");
487 application->setAppId("pinterest");
471 application->setName("Pinterest");
488 application->setName("Pinterest");
472 application->setIcon(QUrl("pinterest"));
489 application->setIcon(QUrl("pinterest"));
473− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
474 m_availableApplications.append(application);
490 m_availableApplications.append(application);
476 application = new ApplicationInfo(this);
492 application = new ApplicationInfo(this);
477 application->setAppId("soundcloud");
493 application->setAppId("soundcloud");
478 application->setName("SoundCloud");
494 application->setName("SoundCloud");
479 application->setIcon(QUrl("soundcloud"));
495 application->setIcon(QUrl("soundcloud"));
480− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
481 m_availableApplications.append(application);
496 m_availableApplications.append(application);
483 application = new ApplicationInfo(this);
498 application = new ApplicationInfo(this);
484 application->setAppId("wikipedia");
499 application->setAppId("wikipedia");
485 application->setName("Wikipedia");
500 application->setName("Wikipedia");
486 application->setIcon(QUrl("wikipedia"));
501 application->setIcon(QUrl("wikipedia"));
487− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
488 m_availableApplications.append(application);
502 m_availableApplications.append(application);
490 application = new ApplicationInfo(this);
504 application = new ApplicationInfo(this);
491 application->setAppId("youtube");
505 application->setAppId("youtube");
492 application->setName("YouTube");
506 application->setName("YouTube");
493 application->setIcon(QUrl("youtube"));
507 application->setIcon(QUrl("youtube"));
494− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
495 m_availableApplications.append(application);
508 m_availableApplications.append(application);