diff --git a/src/appearance.cpp b/src/appearance.cpp index f43558b..e77f433 100644 --- a/src/appearance.cpp +++ b/src/appearance.cpp @@ -25,6 +25,9 @@ #include #include +#include +#include + Appearance::Appearance(QObject *parent) : QObject(parent) , m_interface("org.cutefish.Settings", @@ -32,16 +35,22 @@ Appearance::Appearance(QObject *parent) "org.cutefish.Theme", QDBusConnection::sessionBus()) , m_dockSettings(new QSettings(QSettings::UserScope, "cutefishos", "dock")) + , m_kwinSettings(new QSettings(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/kwinrc", + QSettings::IniFormat)) , m_dockConfigWacher(new QFileSystemWatcher(this)) , m_dockIconSize(0) , m_dockDirection(0) , m_dockVisibility(0) , m_fontPointSize(11) + , m_systemEffects(false) { + m_kwinSettings->beginGroup("Compositing"); + m_dockIconSize = m_dockSettings->value("IconSize").toInt(); m_dockDirection = m_dockSettings->value("Direction").toInt(); m_dockVisibility = m_dockSettings->value("Visibility").toInt(); m_dockRoundedWindow = m_dockSettings->value("RoundedWindow").toBool(); + m_systemEffects = !m_kwinSettings->value("OpenGLIsUnsafe", false).toBool(); m_dockConfigWacher->addPath(m_dockSettings->fileName()); connect(m_dockConfigWacher, &QFileSystemWatcher::fileChanged, this, [=] { @@ -209,3 +218,19 @@ void Appearance::setDevicePixelRatio(double value) iface.call("setDevicePixelRatio", value); } } + +bool Appearance::systemEffects() const +{ + return m_systemEffects; +} + +void Appearance::setSystemEffects(bool systemEffects) +{ + if (m_systemEffects != systemEffects) { + m_systemEffects = systemEffects; + m_kwinSettings->setValue("OpenGLIsUnsafe", !systemEffects); + m_kwinSettings->sync(); + QDBusInterface("org.kde.KWin", "/KWin").call("reconfigure"); + emit systemEffectsChanged(); + } +} diff --git a/src/appearance.h b/src/appearance.h index 4c4e79a..170ed36 100644 --- a/src/appearance.h +++ b/src/appearance.h @@ -35,6 +35,7 @@ class Appearance : public QObject Q_PROPERTY(bool dimsWallpaper READ dimsWallpaper WRITE setDimsWallpaper NOTIFY dimsWallpaperChanged) Q_PROPERTY(double devicePixelRatio READ devicePixelRatio WRITE setDevicePixelRatio NOTIFY devicePixelRatioChanged) Q_PROPERTY(bool dockRoundedWindow READ dockRoundedWindow WRITE setDockRoundedWindow NOTIFY dockRoundedWindowChanged) + Q_PROPERTY(bool systemEffects READ systemEffects WRITE setSystemEffects NOTIFY systemEffectsChanged) public: explicit Appearance(QObject *parent = nullptr); @@ -67,6 +68,9 @@ public: double devicePixelRatio() const; Q_INVOKABLE void setDevicePixelRatio(double value); + bool systemEffects() const; + void setSystemEffects(bool systemEffects); + signals: void dockIconSizeChanged(); void dockDirectionChanged(); @@ -75,10 +79,12 @@ signals: void dimsWallpaperChanged(); void devicePixelRatioChanged(); void dockRoundedWindowChanged(); + void systemEffectsChanged(); private: QDBusInterface m_interface; QSettings *m_dockSettings; + QSettings *m_kwinSettings; QFileSystemWatcher *m_dockConfigWacher; bool m_dockRoundedWindow; @@ -86,6 +92,8 @@ private: int m_dockDirection; int m_dockVisibility; int m_fontPointSize; + + bool m_systemEffects; }; #endif // APPEARANCE_H diff --git a/src/language.cpp b/src/language.cpp index c261584..54f3437 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -26,7 +26,7 @@ #include static const QStringList supportList = {"en_US", "en_GB", "de_DE", "cs_CZ", "es_ES", - "es_MX", "fa_IR", "fi_FI", "fr_FR", + "es_MX", "ar_AA", "bg_BG", "fa_IR", "fi_FI", "fr_FR", "uk_UA", "uz_UZ", "hu_HU", "hi_IN", "id_ID" "it_IT", "ja_JP", "nb_NO", "ne_NP", "pl_PL", "pt_BR", "pt_PT", "ru_RU", "sv_SE", "so", diff --git a/src/qml/Appearance/Main.qml b/src/qml/Appearance/Main.qml index 19c0392..75f7896 100644 --- a/src/qml/Appearance/Main.qml +++ b/src/qml/Appearance/Main.qml @@ -91,6 +91,25 @@ ItemPage { rightPadding: 0 } } + + RowLayout { + Label { + text: qsTr("System effects") + Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft + } + + Item { + Layout.fillWidth: true + } + + Switch { + checked: appearance.systemEffects + Layout.fillHeight: true + Layout.alignment: Qt.AlignVCenter | Qt.AlignRight + onCheckedChanged: appearance.systemEffects = checked + rightPadding: 0 + } + } } RoundedItem { diff --git a/translations/en_US.ts b/translations/en_US.ts index d8411c1..7b72c78 100644 --- a/translations/en_US.ts +++ b/translations/en_US.ts @@ -137,7 +137,12 @@ - + + System effects + + + + Accent color diff --git a/translations/zh_CN.ts b/translations/zh_CN.ts index 98c3a4e..ab68a36 100644 --- a/translations/zh_CN.ts +++ b/translations/zh_CN.ts @@ -137,7 +137,12 @@ 在深色模式下调暗壁纸 - + + System effects + 系统特效 + + + Accent color 强调色