Skip to content

Commit 1832d7b

Browse files
committed
Prevent settings saving on no changes found
1 parent 21b4494 commit 1832d7b

2 files changed

Lines changed: 18 additions & 10 deletions

File tree

active_window_checker.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ def listen_switch_events(callback, close_manager: AppCloseManager):
193193
ole32.CoUninitialize()
194194

195195

196+
@dataclass
196197
class WinTrackerSettings:
197198
"""
198199
Specifies interaction with windows events

settings.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from copy import deepcopy
12
from dataclasses import dataclass
23
from typing import Callable, TypeVar, TextIO
34
from active_window_checker import WinTrackerSettings
@@ -31,35 +32,41 @@ def __init__(self):
3132
super().__init__(ConfigSyncer("settings", UserSettings()))
3233
self._syncer.on_file_reloaded = self.on_settings_changed
3334
self._change_handlers: list[tuple[OPTION_PATH, OPTION_CHANGE_HANDLER]] = list()
34-
self._old_data = None
35+
self._old_data = deepcopy(self.settings)
36+
self._loaded_data = deepcopy(self.settings)
3537

3638
def setup(self):
3739
self._syncer.start()
3840
self._syncer.preserve_on_update()
3941

4042
@property
41-
def settings(self):
43+
def settings(self) -> UserSettings:
4244
return self._syncer.data
4345

4446
def on_settings_changed(self):
45-
if self._old_data is None:
46-
self._old_data = self._syncer.data
47-
return
48-
47+
self._loaded_data = deepcopy(self.settings)
4948
for path, handler in self._change_handlers:
50-
new_value = path(self._syncer.data)
49+
new_value = path(self.settings)
5150
if path(self._old_data) != new_value:
5251
handler(new_value)
52+
self._old_data = deepcopy(self.settings)
5353

54-
self._old_data = self._syncer.data
54+
def save(self):
55+
if self._loaded_data != self.settings:
56+
super().save()
57+
self._loaded_data = deepcopy(self.settings)
58+
self._old_data = deepcopy(self.settings)
5559

5660
def add_option_change_handler(self,
5761
path: OPTION_PATH,
58-
handler: OPTION_CHANGE_HANDLER):
62+
handler: OPTION_CHANGE_HANDLER,
63+
initial=False):
5964
self._change_handlers.append((path, handler))
65+
if initial:
66+
handler(path(self._syncer.data))
6067

6168

62-
class ConfigSyncer(DataFileSyncer):
69+
class ConfigSyncer(DataFileSyncer[UserSettings]):
6370
JSON_DUMPER_KWARGS = dict(
6471
strip_privates=True,
6572
strip_properties=True

0 commit comments

Comments
 (0)