From 8985aadcf1bc6c0bb76d8b95155fa5287ad74231 Mon Sep 17 00:00:00 2001 From: Nicolas Fella Date: Thu, 15 Dec 2022 22:32:40 +0100 Subject: [PATCH] Process KDBusService before loading QML Otherwise we start loading QML before we attach to an existing instance Not only is this wasteful but it also breaks raising the existing window on X11 since showing a window clears the startup id --- src/main.cpp | 51 ++++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 5cccbc468..a8a7a47b2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -265,6 +265,32 @@ int main(int argc, char *argv[]) #endif QQmlApplicationEngine engine; + +#ifdef HAVE_KDBUSADDONS + KDBusService service(KDBusService::Unique); + service.connect(&service, + &KDBusService::activateRequested, + &RoomManager::instance(), + [&engine](const QStringList &arguments, const QString &workingDirectory) { + Q_UNUSED(workingDirectory); + + QWindow *window = windowFromEngine(&engine); + KWindowSystem::updateStartupId(window); + + WindowController::instance().showAndRaiseWindow(QString()); + + // Open matrix uri + if (arguments.isEmpty()) { + return; + } + auto args = arguments; + args.removeFirst(); + for (const auto &arg : args) { + RoomManager::instance().openResource(arg); + } + }); +#endif + engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); QObject::connect(&engine, &QQmlApplicationEngine::quit, &app, &QCoreApplication::quit); engine.setNetworkAccessManagerFactory(new NetworkAccessManagerFactory()); @@ -294,31 +320,6 @@ int main(int argc, char *argv[]) QDBusConnection::sessionBus().registerObject("/RoomRunner", &runner, QDBusConnection::ExportScriptableContents); #endif -#ifdef HAVE_KDBUSADDONS - KDBusService service(KDBusService::Unique); - service.connect(&service, - &KDBusService::activateRequested, - &RoomManager::instance(), - [&engine](const QStringList &arguments, const QString &workingDirectory) { - Q_UNUSED(workingDirectory); - - QWindow *window = windowFromEngine(&engine); - KWindowSystem::updateStartupId(window); - - WindowController::instance().showAndRaiseWindow(QString()); - - // Open matrix uri - if (arguments.isEmpty()) { - return; - } - auto args = arguments; - args.removeFirst(); - for (const auto &arg : args) { - RoomManager::instance().openResource(arg); - } - }); -#endif - QWindow *window = windowFromEngine(&engine); WindowController::instance().setWindow(window);