on xenial help sign in
Added applicationdbus adaptor for adding child surfaces to mir surfaces
commit3d2e4e5ddeb77105e4106a6e23e5c106bf5ba2b9 authorNick Dedekind <nicholas.dedekind@gmail.com> dateSat 19 Jul 2014, 12:43 (12 years ago) parent01aa324
6 files changed+122−10
tests/mocks/Unity/Application/ApplicationDBusAdaptor.cpp+53 tests/mocks/Unity/Application/ApplicationDBusAdaptor.h+43 tests/mocks/Unity/Application/ApplicationManager.cpp+17 tests/mocks/Unity/Application/ApplicationManager.h+4 tests/mocks/Unity/Application/CMakeLists.txt+3−2 tests/mocks/Unity/Application/plugin.cpp+2−8
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 @@
1515 */
1616
1717#include "ApplicationManager.h"
18+#include "ApplicationDBusAdaptor.h"
1819#include "ApplicationInfo.h"
1920#include "MirSurfaceItem.h"
2021
@@ -27,6 +28,22 @@
2728#include <QQmlComponent>
2829#include <QTimer>
2930#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+}
3047
3148ApplicationManager::ApplicationManager(QObject *parent)
3249 : ApplicationManagerInterface(parent)
tests/mocks/Unity/Application/ApplicationManager.h+4
@@ -53,6 +53,8 @@ class ApplicationManager : public ApplicationManagerInterface {
5353 ApplicationManager(QObject *parent = NULL);
5454 virtual ~ApplicationManager();
5555
56+ static ApplicationManager *singleton();
57+
5658 enum MoreRoles {
5759 RoleSurface = RoleScreenshot+1,
5860 RoleFullscreen,
@@ -141,6 +143,8 @@ class ApplicationManager : public ApplicationManagerInterface {
141143 QQuickItem *m_sideStage;
142144
143145 int m_rightMargin;
146+
147+ static ApplicationManager *the_application_manager;
144148};
145149
146150Q_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)
22
33set(FakeUnityApplicationQml_SOURCES
44 plugin.cpp
5+ ApplicationDBusAdaptor.cpp
56 ApplicationInfo.cpp
67 ApplicationImage.cpp
78 ApplicationManager.cpp
@@ -17,8 +18,8 @@ add_library(FakeUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
1718add_library(NonMirUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
1819set_target_properties(NonMirUnityApplicationQml PROPERTIES OUTPUT_NAME FakeUnityApplicationQml)
1920
20−qt5_use_modules(FakeUnityApplicationQml Core Quick)
21−qt5_use_modules(NonMirUnityApplicationQml Core Quick)
21+qt5_use_modules(FakeUnityApplicationQml Core Quick DBus)
22+qt5_use_modules(NonMirUnityApplicationQml Core Quick DBus)
2223
2324add_unity8_mock(Unity.Application 0.1 Unity/Application PREFIX mocks TARGETS FakeUnityApplicationQml)
2425add_unity8_mock(Unity.Application 0.1 Unity/Application
tests/mocks/Unity/Application/plugin.cpp+2−8
@@ -25,15 +25,10 @@
2525#include <qqml.h>
2626#include <QQmlEngine>
2727
28−ApplicationManager *s_appManager = 0;
29−
3028static QObject* applicationManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
3129 Q_UNUSED(engine);
3230 Q_UNUSED(scriptEngine);
33− if (!s_appManager) {
34− s_appManager = new ApplicationManager();
35− }
36− return s_appManager;
31+ return ApplicationManager::singleton();
3732}
3833
3934static QObject* surfaceManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
@@ -62,6 +57,5 @@ void FakeUnityApplicationQmlPlugin::initializeEngine(QQmlEngine *engine, const c
6257{
6358 QQmlExtensionPlugin::initializeEngine(engine, uri);
6459
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()));
6761}