diff --git a/qml/Shortcuts.qml b/qml/Shortcuts.qml
index 53835bdc..c67e37b6 100644
--- a/qml/Shortcuts.qml
+++ b/qml/Shortcuts.qml
@@ -79,6 +79,7 @@ Popup {
| Tools |
| %1+W | show wavelength calculator |
| %1+D | toggle dark mode |
+ | %1+Shift+D | toggle system brightness |
| F1 | show keys combinations |
| F2 | show info |
| F3 | check for update |
diff --git a/qml/menu/Top.qml b/qml/menu/Top.qml
index f4910b7b..c7b493af 100644
--- a/qml/menu/Top.qml
+++ b/qml/menu/Top.qml
@@ -210,13 +210,24 @@ MenuBar {
MenuItem {
id: darkModeSelect
text: qsTr("&Dark Mode")
- shortcut: "Ctrl+D"
+ shortcut: applicationAppearance.useSystemBrightness ? null : "Ctrl+D"
checkable: true
+ visible: applicationAppearance.useSystemBrightness ? false : true
checked: applicationAppearance.darkMode
onCheckedChanged: {
applicationAppearance.darkMode = darkModeSelect.checked;
}
}
+ MenuItem {
+ id: systemBrightness
+ text: qsTr("&Use system brightness")
+ shortcut: "Ctrl+Shift+D"
+ checkable: true
+ checked: applicationAppearance.useSystemBrightness
+ onCheckedChanged: {
+ applicationAppearance.useSystemBrightness = systemBrightness.checked;
+ }
+ }
MenuItem {
id: calculator
text: qsTr("&Calculator")
diff --git a/src/common/appearance.cpp b/src/common/appearance.cpp
index 6f65a009..c739d648 100644
--- a/src/common/appearance.cpp
+++ b/src/common/appearance.cpp
@@ -43,7 +43,8 @@ bool Appearance::darkMode() const
void Appearance::setDarkMode(const bool &setDark)
{
- if (setDark == darkMode()) {
+ if (setDark == darkMode())
+ {
return;
}
auto store = settings();
@@ -53,6 +54,29 @@ void Appearance::setDarkMode(const bool &setDark)
emit darkModeChanged(setDark);
}
+bool Appearance::useSystemBrightness() const
+{
+ auto store = settings();
+ Q_ASSERT(store);
+
+ auto value = store->value("useSystemBrightness");
+ return value.isValid() ? value.toBool() : true;
+}
+
+void Appearance::setUseSystemBrightness(const bool &setSystemBrightness)
+{
+ if (setSystemBrightness == useSystemBrightness())
+ {
+ return;
+ }
+ auto store = settings();
+ Q_ASSERT(store);
+
+ store->setValue("useSystemBrightness", setSystemBrightness);
+ emit useSystemBrightnessChanged(setSystemBrightness);
+ setDarkModeFromSystem();
+}
+
bool Appearance::experimentFunctions() const
{
auto store = settings();
@@ -64,7 +88,8 @@ bool Appearance::experimentFunctions() const
void Appearance::setExperimentFunctions(bool value)
{
- if (value == experimentFunctions()) {
+ if (value == experimentFunctions())
+ {
return;
}
auto store = settings();
@@ -108,10 +133,13 @@ int Appearance::cursorOffset() const
bool Appearance::setDarkModeFromSystem()
{
- bool darkMode = darkModeFromSystem();
+ if (useSystemBrightness())
+ {
+ bool darkMode = darkModeFromSystem();
- setDarkMode(darkMode);
- return darkMode;
+ setDarkMode(darkMode);
+ }
+ return darkMode();
}
Settings *Appearance::settings() const
@@ -123,5 +151,6 @@ bool Appearance::darkModeFromSystem() const
{
QColor middleGrey(127, 127, 127);
auto app = qobject_cast(QGuiApplication::instance());
- return middleGrey.lightnessF() > app->palette().color(QPalette::Window).lightnessF();
+ return middleGrey.lightnessF()
+ > app->palette().color(QPalette::Window).lightnessF();
}
diff --git a/src/common/appearance.h b/src/common/appearance.h
index 65b5cc8c..2d185ca5 100644
--- a/src/common/appearance.h
+++ b/src/common/appearance.h
@@ -25,6 +25,7 @@ class Appearance : public QObject
{
Q_OBJECT
Q_PROPERTY(bool darkMode READ darkMode WRITE setDarkMode NOTIFY darkModeChanged)
+ Q_PROPERTY(bool useSystemBrightness READ useSystemBrightness WRITE setUseSystemBrightness NOTIFY useSystemBrightnessChanged)
Q_PROPERTY(bool showAboutOnStartup READ showAboutOnStartup CONSTANT)
Q_PROPERTY(bool experimentFunctions READ experimentFunctions WRITE setExperimentFunctions NOTIFY
experimentFunctionsChanged)
@@ -44,6 +45,9 @@ class Appearance : public QObject
bool darkMode() const;
void setDarkMode(const bool &setDark);
+ bool useSystemBrightness() const;
+ void setUseSystemBrightness(const bool &setSystemBrightness);
+
bool experimentFunctions() const;
void setExperimentFunctions(bool value);
@@ -58,6 +62,7 @@ public slots:
signals:
void darkModeChanged(bool);
+ void useSystemBrightnessChanged(bool);
void experimentFunctionsChanged(bool);
void visibilityChanged();