mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
initialstart: Add dark mode switch
This commit is contained in:
parent
7fd6a1a8a7
commit
0347ac1453
6 changed files with 82 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
25
initialstart/modules/prepare/colorssettings.kcfg
Normal file
25
initialstart/modules/prepare/colorssettings.kcfg
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
||||
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
|
||||
<kcfgfile name="kdeglobals"/>
|
||||
<group name="General">
|
||||
<entry name="colorScheme" key="ColorScheme" type="String">
|
||||
<label>Color scheme name</label>
|
||||
<default>BreezeLight</default>
|
||||
</entry>
|
||||
<entry name="accentColor" key="AccentColor" type="Color">
|
||||
<label>Accent color</label>
|
||||
<default>transparent</default>
|
||||
</entry>
|
||||
<entry name="lastUsedCustomAccentColor" key="LastUsedCustomAccentColor" type="Color">
|
||||
<label>The last used custom accent color before user switched to wallpaper generated color or default color</label>
|
||||
<default>transparent</default>
|
||||
</entry>
|
||||
<entry name="accentColorFromWallpaper" key="accentColorFromWallpaper" type="Bool">
|
||||
<label>Whether accent color from wallpaper should be applied</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
</group>
|
||||
</kcfg>
|
||||
7
initialstart/modules/prepare/colorssettings.kcfgc
Normal file
7
initialstart/modules/prepare/colorssettings.kcfgc
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
File=colorssettings.kcfg
|
||||
ClassName=ColorsSettings
|
||||
Mutators=true
|
||||
DefaultValueGetters=true
|
||||
GenerateProperties=true
|
||||
ParentInConstructor=true
|
||||
Notifiers=true
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<int> reply = m_brightnessInterface->brightness();
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#include <kscreen/config.h>
|
||||
|
||||
#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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue