From bb1a374db37bf7e036adb888b8342443bb380970 Mon Sep 17 00:00:00 2001 From: Heliguy Date: Sun, 25 Aug 2024 17:39:40 -0400 Subject: [PATCH] Long press and rclicks now select rows --- src/packages_page/app_row.py | 18 ++++++++++++------ src/packages_page/packages_page.blp | 3 +++ src/packages_page/packages_page.py | 12 +++++++++--- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/packages_page/app_row.py b/src/packages_page/app_row.py index f3aa2a7..1e3ea1b 100644 --- a/src/packages_page/app_row.py +++ b/src/packages_page/app_row.py @@ -16,20 +16,26 @@ class AppRow(Adw.ActionRow): if self.package.icon_path: self.image.add_css_class("icon-dropshadow") self.image.set_from_file(self.package.icon_path) - - if self.callback: - self.callback() - def __init__(self, package, callback=None, **kwargs): + def gest(self, *args): + self.on_long_press(self) + + def __init__(self, package, on_long_press=None, **kwargs): super().__init__(**kwargs) # Extra Object Creation self.package = package - self.callback = callback + self.on_long_press = on_long_press + self.rclick_gesture = Gtk.GestureClick() + self.long_press_gesture = Gtk.GestureLongPress() # Apply GLib.idle_add(lambda *_: self.set_title(package.info["name"])) GLib.idle_add(lambda *_: self.set_subtitle(package.info["id"])) GLib.idle_add(lambda *_: self.idle_stuff()) + self.rclick_gesture.set_button(3) + self.add_controller(self.rclick_gesture) - # Connections \ No newline at end of file + # Connections + self.rclick_gesture.connect("released", self.gest) + self.long_press_gesture.connect("pressed", self.gest) \ No newline at end of file diff --git a/src/packages_page/packages_page.blp b/src/packages_page/packages_page.blp index 9f613f4..031ce2f 100644 --- a/src/packages_page/packages_page.blp +++ b/src/packages_page/packages_page.blp @@ -157,12 +157,15 @@ Popover copy_pop { ListBox copy_menu { Label copy_names { label: _("Copy Names"); + halign: start; } Label copy_ids { label: _("Copy IDs"); + halign: start; } Label copy_refs { label: _("Copy Refs"); + halign: start; } } } \ No newline at end of file diff --git a/src/packages_page/packages_page.py b/src/packages_page/packages_page.py index dcf1fb9..fd5c1a8 100644 --- a/src/packages_page/packages_page.py +++ b/src/packages_page/packages_page.py @@ -127,6 +127,10 @@ class PackagesPage(Adw.BreakpointBin): i += 1 row.check_button.set_active(row.get_visible()) + def row_rclick_handler(self, row): + self.select_button.set_active(True) + GLib.idle_add(lambda *_, button=row.check_button: button.set_active(not button.get_active())) + def generate_list(self, *args): self.packages_list_box.remove_all() GLib.idle_add(lambda *_: self.filters_page.generate_filters()) @@ -135,8 +139,9 @@ class PackagesPage(Adw.BreakpointBin): if len(HostInfo.flatpaks) == 0: self.set_status(self.no_packages) return + for package in HostInfo.flatpaks: - row = AppRow(package) + row = AppRow(package, self.row_rclick_handler) package.app_row = row row.masked_status_icon.set_visible(package.is_masked) row.pinned_status_icon.set_visible(package.is_pinned) @@ -148,6 +153,7 @@ class PackagesPage(Adw.BreakpointBin): row.eol_runtime_status_icon.set_visible(package.dependant_runtime.is_eol) except Exception as e: self.packages_toast_overlay.add_toast(ErrorToast(_("Error getting Flatpak '{}'").format(package.info["name"]), str(e)).toast) + self.packages_list_box.append(row) self.apply_filters() @@ -162,7 +168,7 @@ class PackagesPage(Adw.BreakpointBin): if not first_visible_row is None: self.packages_list_box.select_row(first_visible_row) self.properties_page.set_properties(first_visible_row.package) - + 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): @@ -313,7 +319,7 @@ class PackagesPage(Adw.BreakpointBin): 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.select_button.connect("clicked", self.select_button_handler) + self.select_button.connect("toggled", 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()) self.packages_split.connect("notify::show-content", self.filter_page_handler)