diff --git a/src/controller.cpp b/src/controller.cpp index 6a15b00f6..644fd0ccb 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -42,10 +42,6 @@ #include "trayicon_sni.h" #endif -#ifdef HAVE_KUNIFIEDPUSH -#include -#endif - using namespace Quotient; Controller::Controller(QObject *parent) @@ -116,9 +112,6 @@ Controller::Controller(QObject *parent) connection->setupPushNotifications(endpoint); } }); - connect(connector, &KUnifiedPush::Connector::messageReceived, this, [this](const QByteArray &data) { - NotificationsManager::instance().postPushNotification(data); - }); connector->registerClient(i18n("Receiving push notifications")); @@ -383,6 +376,19 @@ void Controller::forceRefreshTextDocument(QQuickTextDocument *textDocument, QQui connect(textDocument->textDocument(), SIGNAL(imagesLoaded()), item, SLOT(updateWholeDocument())); } +void Controller::listenForNotifications() +{ +#ifdef HAVE_KUNIFIEDPUSH + auto connector = new KUnifiedPush::Connector(QStringLiteral("org.kde.neochat")); + + connect(connector, &KUnifiedPush::Connector::messageReceived, [](const QByteArray &data) { + NotificationsManager::instance().postPushNotification(data); + }); + + connector->registerClient(i18n("Receiving push notifications")); +#endif +} + void Controller::setApplicationProxy() { NeoChatConfig *cfg = NeoChatConfig::self(); diff --git a/src/controller.h b/src/controller.h index 85d6121e9..b222f4aac 100644 --- a/src/controller.h +++ b/src/controller.h @@ -12,6 +12,10 @@ #include #include +#ifdef HAVE_KUNIFIEDPUSH +#include +#endif + class NeoChatRoom; class TrayIcon; class QQuickTextDocument; @@ -119,6 +123,12 @@ public: */ Q_INVOKABLE void forceRefreshTextDocument(QQuickTextDocument *textDocument, QQuickItem *item); + /** + * @brief Start listening for notifications in dbus-activated mode. + * These notifications will quit the application when closed. + */ + static void listenForNotifications(); + Quotient::AccountRegistry &accounts(); private: diff --git a/src/main.cpp b/src/main.cpp index 295e5d4a8..bc25a9ea6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -166,21 +166,11 @@ int main(int argc, char *argv[]) QStringLiteral("/var/config/fontconfig/conf.d/99-noto-mono-color-emoji.conf")); #endif -#ifdef HAVE_KDBUSADDONS - KDBusService service(KDBusService::Unique); -#endif - ColorSchemer colorScheme; if (!NeoChatConfig::self()->colorScheme().isEmpty()) { colorScheme.apply(NeoChatConfig::self()->colorScheme()); } - qml_register_types_org_kde_neochat(); - qmlRegisterSingletonInstance("org.kde.neochat.config", 1, 0, "Config", NeoChatConfig::self()); - qmlRegisterSingletonInstance("org.kde.neochat.accounts", 1, 0, "AccountRegistry", &Controller::instance().accounts()); - - qmlRegisterUncreatableType("com.github.quotient_im.libquotient", 1, 0, "KeyVerificationSession", {}); - QCommandLineParser parser; parser.setApplicationDescription(i18n("Client for the matrix communication protocol")); parser.addPositionalArgument(QStringLiteral("urls"), i18n("Supports matrix: url scheme")); @@ -198,10 +188,24 @@ int main(int argc, char *argv[]) #ifdef HAVE_KUNIFIEDPUSH if (parser.isSet(dbusActivatedOption)) { + // We want to be replaceable by the main client + KDBusService service(KDBusService::Replace); + + Controller::listenForNotifications(); return QCoreApplication::exec(); } #endif +#ifdef HAVE_KDBUSADDONS + KDBusService service(KDBusService::Unique); +#endif + + qml_register_types_org_kde_neochat(); + qmlRegisterSingletonInstance("org.kde.neochat.config", 1, 0, "Config", NeoChatConfig::self()); + qmlRegisterSingletonInstance("org.kde.neochat.accounts", 1, 0, "AccountRegistry", &Controller::instance().accounts()); + + qmlRegisterUncreatableType("com.github.quotient_im.libquotient", 1, 0, "KeyVerificationSession", {}); + QQmlApplicationEngine engine; #ifdef HAVE_KDBUSADDONS diff --git a/src/notificationsmanager.cpp b/src/notificationsmanager.cpp index b75188f56..9a36e69a2 100644 --- a/src/notificationsmanager.cpp +++ b/src/notificationsmanager.cpp @@ -16,6 +16,10 @@ #include #include +#ifdef HAVE_KIO +#include +#endif + #include "controller.h" #include "neochatconfig.h" #include "neochatconnection.h" @@ -319,10 +323,15 @@ void NotificationsManager::postPushNotification(const QByteArray &message) notification->setText(i18n("Encrypted Message")); } +#ifdef HAVE_KIO auto openAction = notification->addAction(i18n("Open NeoChat")); connect(openAction, &KNotificationAction::activated, this, [=]() { - WindowController::instance().showAndRaiseWindow(notification->xdgActivationToken()); + auto *job = new KIO::ApplicationLauncherJob(KService::serviceByDesktopName(QStringLiteral("org.kde.neochat"))); + job->start(); }); +#endif + + connect(notification, &KNotification::closed, qGuiApp, &QGuiApplication::quit); notification->sendEvent();