window: Add option to show hidden games

This commit is contained in:
kramo
2025-11-29 22:57:09 +01:00
parent 49494063d7
commit 68e663e048
2 changed files with 26 additions and 15 deletions

View File

@@ -12,6 +12,11 @@ template $Window: Adw.ApplicationWindow {
action: "action(win.search)"; action: "action(win.search)";
} }
Shortcut {
trigger: "<Control>h";
action: "action(win.show-hidden)";
}
Shortcut { Shortcut {
trigger: "<Control>w"; trigger: "<Control>w";
action: "action(window.close)"; action: "action(window.close)";
@@ -84,6 +89,10 @@ template $Window: Adw.ApplicationWindow {
target: "last_played"; target: "last_played";
} }
} }
section {
item (_("Show Hidden Games"), "win.show-hidden")
}
}; };
} }
} }
@@ -112,7 +121,7 @@ template $Window: Adw.ApplicationWindow {
BoolFilter { BoolFilter {
expression: expr item as <$Game>.hidden; expression: expr item as <$Game>.hidden;
invert: true; invert: bind template.show-hidden inverted;
} }
BoolFilter { BoolFilter {

View File

@@ -31,6 +31,7 @@ class Window(Adw.ApplicationWindow):
sorter: Gtk.CustomSorter = Gtk.Template.Child() sorter: Gtk.CustomSorter = Gtk.Template.Child()
search_text = GObject.Property(type=str) search_text = GObject.Property(type=str)
show_hidden = GObject.Property(type=bool, default=False)
_sort_prop = "name" _sort_prop = "name"
_invert_sort = False _invert_sort = False
@@ -50,11 +51,26 @@ class Window(Adw.ApplicationWindow):
self.search_entry.set_key_capture_widget(self) self.search_entry.set_key_capture_widget(self)
self.sorter.set_sort_func(self._sort_func) self.sorter.set_sort_func(self._sort_func)
self.add_action(Gio.PropertyAction.new("show-hidden", self, "show-hidden"))
self.add_action_entries(( self.add_action_entries((
("search", lambda *_: self.search_entry.grab_focus()), ("search", lambda *_: self.search_entry.grab_focus()),
("sort", self._sort, "s", "'a-z'"), ("sort", self._sort, "s", "'a-z'"),
)) ))
@Gtk.Template.Callback()
def _search_started(self, entry: Gtk.SearchEntry) -> None:
entry.grab_focus()
@Gtk.Template.Callback()
def _search_changed(self, entry: Gtk.SearchEntry) -> None:
self.search_text = entry.props.text
entry.grab_focus()
@Gtk.Template.Callback()
def _stop_search(self, entry: Gtk.SearchEntry) -> None:
entry.props.text = ""
self.grid.grab_focus()
def _sort(self, action: Gio.SimpleAction, parameter: GLib.Variant, *_args) -> None: def _sort(self, action: Gio.SimpleAction, parameter: GLib.Variant, *_args) -> None:
action.change_state(parameter) action.change_state(parameter)
prop, invert = SORT_MODES[parameter.get_string()] prop, invert = SORT_MODES[parameter.get_string()]
@@ -78,17 +94,3 @@ class Window(Adw.ApplicationWindow):
def _sortable(*strings: str) -> Generator[str]: def _sortable(*strings: str) -> Generator[str]:
for string in strings: for string in strings:
yield string.lower().removeprefix("the ") yield string.lower().removeprefix("the ")
@Gtk.Template.Callback()
def _search_started(self, entry: Gtk.SearchEntry) -> None:
entry.grab_focus()
@Gtk.Template.Callback()
def _search_changed(self, entry: Gtk.SearchEntry) -> None:
self.search_text = entry.props.text
entry.grab_focus()
@Gtk.Template.Callback()
def _stop_search(self, entry: Gtk.SearchEntry) -> None:
entry.props.text = ""
self.grid.grab_focus()