diff --git a/session/application.h b/session/application.h index c47508d..afe62c8 100644 --- a/session/application.h +++ b/session/application.h @@ -56,6 +56,11 @@ public slots: m_power.suspend(); } + void startDesktopProcess() + { + m_processManager->startDesktopProcess(); + } + private: void initEnvironments(); void initLanguage(); diff --git a/session/org.cutefish.Session.xml b/session/org.cutefish.Session.xml index 939801f..f940113 100644 --- a/session/org.cutefish.Session.xml +++ b/session/org.cutefish.Session.xml @@ -13,5 +13,8 @@ + + + diff --git a/session/processmanager.cpp b/session/processmanager.cpp index c1443f3..91cee04 100644 --- a/session/processmanager.cpp +++ b/session/processmanager.cpp @@ -57,7 +57,7 @@ ProcessManager::~ProcessManager() void ProcessManager::start() { startWindowManager(); - loadSystemProcess(); + startDaemonProcess(); QTimer::singleShot(100, this, &ProcessManager::loadAutoStartProcess); } @@ -97,12 +97,12 @@ void ProcessManager::startWindowManager() m_waitLoop = nullptr; } -void ProcessManager::loadSystemProcess() +void ProcessManager::startDesktopProcess() { - QList> list; - list << qMakePair(QString("cutefish-settings-daemon"), QStringList()); - list << qMakePair(QString("cutefish-xembedsniproxy"), QStringList()); + // When the cutefish-settings-daemon theme module is loaded, start the desktop. + // In the way, there will be no problem that desktop and launcher can't get wallpaper. + QList> list; // Desktop components list << qMakePair(QString("cutefish-filemanager"), QStringList("--desktop")); list << qMakePair(QString("cutefish-statusbar"), QStringList()); @@ -117,11 +117,30 @@ void ProcessManager::loadSystemProcess() process->start(); process->waitForStarted(); - if (pair.first == "cutefish-settings-daemon") { - QThread::msleep(800); + qDebug() << "Load DE components: " << pair.first << pair.second; + + // Add to map + if (process->exitCode() == 0) { + m_autoStartProcess.insert(pair.first, process); + } else { + process->deleteLater(); } + } +} - qDebug() << "Load DE components: " << pair.first << pair.second; +void ProcessManager::startDaemonProcess() +{ + QList> list; + list << qMakePair(QString("cutefish-settings-daemon"), QStringList()); + list << qMakePair(QString("cutefish-xembedsniproxy"), QStringList()); + + for (QPair pair : list) { + QProcess *process = new QProcess; + process->setProcessChannelMode(QProcess::ForwardedChannels); + process->setProgram(pair.first); + process->setArguments(pair.second); + process->start(); + process->waitForStarted(); // Add to map if (process->exitCode() == 0) { diff --git a/session/processmanager.h b/session/processmanager.h index 8aa859a..8054c3c 100644 --- a/session/processmanager.h +++ b/session/processmanager.h @@ -38,7 +38,8 @@ public: void logout(); void startWindowManager(); - void loadSystemProcess(); + void startDesktopProcess(); + void startDaemonProcess(); void loadAutoStartProcess(); bool nativeEventFilter(const QByteArray & eventType, void * message, long * result) override; diff --git a/settings-daemon/theme/thememanager.cpp b/settings-daemon/theme/thememanager.cpp index 09d4d3b..7cef2a5 100644 --- a/settings-daemon/theme/thememanager.cpp +++ b/settings-daemon/theme/thememanager.cpp @@ -19,6 +19,8 @@ #include "thememanager.h" #include "themeadaptor.h" + +#include #include #include @@ -64,6 +66,13 @@ ThemeManager::ThemeManager(QObject *parent) // Start the DE and need to update the settings again. initGtkConfig(); + + // Start desktop UI component. + QDBusInterface sessionInterface("org.cutefish.Session", "/Session", "org.cutefish.Session", + QDBusConnection::sessionBus()); + if (sessionInterface.isValid()) { + sessionInterface.call("startDesktopProcess"); + } } bool ThemeManager::isDarkMode()