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()