From 5ea61ad59066c9a080e1713b225c4d96991af186 Mon Sep 17 00:00:00 2001 From: Heliguy Date: Sun, 27 Oct 2024 17:30:06 -0400 Subject: [PATCH] Allow clicking entire rows to select them, instead of opening subpages --- src/packages_page/packages_page.py | 13 +++++++++++++ src/snapshot_page/snapshot_page.py | 23 +++++++++++++++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/packages_page/packages_page.py b/src/packages_page/packages_page.py index 6682c7c..509efde 100644 --- a/src/packages_page/packages_page.py +++ b/src/packages_page/packages_page.py @@ -53,6 +53,7 @@ class PackagesPage(Adw.BreakpointBin): # This must be set to the created object from within the class's __init__ method instance = None page_name = "packages" + last_activated_row = None def set_status(self, to_set): @@ -198,6 +199,11 @@ class PackagesPage(Adw.BreakpointBin): self.scrolled_window.set_vadjustment(Gtk.Adjustment.new(0,0,0,0,0,0)) # Scroll list to top def row_activate_handler(self, list_box, row): + if self.select_button.get_active(): + row.check_button.set_active(not row.check_button.get_active()) + return + + self.last_activated_row = row self.properties_page.set_properties(row.package) self.properties_page.nav_view.pop() self.packages_split.set_show_content(True) @@ -213,6 +219,12 @@ class PackagesPage(Adw.BreakpointBin): return True def set_selection_mode(self, is_enabled): + if is_enabled: + self.packages_list_box.set_selection_mode(Gtk.SelectionMode.NONE) + else: + self.packages_list_box.set_selection_mode(Gtk.SelectionMode.SINGLE) + self.packages_list_box.select_row(self.last_activated_row) + i = 0 while row := self.packages_list_box.get_row_at_index(i): i += 1 @@ -284,6 +296,7 @@ class PackagesPage(Adw.BreakpointBin): dialog.present(self.main_window) def start_loading(self): + self.last_activated_row = None self.packages_navpage.set_title(_("Packages")) self.select_button.set_active(False) self.set_status(self.loading_packages) diff --git a/src/snapshot_page/snapshot_page.py b/src/snapshot_page/snapshot_page.py index aad1d05..be71bd8 100644 --- a/src/snapshot_page/snapshot_page.py +++ b/src/snapshot_page/snapshot_page.py @@ -87,6 +87,7 @@ class SnapshotPage(Adw.BreakpointBin): instance = None page_name = "snapshots" is_trash_dialog_open = False + last_activated_row = None def sort_snapshots(self, *args): self.active_snapshot_paks.clear() @@ -139,8 +140,6 @@ class SnapshotPage(Adw.BreakpointBin): if len(self.active_snapshot_paks) > 0: self.active_box.set_visible(True) - # first_row = self.active_listbox.get_row_at_index(0) - # self.active_listbox.select_row(first_row) else: self.active_box.set_visible(False) @@ -154,17 +153,25 @@ class SnapshotPage(Adw.BreakpointBin): self.leftover_box.set_visible(True) if len(self.active_snapshot_paks) == 0: self.stack.set_visible_child(self.scrolled_window) - # first_row = self.leftover_listbox.get_row_at_index(0) - # self.leftover_listbox.select_row(first_row) else: self.leftover_box.set_visible(False) def active_select_handler(self, listbox, row, should_show_content=True, refresh=False): + if row.check_button.get_visible(): + row.check_button.set_active(not row.check_button.get_active()) + return + + self.last_activated_row = row self.leftover_listbox.select_row(None) self.list_page.set_snapshots(row.package, refresh) self.split_view.set_show_content(should_show_content) def leftover_select_handler(self, listbox, row, should_show_content=True, refresh=False): + if row.check_button.get_visible(): + row.check_button.set_active(not row.check_button.get_active()) + return + + self.last_activated_row = row self.active_listbox.select_row(None) self.list_page.set_snapshots(row.folder, refresh) self.split_view.set_show_content(should_show_content) @@ -193,6 +200,7 @@ class SnapshotPage(Adw.BreakpointBin): self.toast_overlay.add_toast(toast) def start_loading(self): + self.last_activated_row = None self.search_button.set_active(False) self.workers.clear() self.select_button.set_active(False) @@ -298,6 +306,13 @@ class SnapshotPage(Adw.BreakpointBin): def set_selection_mode(self, *args): enable = self.select_button.get_active() + self.active_listbox.set_selection_mode(Gtk.SelectionMode.NONE if enable else Gtk.SelectionMode.SINGLE) + self.leftover_listbox.set_selection_mode(Gtk.SelectionMode.NONE if enable else Gtk.SelectionMode.SINGLE) + if self.last_activated_row in self.active_listbox: + self.active_listbox.select_row(self.last_activated_row) + elif self.last_activated_row in self.leftover_listbox: + self.leftover_listbox.select_row(self.last_activated_row) + i = 0 while row := self.active_listbox.get_row_at_index(i): i += 1