on xenial help sign in
Added applicationdbus adaptor for adding child surfaces to mir surfaces
3d2e4e5Nick Dedekind
tests/mocks/Unity/Application/ApplicationDBusAdaptor.cppnew file+53
@@ -0,0 +1,53 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
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
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "ApplicationInfo.h"
18+#include "ApplicationDBusAdaptor.h"
19+#include "ApplicationManager.h"
20+#include "SurfaceManager.h"
21+#include "MirSurfaceItem.h"
22+
23+quint32 nextId = 0;
24+
25+ApplicationDBusAdaptor::ApplicationDBusAdaptor(ApplicationManager* applicationManager)
26+ : QDBusAbstractAdaptor(applicationManager)
27+ , m_applicationManager(applicationManager)
28+{
29+}
30+
31+quint32 ApplicationDBusAdaptor::addChildSurface(const QString &appId, const QString &surfaceImage)
32+{
33+ ApplicationInfo* application = m_applicationManager->findApplication(appId);
34+ if (!application) {
35+ qDebug() << "ApplicationDBusAdaptor::addChildSurface - No application for " << appId;
36+ return ~0;
37+ }
38+ quint32 surfaceId = ++nextId;
39+ MirSurfaceItem* surface = new MirSurfaceItem(QString("ChildSurface%1").arg(surfaceId),
40+ MirSurfaceItem::Normal,
41+ MirSurfaceItem::Maximized,
42+ QUrl(surfaceImage));
43+ m_childItems[surfaceId] = surface;
44+ surface->setParentSurface(application->surface());
45+ return surfaceId;
46+}
47+
48+void ApplicationDBusAdaptor::removeChildSurface(int surfaceId)
49+{
50+ if (!m_childItems.contains(surfaceId)) return;
51+ MirSurfaceItem* surface = m_childItems[surfaceId];
52+ surface->setParentSurface(nullptr);
53+}
tests/mocks/Unity/Application/ApplicationDBusAdaptor.hnew file+43
@@ -0,0 +1,43 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
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
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef APPLICATIONDBUSADAPTOR_H
18+#define APPLICATIONDBUSADAPTOR_H
19+
20+#include <QtDBus/QtDBus>
21+
22+class ApplicationManager;
23+class SurfaceManager;
24+class MirSurfaceItem;
25+
26+class ApplicationDBusAdaptor : public QDBusAbstractAdaptor
27+{
28+ Q_OBJECT
29+ Q_CLASSINFO("D-Bus Interface", "com.canonical.Unity8.Mocks")
30+public:
31+ ApplicationDBusAdaptor(ApplicationManager* applicationManager);
32+
33+public Q_SLOTS:
34+ quint32 addChildSurface(const QString& appId, const QString& surfaceImage);
35+ void removeChildSurface(int surfaceId);
36+
37+private:
38+ ApplicationManager* m_applicationManager;
39+
40+ QHash<quint32, MirSurfaceItem*> m_childItems;
41+};
42+
43+#endif // APPLICATIONDBUSADAPTOR_H
tests/mocks/Unity/Application/ApplicationManager.cpp+17
@@ -15,6 +15,7 @@
15 */
15 */
16
16
17#include "ApplicationManager.h"
17#include "ApplicationManager.h"
18+#include "ApplicationDBusAdaptor.h"
18#include "ApplicationInfo.h"
19#include "ApplicationInfo.h"
19#include "MirSurfaceItem.h"
20#include "MirSurfaceItem.h"
20
21
@@ -27,6 +28,22 @@
27#include <QQmlComponent>
28#include <QQmlComponent>
28#include <QTimer>
29#include <QTimer>
29#include <QDateTime>
30#include <QDateTime>
31+#include <QtDBus/QtDBus>
32+
33+ApplicationManager *ApplicationManager::the_application_manager = nullptr;
34+
35+ApplicationManager *ApplicationManager::singleton()
36+{
37+ if (!the_application_manager) {
38+ the_application_manager = new ApplicationManager();
39+ new ApplicationDBusAdaptor(the_application_manager);
40+
41+ QDBusConnection connection = QDBusConnection::sessionBus();
42+ connection.registerService("com.canonical.Unity8");
43+ connection.registerObject("/com/canonical/Unity8/Mocks", the_application_manager);
44+ }
45+ return the_application_manager;
46+}
30
47
31ApplicationManager::ApplicationManager(QObject *parent)
48ApplicationManager::ApplicationManager(QObject *parent)
32 : ApplicationManagerInterface(parent)
49 : ApplicationManagerInterface(parent)
tests/mocks/Unity/Application/ApplicationManager.h+4
@@ -53,6 +53,8 @@ class ApplicationManager : public ApplicationManagerInterface {
53 ApplicationManager(QObject *parent = NULL);
53 ApplicationManager(QObject *parent = NULL);
54 virtual ~ApplicationManager();
54 virtual ~ApplicationManager();
55
55
56+ static ApplicationManager *singleton();
57+
56 enum MoreRoles {
58 enum MoreRoles {
57 RoleSurface = RoleScreenshot+1,
59 RoleSurface = RoleScreenshot+1,
58 RoleFullscreen,
60 RoleFullscreen,
@@ -141,6 +143,8 @@ class ApplicationManager : public ApplicationManagerInterface {
141 QQuickItem *m_sideStage;
143 QQuickItem *m_sideStage;
142
144
143 int m_rightMargin;
145 int m_rightMargin;
146+
147+ static ApplicationManager *the_application_manager;
144};
148};
145
149
146Q_DECLARE_OPERATORS_FOR_FLAGS(ApplicationManager::ExecFlags)
150Q_DECLARE_OPERATORS_FOR_FLAGS(ApplicationManager::ExecFlags)
tests/mocks/Unity/Application/CMakeLists.txt+3−2
@@ -2,6 +2,7 @@ pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application)
2
2
3set(FakeUnityApplicationQml_SOURCES
3set(FakeUnityApplicationQml_SOURCES
4 plugin.cpp
4 plugin.cpp
5+ ApplicationDBusAdaptor.cpp
5 ApplicationInfo.cpp
6 ApplicationInfo.cpp
6 ApplicationImage.cpp
7 ApplicationImage.cpp
7 ApplicationManager.cpp
8 ApplicationManager.cpp
@@ -17,8 +18,8 @@ add_library(FakeUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
17add_library(NonMirUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
18add_library(NonMirUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
18set_target_properties(NonMirUnityApplicationQml PROPERTIES OUTPUT_NAME FakeUnityApplicationQml)
19set_target_properties(NonMirUnityApplicationQml PROPERTIES OUTPUT_NAME FakeUnityApplicationQml)
19
20
20−qt5_use_modules(FakeUnityApplicationQml Core Quick)
21+qt5_use_modules(FakeUnityApplicationQml Core Quick DBus)
21−qt5_use_modules(NonMirUnityApplicationQml Core Quick)
22+qt5_use_modules(NonMirUnityApplicationQml Core Quick DBus)
22
23
23add_unity8_mock(Unity.Application 0.1 Unity/Application PREFIX mocks TARGETS FakeUnityApplicationQml)
24add_unity8_mock(Unity.Application 0.1 Unity/Application PREFIX mocks TARGETS FakeUnityApplicationQml)
24add_unity8_mock(Unity.Application 0.1 Unity/Application
25add_unity8_mock(Unity.Application 0.1 Unity/Application
tests/mocks/Unity/Application/plugin.cpp+2−8
@@ -25,15 +25,10 @@
25#include <qqml.h>
25#include <qqml.h>
26#include <QQmlEngine>
26#include <QQmlEngine>
27
27
28−ApplicationManager *s_appManager = 0;
29−
30static QObject* applicationManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
28static QObject* applicationManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
31 Q_UNUSED(engine);
29 Q_UNUSED(engine);
32 Q_UNUSED(scriptEngine);
30 Q_UNUSED(scriptEngine);
33− if (!s_appManager) {
34− s_appManager = new ApplicationManager();
31+ return ApplicationManager::singleton();
35− }
36− return s_appManager;
37}
32}
38
33
39static QObject* surfaceManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
34static QObject* surfaceManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
@@ -62,6 +57,5 @@ void FakeUnityApplicationQmlPlugin::initializeEngine(QQmlEngine *engine, const c
62{
57{
63 QQmlExtensionPlugin::initializeEngine(engine, uri);
58 QQmlExtensionPlugin::initializeEngine(engine, uri);
64
59
65− ApplicationManager* appManager = static_cast<ApplicationManager*>(applicationManagerSingleton(engine, NULL));
66− engine->addImageProvider(QLatin1String("application"), new ApplicationScreenshotProvider(appManager));
60+ engine->addImageProvider(QLatin1String("application"), new ApplicationScreenshotProvider(ApplicationManager::singleton()));
67}
61}