diff --git a/src/common/dbus/org.kde.ActivityManager.Application.xml b/src/common/dbus/org.kde.ActivityManager.Application.xml
new file mode 100644
--- /dev/null
+++ b/src/common/dbus/org.kde.ActivityManager.Application.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/lib/core/CMakeLists.txt b/src/lib/core/CMakeLists.txt
--- a/src/lib/core/CMakeLists.txt
+++ b/src/lib/core/CMakeLists.txt
@@ -58,6 +58,13 @@
resources_linking_interface
)
+qt5_add_dbus_interface (
+ KActivities_LIB_SRCS
+
+ ${KACTIVITIES_CURRENT_ROOT_SOURCE_DIR}/src/common/dbus/org.kde.ActivityManager.Application.xml
+ application_interface
+ )
+
add_library (
KF5Activities SHARED
${KActivities_LIB_SRCS}
diff --git a/src/lib/core/manager_p.h b/src/lib/core/manager_p.h
--- a/src/lib/core/manager_p.h
+++ b/src/lib/core/manager_p.h
@@ -22,6 +22,7 @@
#include
+#include "application_interface.h"
#include "activities_interface.h"
#include "resources_interface.h"
#include "resources_linking_interface.h"
@@ -60,6 +61,7 @@
static Manager *s_instance;
+ Service::Application *const m_service;
Service::Activities *const m_activities;
Service::Resources *const m_resources;
Service::ResourcesLinking *const m_resourcesLinking;
diff --git a/src/lib/core/manager_p.cpp b/src/lib/core/manager_p.cpp
--- a/src/lib/core/manager_p.cpp
+++ b/src/lib/core/manager_p.cpp
@@ -41,6 +41,7 @@
Manager::Manager()
: QObject()
, m_watcher(KAMD_DBUS_SERVICE, QDBusConnection::sessionBus())
+ , m_service(new KAMD_DBUS_CLASS_INTERFACE(Application, Application, this))
, m_activities(new KAMD_DBUS_CLASS_INTERFACE(Activities, Activities, this))
, m_resources(new KAMD_DBUS_CLASS_INTERFACE(Resources, Resources, this))
, m_resourcesLinking(new KAMD_DBUS_CLASS_INTERFACE(Resources/Linking, ResourcesLinking, this))
@@ -107,15 +108,10 @@
emit serviceStatusChanged(m_serviceRunning);
if (m_serviceRunning) {
- QDBusInterface service(KAMD_DBUS_SERVICE,
- "/ActivityManager",
- "org.kde.ActivityManager.Application",
- QDBusConnection::sessionBus(),
- Q_NULLPTR);
-
using namespace kamd::utils;
+
continue_with(
- DBusFuture::asyncCall(&service, "serviceVersion"),
+ DBusFuture::fromReply(m_service->serviceVersion()),
[this] (const optional_view &serviceVersion) {
// Test whether the service is older than the library.
// If it is, we need to end this
diff --git a/src/service/Application.h b/src/service/Application.h
--- a/src/service/Application.h
+++ b/src/service/Application.h
@@ -38,6 +38,7 @@
*/
class Application : public QApplication {
Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "org.kde.ActivityManager.Application")
public:
Application(int &argc, char **argv);
diff --git a/src/utils/dbusfuture_p.h b/src/utils/dbusfuture_p.h
--- a/src/utils/dbusfuture_p.h
+++ b/src/utils/dbusfuture_p.h
@@ -157,6 +157,17 @@
return valueFutureInterface->start();
}
+template
+QFuture<_Result>
+fromReply(const QDBusPendingReply<_Result> &reply)
+{
+ using namespace detail;
+
+ auto callFutureInterface = new DBusCallFutureInterface<_Result>(reply);
+
+ return callFutureInterface->start();
+}
+
QFuture fromVoid();
} // namespace DBusFuture