diff --git a/gui.py b/gui.py index b7878aa..1fe093b 100644 --- a/gui.py +++ b/gui.py @@ -1204,6 +1204,7 @@ class SettingsPanel: self._priority_list.insert("end", game_name) self._priority_list.see("end") self._settings.priority.append(game_name) + self._settings.alter() else: # already there, set the selection on it self._priority_list.selection_set(existing_idx) @@ -1230,6 +1231,7 @@ class SettingsPanel: self._priority_list.see(swap_idx) p = self._settings.priority p[idx], p[swap_idx] = p[swap_idx], p[idx] + self._settings.alter() def priority_delete(self) -> None: idx: int | None = self._priority_idx() @@ -1237,6 +1239,7 @@ class SettingsPanel: return self._priority_list.delete(idx) del self._settings.priority[idx] + self._settings.alter() def priority_only(self) -> None: self._settings.priority_only = bool(self._vars["priority_only"].get()) @@ -1250,6 +1253,7 @@ class SettingsPanel: exclude = self._settings.exclude if game_name not in exclude: exclude.add(game_name) + self._settings.alter() # insert it alphabetically for i, item in enumerate(self._exclude_list.get(0, "end")): if game_name < item: @@ -1279,6 +1283,7 @@ class SettingsPanel: item: str = self._exclude_list.get(idx) if item in self._settings.exclude: self._settings.exclude.discard(item) + self._settings.alter() self._exclude_list.delete(idx) diff --git a/main.py b/main.py index b10aee8..adf17f9 100644 --- a/main.py +++ b/main.py @@ -180,7 +180,7 @@ loop.run_until_complete(client.gui.wait_until_closed()) # save settings # NOTE: we have to do it after wait_until_closed, # because the user can alter settings between shutdown and closing the window -client.settings.save() +client.settings.save(force=True) client.gui.stop() client.gui.close_window() loop.run_until_complete(loop.shutdown_asyncgens()) diff --git a/settings.py b/settings.py index 60b2988..0a433cf 100644 --- a/settings.py +++ b/settings.py @@ -73,6 +73,9 @@ class Settings: def __delattr__(self, name: str, /) -> None: raise RuntimeError("settings can't be deleted") - def save(self) -> None: - if self._altered: + def alter(self) -> None: + self._altered = True + + def save(self, *, force: bool = False) -> None: + if self._altered or force: json_save(SETTINGS_PATH, self._settings)