From 9917464d4ed177e10baf1a998e7f0df7b34a35b8 Mon Sep 17 00:00:00 2001 From: Jamie Gravendeel Date: Sun, 30 Nov 2025 22:19:24 +0100 Subject: [PATCH] window: Store filter info in GSettings --- cartridges/ui/window.py | 26 +++++++++++++++-------- data/page.kramo.Cartridges.gschema.xml.in | 13 ++++++++++++ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/cartridges/ui/window.py b/cartridges/ui/window.py index c10af5b..de06677 100644 --- a/cartridges/ui/window.py +++ b/cartridges/ui/window.py @@ -40,9 +40,6 @@ class Window(Adw.ApplicationWindow): search_text = GObject.Property(type=str) show_hidden = GObject.Property(type=bool, default=False) - _sort_prop = "last-played" - _invert_sort = True - @GObject.Property(type=Gio.ListStore) def games(self) -> Gio.ListStore: """Model of the user's games.""" @@ -58,6 +55,7 @@ class Window(Adw.ApplicationWindow): "width": "default-width", "height": "default-height", "is-maximized": "maximized", + "show-hidden": "show-hidden", }.items(): state_settings.bind(key, self, name, Gio.SettingsBindFlags.DEFAULT) @@ -68,7 +66,12 @@ class Window(Adw.ApplicationWindow): self.add_action(Gio.PropertyAction.new("show-hidden", self, "show-hidden")) self.add_action_entries(( ("search", lambda *_: self.search_entry.grab_focus()), - ("sort", self._sort, "s", "'last_played'"), + ( + "sort", + self._sort, + "s", + state_settings.get_value("sort-mode").print_(False), + ), )) @Gtk.Template.Callback() @@ -136,16 +139,21 @@ class Window(Adw.ApplicationWindow): def _sort(self, action: Gio.SimpleAction, parameter: GLib.Variant, *_args): action.change_state(parameter) - prop, invert = SORT_MODES[parameter.get_string()] - opposite = (self._sort_prop == prop) and (self._invert_sort != invert) - self._sort_prop, self._invert_sort = prop, invert + sort_mode = parameter.get_string() + + prop, invert = SORT_MODES[sort_mode] + prev_prop, prev_invert = SORT_MODES[state_settings.get_string("sort-mode")] + opposite = (prev_prop == prop) and (prev_invert != invert) + + state_settings.set_string("sort-mode", sort_mode) self.sorter.changed( Gtk.SorterChange.INVERTED if opposite else Gtk.SorterChange.DIFFERENT ) def _sort_func(self, game1: Game, game2: Game, _) -> int: - a = (game2 if self._invert_sort else game1).get_property(self._sort_prop) - b = (game1 if self._invert_sort else game2).get_property(self._sort_prop) + prop, invert = SORT_MODES[state_settings.get_string("sort-mode")] + a = (game2 if invert else game1).get_property(prop) + b = (game1 if invert else game2).get_property(prop) return ( locale.strcoll(*self._sortable(a, b)) if isinstance(a, str) diff --git a/data/page.kramo.Cartridges.gschema.xml.in b/data/page.kramo.Cartridges.gschema.xml.in index 994a571..b3d9fd4 100644 --- a/data/page.kramo.Cartridges.gschema.xml.in +++ b/data/page.kramo.Cartridges.gschema.xml.in @@ -12,5 +12,18 @@ false + + + + + + + + + "last_played" + + + false +