diff --git a/src/main_window/window.blp b/src/main_window/window.blp index e95ad4e..0141a56 100644 --- a/src/main_window/window.blp +++ b/src/main_window/window.blp @@ -29,9 +29,9 @@ template $WarehouseWindow: Adw.ApplicationWindow { [top] Adw.HeaderBar header_bar { [start] - Button sidebar_button { - icon-name: "dock-left-symbolic"; - tooltip-text: _("Hide Sidebar"); + Button refresh_button { + icon-name: "arrow-circular-top-right-symbolic"; + tooltip-text: _("Refresh List"); } [end] MenuButton main_menu { diff --git a/src/main_window/window.py b/src/main_window/window.py index 32ba56d..765d1bc 100644 --- a/src/main_window/window.py +++ b/src/main_window/window.py @@ -23,6 +23,7 @@ import re import time from gi.repository import Adw, Gdk, Gio, GLib, Gtk +from .host_info import HostInfo from .packages_page import PackagesPage from .user_data_page import UserDataPage from .const import Config @@ -34,7 +35,7 @@ class WarehouseWindow(Adw.ApplicationWindow): gtc = Gtk.Template.Child main_breakpoint = gtc() main_split = gtc() - sidebar_button = gtc() + refresh_button = gtc() navigation_row_listbox = gtc() packages_row = gtc() remotes_row = gtc() @@ -65,6 +66,20 @@ class WarehouseWindow(Adw.ApplicationWindow): else: self.main_split.set_content(page(main_window=self)) + def start_loading(self, *args): + for _, page in self.pages.items(): + if page.instance: + page.instance.start_loading() + + def end_loading(self, *args): + for _, page in self.pages.items(): + if page.instance: + page.instance.end_loading() + + def refresh_handler(self, *args): + self.start_loading() + HostInfo.get_flatpaks(callback=self.end_loading) + def __init__(self, **kwargs): super().__init__(**kwargs) @@ -94,7 +109,10 @@ class WarehouseWindow(Adw.ApplicationWindow): event_controller.connect("key-pressed", self.key_handler) self.navigation_row_listbox.connect("row-activated", self.navigation_handler) # file_drop.connect("drop", self.drop_callback) - self.sidebar_button.connect("clicked", lambda *_: self.main_split.set_show_sidebar(False)) + self.refresh_button.connect("clicked", self.refresh_handler) self.navigation_row_listbox.get_row_at_index(0).activate() self.main_split.set_show_sidebar(True) + + self.start_loading() + HostInfo.get_flatpaks(callback=self.end_loading) diff --git a/src/packages_page/packages_page.blp b/src/packages_page/packages_page.blp index a7b7f55..c2e9e93 100644 --- a/src/packages_page/packages_page.blp +++ b/src/packages_page/packages_page.blp @@ -36,11 +36,6 @@ template $PackagesPage : Adw.BreakpointBin { icon-name: "loupe-large-symbolic"; tooltip-text: _("Search Packages"); } - [start] - Button refresh_button { - icon-name: "arrow-circular-top-right-symbolic"; - tooltip-text: _("Refresh List"); - } [end] ToggleButton filter_button { icon-name: "funnel-symbolic"; diff --git a/src/packages_page/packages_page.py b/src/packages_page/packages_page.py index 57577db..89f08d5 100644 --- a/src/packages_page/packages_page.py +++ b/src/packages_page/packages_page.py @@ -22,7 +22,6 @@ class PackagesPage(Adw.BreakpointBin): no_results = gtc() sidebar_button = gtc() filter_button = gtc() - refresh_button = gtc() search_bar = gtc() search_entry = gtc() packages_split = gtc() @@ -223,7 +222,7 @@ class PackagesPage(Adw.BreakpointBin): details = err.stderr if type(err) == subprocess.CalledProcessError else str(err) self.packages_toast_overlay.add_toast(ErrorToast(_("Could not uninstall packages"), details).toast) else: - self.refresh_handler() + self.main_window.refresh_handler() GLib.idle_add(lambda *__: self.packages_toast_overlay.add_toast(Adw.Toast(title=_("Uninstalled Packages")))) Gio.Task.new(None, None, callback).run_in_thread(thread) @@ -239,12 +238,14 @@ class PackagesPage(Adw.BreakpointBin): dialog.connect("response", on_response) dialog.present(self.main_window) - def refresh_handler(self, *args): + def start_loading(self): self.packages_navpage.set_title(_("Packages")) self.selected_rows.clear() self.select_button.set_active(False) self.set_status(self.loading_packages) - HostInfo.get_flatpaks(callback=self.generate_list) + + def end_loading(self): + self.generate_list() def select_button_handler(self, button): self.set_selection_mode(button.get_active()) @@ -274,7 +275,6 @@ class PackagesPage(Adw.BreakpointBin): def __init__(self, main_window, **kwargs): super().__init__(**kwargs) - HostInfo.get_flatpaks(callback=self.generate_list) # Extra Object Creation self.main_window = main_window @@ -293,14 +293,11 @@ class PackagesPage(Adw.BreakpointBin): self.__class__.instance = self # Connections - main_window.main_split.connect("notify::show-sidebar", lambda sidebar, *_: self.sidebar_button.set_visible(sidebar.get_collapsed() or not sidebar.get_show_sidebar())) - main_window.main_split.connect("notify::collapsed", lambda sidebar, *_: self.sidebar_button.set_visible(sidebar.get_collapsed() or not sidebar.get_show_sidebar())) - self.sidebar_button.connect("clicked", lambda *_: main_window.main_split.set_show_sidebar(True)) + self.sidebar_button.connect("clicked", lambda *_, ms=main_window.main_split: ms.set_show_sidebar(not ms.get_show_sidebar() if not ms.get_collapsed() else True)) self.search_entry.connect("search-changed", self.on_invalidate) self.search_bar.set_key_capture_widget(main_window) self.packages_list_box.connect("row-activated", self.row_activate_handler) - self.refresh_button.connect("clicked", self.refresh_handler) self.select_button.connect("clicked", self.select_button_handler) self.filter_button.connect("toggled", self.filter_button_handler) self.reset_filters_button.connect("clicked", lambda *_: self.filters_page.reset_filters()) diff --git a/src/user_data_page/user_data_page.py b/src/user_data_page/user_data_page.py index 4c2ac94..67a7d94 100644 --- a/src/user_data_page/user_data_page.py +++ b/src/user_data_page/user_data_page.py @@ -56,6 +56,12 @@ class UserDataPage(Adw.BreakpointBin): elif self.switcher_bar.get_reveal(): self.header_bar.set_show_title(False) + def start_loading(self, *args): + pass + + def end_loading(self, *args): + pass + def __init__(self, main_window, **kwargs): super().__init__(**kwargs) @@ -70,10 +76,8 @@ class UserDataPage(Adw.BreakpointBin): self.flow_box.get_child_at_index(i).set_focusable(False) # Connections - main_window.main_split.connect("notify::show-sidebar", lambda sidebar, *_: self.sidebar_button.set_visible(sidebar.get_collapsed() or not sidebar.get_show_sidebar())) - main_window.main_split.connect("notify::collapsed", lambda sidebar, *_: self.sidebar_button.set_visible(sidebar.get_collapsed() or not sidebar.get_show_sidebar())) - self.sidebar_button.connect("clicked", lambda *_: main_window.main_split.set_show_sidebar(True)) - self.sidebar_button.set_visible(main_window.main_split.get_collapsed()) + self.sidebar_button.connect("clicked", lambda *_, ms=main_window.main_split: ms.set_show_sidebar(not ms.get_show_sidebar() if not ms.get_collapsed() else True)) + self.adj.connect("value-changed", self.show_title_handler)