From 5c97923588bf163989fe110561c6015c45739a4d Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Sun, 2 Aug 2026 13:37:09 +0545 Subject: [PATCH] fix(config): skip unrelated files and no-op reloads --- src/services/config.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/services/config.py b/src/services/config.py index 103c1cf..f0fa90f 100644 --- a/src/services/config.py +++ b/src/services/config.py @@ -181,6 +181,11 @@ class ConfigService: logger.error(f"[ConfigService] Failed to monitor {file_path}: {e}") def _on_file_changed(self, monitor, file, _other_file, event_type, file_path: str): + # The parent-directory monitor fires for every file in the config dir + # (.swp, lockfiles, desktop.toml, ...). Only react to the config file + # itself so unrelated files don't trigger a reload + callback fan-out. + if file.get_path() != self._config_file: + return # Trigger on various change events to be more robust across editors/OSs valid_events = [ Gio.FileMonitorEvent.CHANGES_DONE_HINT, @@ -198,6 +203,11 @@ class ConfigService: old_config = self._last_notified_config.copy() self._load_config() + if self._config == old_config: + # Nothing actually changed (e.g. mtime-only touch): skip the + # callback fan-out. + return False + # Always notify listeners on reload request to be safe alive_callbacks = [] for ref in self._reload_callbacks: