diff --git a/app/settings/universalsettings.cpp b/app/settings/universalsettings.cpp index 1871e653e..54a45c653 100644 --- a/app/settings/universalsettings.cpp +++ b/app/settings/universalsettings.cpp @@ -32,10 +32,13 @@ // KDE #include +#include #define KWINMETAFORWARDTOLATTESTRING "org.kde.lattedock,/Latte,org.kde.LatteDock,activateLauncherMenu" #define KWINMETAFORWARDTOPLASMASTRING "org.kde.plasmashell,/PlasmaShell,org.kde.PlasmaShell,activateLauncherMenu" +#define KWINCOLORSSCRIPT "kwin/scripts/lattewindowcolors" + namespace Latte { UniversalSettings::UniversalSettings(KSharedConfig::Ptr config, QObject *parent) @@ -83,6 +86,17 @@ void UniversalSettings::load() //! load configuration loadConfig(); + //! Track KWin Colors Script Presence + updateColorsScriptIsPresent(); + + QStringList colorsScriptPaths = Layouts::Importer::standardPathsFor(KWINCOLORSSCRIPT); + for(auto path: colorsScriptPaths) { + KDirWatch::self()->addDir(path); + } + + connect(KDirWatch::self(), &KDirWatch::dirty, this, &UniversalSettings::colorsScriptChanged); + connect(KDirWatch::self(), &KDirWatch::created, this, &UniversalSettings::colorsScriptChanged); + //! this is needed to inform globalshortcuts to update its modifiers tracking emit metaPressAndHoldEnabledChanged(); } @@ -285,6 +299,35 @@ void UniversalSettings::setCanDisableBorders(bool enable) emit canDisableBordersChanged(); } +bool UniversalSettings::colorsScriptIsPresent() const +{ + return m_colorsScriptIsPresent; +} + +void UniversalSettings::setColorsScriptIsPresent(bool present) +{ + if (m_colorsScriptIsPresent == present) { + return; + } + + m_colorsScriptIsPresent = present; + emit colorsScriptIsPresentChanged(); +} + +void UniversalSettings::updateColorsScriptIsPresent() +{ + setColorsScriptIsPresent(!Layouts::Importer::standardPath(KWINCOLORSSCRIPT).isEmpty()); +} + +void UniversalSettings::colorsScriptChanged(const QString &file) +{ + if (!file.endsWith(KWINCOLORSSCRIPT)) { + return; + } + + updateColorsScriptIsPresent(); +} + bool UniversalSettings::metaForwardedToLatte() const { return kwin_metaForwardedToLatte(); diff --git a/app/settings/universalsettings.h b/app/settings/universalsettings.h index 6f182e2e1..2ace19e8f 100644 --- a/app/settings/universalsettings.h +++ b/app/settings/universalsettings.h @@ -54,6 +54,7 @@ class UniversalSettings : public QObject { Q_OBJECT Q_PROPERTY(bool autostart READ autostart WRITE setAutostart NOTIFY autostartChanged) + Q_PROPERTY(bool colorsScriptIsPresent READ colorsScriptIsPresent NOTIFY colorsScriptIsPresentChanged) Q_PROPERTY(bool showInfoWindow READ showInfoWindow WRITE setShowInfoWindow NOTIFY showInfoWindowChanged) Q_PROPERTY(QString currentLayoutName READ currentLayoutName WRITE setCurrentLayoutName NOTIFY currentLayoutNameChanged) @@ -76,6 +77,8 @@ public: bool canDisableBorders() const; void setCanDisableBorders(bool enable); + bool colorsScriptIsPresent() const; + bool metaForwardedToLatte() const; void forwardMetaToLatte(bool forward); @@ -127,6 +130,7 @@ public slots: signals: void autostartChanged(); void canDisableBordersChanged(); + void colorsScriptIsPresentChanged(); void currentLayoutNameChanged(); void downloadWindowSizeChanged(); void lastNonAssignedLayoutNameChanged(); @@ -147,17 +151,23 @@ private slots: void saveConfig(); void saveScalesConfig(); + void updateColorsScriptIsPresent(); + void colorsScriptChanged(const QString &file); + private: void cleanupSettings(); bool kwin_metaForwardedToLatte() const; void kwin_forwardMetaToLatte(bool forward); + void setColorsScriptIsPresent(bool present); + Types::LayoutsMemoryUsage layoutsMemoryUsage() const; void setLayoutsMemoryUsage(Types::LayoutsMemoryUsage layoutsMemoryUsage); private: bool m_canDisableBorders{false}; + bool m_colorsScriptIsPresent{false}; bool m_metaPressAndHoldEnabled{true}; bool m_showInfoWindow{true};