From afa9b4ca84a76caf390f999b4efde62588001282 Mon Sep 17 00:00:00 2001 From: Zoey Ahmed Date: Mon, 29 Dec 2025 13:00:41 +0000 Subject: [PATCH] gamepad: Implement return button action for sidebar --- cartridges/gamepads.py | 17 ++++++++++++++++- cartridges/ui/window.blp | 2 +- cartridges/ui/window.py | 1 + 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/cartridges/gamepads.py b/cartridges/gamepads.py index 373b43d..76f462b 100644 --- a/cartridges/gamepads.py +++ b/cartridges/gamepads.py @@ -136,7 +136,22 @@ class Gamepad(GObject.Object): open_menu.grab_focus() return - self.window.grid.grab_focus() + grid_visible = self.window.view_stack.props.visible_child_name == "grid" + if self._is_focused_on_top_bar(): + focus_widget = self.window.grid if grid_visible else self.window.sidebar + + # If the grid is not visible (i.e no search results or imports) + # the searchbar is focused as a fallback. + elif self._is_focused_on_sidebar(): + focus_widget = ( + self.window.grid if grid_visible else self.window.search_entry + ) + else: + focus_widget = ( + self.window.sidebar if grid_visible else self.window.search_entry + ) + + focus_widget.grab_focus() self.window.props.focus_visible = True def _navigate_to_game_position(self, new_pos: int): diff --git a/cartridges/ui/window.blp b/cartridges/ui/window.blp index fec10e6..12a4f64 100644 --- a/cartridges/ui/window.blp +++ b/cartridges/ui/window.blp @@ -208,7 +208,7 @@ template $Window: Adw.ApplicationWindow { } content: Adw.ToastOverlay toast_overlay { - child: Adw.ViewStack { + child: Adw.ViewStack view_stack { visible-child-name: bind $_if_else( grid.model as .n-items, "grid", diff --git a/cartridges/ui/window.py b/cartridges/ui/window.py index 2c6971c..9dc6a7e 100644 --- a/cartridges/ui/window.py +++ b/cartridges/ui/window.py @@ -56,6 +56,7 @@ class Window(Adw.ApplicationWindow): sort_button: Gtk.MenuButton = Gtk.Template.Child() main_menu_button: Gtk.MenuButton = Gtk.Template.Child() toast_overlay: Adw.ToastOverlay = Gtk.Template.Child() + view_stack: Adw.ViewStack = Gtk.Template.Child() grid: Gtk.GridView = Gtk.Template.Child() sorter: GameSorter = Gtk.Template.Child() collection_filter: CollectionFilter = Gtk.Template.Child()