From fdb34e9a74e2df6e3526922e1d0b4ad4603bfef1 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Mon, 15 Jun 2015 20:44:54 -0700 Subject: [PATCH] async dbus call --- containments/taskpanel/taskpanel.cpp | 22 +++++++++++++++------- containments/taskpanel/taskpanel.h | 5 +++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/containments/taskpanel/taskpanel.cpp b/containments/taskpanel/taskpanel.cpp index 49dfecb9..5c0fd801 100644 --- a/containments/taskpanel/taskpanel.cpp +++ b/containments/taskpanel/taskpanel.cpp @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include @@ -48,23 +50,29 @@ TaskPanel::~TaskPanel() void TaskPanel::executeScript(const QString &script) { //Plasma::Package p = - qWarning()<<"AAAAAA"< arguments; arguments << QVariant(package().filePath("scripts", script + ".js")); message.setArguments(arguments); - QDBusMessage reply = QDBusConnection::sessionBus().call(message); + QDBusPendingReply asyncCall = QDBusConnection::sessionBus().asyncCall(message); + + QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(asyncCall, this); + QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), + this, SLOT(loadScriptFinishedSlot(QDBusPendingCallWatcher*))); +} + +void TaskPanel::loadScriptFinishedSlot(QDBusPendingCallWatcher *watcher) +{ + QDBusMessage reply = watcher->reply(); if (reply.type() == QDBusMessage::ErrorMessage) { qWarning() << reply.errorMessage(); } else { const int id = reply.arguments().first().toInt(); QDBusConnection::sessionBus().connect(s_kwinService, "/" + QString::number(id), QString(), "print", this, SLOT(print(QString))); QDBusConnection::sessionBus().connect(s_kwinService, "/" + QString::number(id), QString(), "printError", this, SLOT(print(QString))); - message = QDBusMessage::createMethodCall(s_kwinService, "/" + QString::number(id), QString(), "run"); - reply = QDBusConnection::sessionBus().call(message); - if (reply.type() == QDBusMessage::ErrorMessage) { - qWarning() << reply.errorMessage(); - } + QDBusMessage message = QDBusMessage::createMethodCall(s_kwinService, "/" + QString::number(id), QString(), "run"); + //fire blindly the call for now + reply = QDBusConnection::sessionBus().asyncCall(message); } } diff --git a/containments/taskpanel/taskpanel.h b/containments/taskpanel/taskpanel.h index d384cb9d..7b73efdd 100644 --- a/containments/taskpanel/taskpanel.h +++ b/containments/taskpanel/taskpanel.h @@ -24,6 +24,8 @@ #include +class QDBusPendingCallWatcher; + namespace KWayland { namespace Client @@ -51,6 +53,9 @@ public: Q_SIGNALS: void showingDesktopChanged(bool); +private Q_SLOTS: + void loadScriptFinishedSlot(QDBusPendingCallWatcher *watcher); + private: void initWayland(); bool m_showingDesktop;