diff --git a/initialstart/modules/prepare/CMakeLists.txt b/initialstart/modules/prepare/CMakeLists.txt
index 875e2a90..7c6226ab 100644
--- a/initialstart/modules/prepare/CMakeLists.txt
+++ b/initialstart/modules/prepare/CMakeLists.txt
@@ -9,6 +9,8 @@ set(prepareplugin_SRCS
${DBUS_SRCS}
)
+kconfig_add_kcfg_files(prepareplugin_SRCS colorssettings.kcfgc GENERATE_MOC)
+
add_library(prepareplugin ${prepareplugin_SRCS})
target_link_libraries(prepareplugin
diff --git a/initialstart/modules/prepare/colorssettings.kcfg b/initialstart/modules/prepare/colorssettings.kcfg
new file mode 100644
index 00000000..700d803d
--- /dev/null
+++ b/initialstart/modules/prepare/colorssettings.kcfg
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ BreezeLight
+
+
+
+ transparent
+
+
+
+ transparent
+
+
+
+ false
+
+
+
diff --git a/initialstart/modules/prepare/colorssettings.kcfgc b/initialstart/modules/prepare/colorssettings.kcfgc
new file mode 100644
index 00000000..8de459b1
--- /dev/null
+++ b/initialstart/modules/prepare/colorssettings.kcfgc
@@ -0,0 +1,7 @@
+File=colorssettings.kcfg
+ClassName=ColorsSettings
+Mutators=true
+DefaultValueGetters=true
+GenerateProperties=true
+ParentInConstructor=true
+Notifiers=true
diff --git a/initialstart/modules/prepare/package/contents/ui/main.qml b/initialstart/modules/prepare/package/contents/ui/main.qml
index bb30374d..794610e3 100644
--- a/initialstart/modules/prepare/package/contents/ui/main.qml
+++ b/initialstart/modules/prepare/package/contents/ui/main.qml
@@ -113,6 +113,24 @@ Item {
onCurrentValueChanged: Prepare.PrepareUtil.scaling = parseInt(currentValue.substring(0, currentValue.length - 1));
}
}
+
+ FormCard.FormCard {
+ id: darkThemeCard
+ maximumWidth: root.cardWidth
+
+ Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
+
+ FormCard.FormSwitchDelegate {
+ id: darkThemeSwitch
+ text: i18n("Dark Theme")
+ checked: Prepare.PrepareUtil.usingDarkTheme
+ onCheckedChanged: {
+ if (checked !== Prepare.PrepareUtil.usingDarkTheme) {
+ Prepare.PrepareUtil.usingDarkTheme = checked;
+ }
+ }
+ }
+ }
}
}
}
diff --git a/initialstart/modules/prepare/prepareutil.cpp b/initialstart/modules/prepare/prepareutil.cpp
index 09c802d9..7686d8cd 100644
--- a/initialstart/modules/prepare/prepareutil.cpp
+++ b/initialstart/modules/prepare/prepareutil.cpp
@@ -13,6 +13,7 @@
PrepareUtil::PrepareUtil(QObject *parent)
: QObject{parent}
+ , m_colorsSettings{new ColorsSettings(this)}
{
m_brightnessInterface =
new org::kde::Solid::PowerManagement::Actions::BrightnessControl(QStringLiteral("org.kde.Solid.PowerManagement"),
@@ -57,6 +58,9 @@ PrepareUtil::PrepareUtil(QObject *parent)
connect(m_brightnessInterfaceWatcher, &QDBusServiceWatcher::serviceUnregistered, this, [this]() -> void {
Q_EMIT brightnessAvailableChanged();
});
+
+ // set property initially
+ m_usingDarkTheme = m_colorsSettings->colorScheme() == "BreezeDark";
}
int PrepareUtil::scaling() const
@@ -109,6 +113,24 @@ bool PrepareUtil::brightnessAvailable() const
return m_brightnessInterface->isValid();
}
+bool PrepareUtil::usingDarkTheme() const
+{
+ return m_usingDarkTheme;
+}
+
+void PrepareUtil::setUsingDarkTheme(bool usingDarkTheme)
+{
+ // use plasma-apply-colorscheme since it has logic for notifying the shell of changes
+ if (usingDarkTheme) {
+ QProcess::execute("plasma-apply-colorscheme", {QStringLiteral("BreezeDark")});
+ } else {
+ QProcess::execute("plasma-apply-colorscheme", {QStringLiteral("BreezeLight")});
+ }
+
+ m_usingDarkTheme = usingDarkTheme;
+ Q_EMIT usingDarkThemeChanged();
+}
+
void PrepareUtil::fetchBrightness()
{
QDBusPendingReply reply = m_brightnessInterface->brightness();
diff --git a/initialstart/modules/prepare/prepareutil.h b/initialstart/modules/prepare/prepareutil.h
index b4b0781a..e42170ed 100644
--- a/initialstart/modules/prepare/prepareutil.h
+++ b/initialstart/modules/prepare/prepareutil.h
@@ -9,6 +9,7 @@
#include
#include "brightnesscontrolinterface.h"
+#include "colorssettings.h"
class PrepareUtil : public QObject
{
@@ -18,6 +19,7 @@ class PrepareUtil : public QObject
Q_PROPERTY(int brightness READ brightness WRITE setBrightness NOTIFY brightnessChanged);
Q_PROPERTY(int maxBrightness READ maxBrightness NOTIFY maxBrightnessChanged)
Q_PROPERTY(bool brightnessAvailable READ brightnessAvailable NOTIFY brightnessAvailableChanged)
+ Q_PROPERTY(bool usingDarkTheme READ usingDarkTheme WRITE setUsingDarkTheme NOTIFY usingDarkThemeChanged)
public:
PrepareUtil(QObject *parent = nullptr);
@@ -34,11 +36,15 @@ public:
bool brightnessAvailable() const;
+ bool usingDarkTheme() const;
+ void setUsingDarkTheme(bool usingDarkTheme);
+
Q_SIGNALS:
void scalingChanged();
void brightnessChanged();
void maxBrightnessChanged();
void brightnessAvailableChanged();
+ void usingDarkThemeChanged();
private Q_SLOTS:
void fetchBrightness();
@@ -48,7 +54,9 @@ private:
int m_scaling;
int m_brightness;
int m_maxBrightness;
+ bool m_usingDarkTheme;
+ ColorsSettings *m_colorsSettings;
KScreen::ConfigPtr m_config;
org::kde::Solid::PowerManagement::Actions::BrightnessControl *m_brightnessInterface;
QDBusServiceWatcher *m_brightnessInterfaceWatcher;