Skip to content

Commit

Permalink
kwin/effect: reload config on change
Browse files Browse the repository at this point in the history
  • Loading branch information
taj-ny committed Jan 25, 2025
1 parent c3f69eb commit 1527751
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 4 deletions.
30 changes: 26 additions & 4 deletions src/kwin/effect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ Effect::Effect()
#endif

reconfigure(ReconfigureAll);

if (!QFile::exists(configFile)) {
QFile(configFile).open(QIODevice::WriteOnly);
}

m_configFileWatcher.addPath(configFile);
m_configFileWatcher.addPath(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
connect(&m_configFileWatcher, &QFileSystemWatcher::directoryChanged, this, &Effect::slotConfigDirectoryChanged);
connect(&m_configFileWatcher, &QFileSystemWatcher::fileChanged, this, &Effect::slotConfigFileChanged);
}

Effect::~Effect()
Expand All @@ -30,13 +39,26 @@ Effect::~Effect()
}
}

void Effect::reconfigure(ReconfigureFlags flags)
void Effect::slotConfigFileChanged()
{
Q_UNUSED(flags)
if (!m_configFileWatcher.files().contains(configFile)) {
m_configFileWatcher.addPath(configFile);
}

if (!QFile::exists(configFile)) {
QFile(configFile).open(QIODevice::WriteOnly);
reconfigure(ReconfigureAll);
}

void Effect::slotConfigDirectoryChanged()
{
if (!m_configFileWatcher.files().contains(configFile) && QFile::exists(configFile)) {
m_configFileWatcher.addPath(configFile);
reconfigure(ReconfigureAll);
}
}

void Effect::reconfigure(ReconfigureFlags flags)
{
Q_UNUSED(flags)

try {
auto gestureRecognizer = YAML::LoadFile(configFile.toStdString())["touchpad"].as<std::shared_ptr<libgestures::GestureRecognizer>>();
Expand Down
7 changes: 7 additions & 0 deletions src/kwin/effect.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
#include "impl/kwinwindowinfoprovider.h"
#include "inputfilter.h"

#include <QFileSystemWatcher>

class Effect : public KWin::Effect
{
public:
Expand All @@ -16,6 +18,11 @@ class Effect : public KWin::Effect

void reconfigure(ReconfigureFlags flags) override;

private slots:
void slotConfigFileChanged();
void slotConfigDirectoryChanged();

private:
std::unique_ptr<GestureInputEventFilter> m_inputEventFilter = std::make_unique<GestureInputEventFilter>();
QFileSystemWatcher m_configFileWatcher;
};

0 comments on commit 1527751

Please sign in to comment.