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