diff --git a/src/window.blp b/src/window.blp index ff2afa0..7094929 100644 --- a/src/window.blp +++ b/src/window.blp @@ -93,10 +93,10 @@ template WarehouseWindow : Adw.ApplicationWindow { tooltip-text: _("Send Selected Apps' Data to the Trash"); } [end] - Button batch_copy_button { + MenuButton batch_copy_button { icon-name: "edit-copy-symbolic"; - // label: _("Copy App ID"); tooltip-text: _("Copy Selected App IDs"); + menu-model: copy_menu; } } } @@ -135,3 +135,22 @@ menu primary_menu { } } } + +menu copy_menu { + section { + item { + label: _("Copy Names"); + action: "win.copy-names"; + } + + item { + label: _("Copy IDs"); + action: "win.copy-ids"; + } + + item { + label: _("Copy Refs"); + action: "win.copy-refs"; + } + } +} diff --git a/src/window.py b/src/window.py index c039286..05f0cb3 100644 --- a/src/window.py +++ b/src/window.py @@ -213,9 +213,7 @@ class WarehouseWindow(Adw.ApplicationWindow): flatpak_row.add_suffix(trash_button) select_flatpak_tickbox = Gtk.CheckButton(halign=Gtk.Align.CENTER) - select_flatpak_tickbox.set_margin_start(4) - select_flatpak_tickbox.set_margin_end(4) - select_flatpak_tickbox.add_css_class("flat") + select_flatpak_tickbox.add_css_class("selection-mode") select_flatpak_tickbox.connect("toggled", self.flatpak_row_select_handler, index) flatpak_row.add_suffix(select_flatpak_tickbox) @@ -261,14 +259,6 @@ class WarehouseWindow(Adw.ApplicationWindow): self.batch_clean_button.set_sensitive(should_enable) self.batch_uninstall_button.set_sensitive(should_enable) - def batch_copy_handler(self, widget): - to_copy = "" - for i in range(len(self.selected_host_flatpak_indexes)): - host_flatpak_index = self.selected_host_flatpak_indexes[i] - to_copy += f"{(self.host_flatpaks[host_flatpak_index][2])}\n" - self.clipboard.set(to_copy) - self.toast_overlay.add_toast(Adw.Toast.new(_("Copied selected app IDs"))) - def on_batch_clean_response(self, dialog, response, _a): if response == "cancel": return 1 @@ -320,6 +310,45 @@ class WarehouseWindow(Adw.ApplicationWindow): self.batch_actions_enable(buttons_enable) + def create_action(self, name, callback, shortcuts=None): + """Add a window action. + + Args: + name: the name of the action + callback: the function to be called when the action is + activated + shortcuts: an optional list of accelerators + """ + action = Gio.SimpleAction.new(name, None) + action.connect("activate", callback) + self.add_action(action) + if shortcuts: + self.set_accels_for_action(f"app.{name}", shortcuts) + + def copyNames(self, widget, _a): + to_copy = "" + for i in range(len(self.selected_host_flatpak_indexes)): + host_flatpak_index = self.selected_host_flatpak_indexes[i] + to_copy += f"{(self.host_flatpaks[host_flatpak_index][0])}\n" + self.clipboard.set(to_copy) + self.toast_overlay.add_toast(Adw.Toast.new(_("Copied selected app names"))) + + def copyIDs(self, widget, _a): + to_copy = "" + for i in range(len(self.selected_host_flatpak_indexes)): + host_flatpak_index = self.selected_host_flatpak_indexes[i] + to_copy += f"{(self.host_flatpaks[host_flatpak_index][2])}\n" + self.clipboard.set(to_copy) + self.toast_overlay.add_toast(Adw.Toast.new(_("Copied selected app IDs"))) + + def copyRefs(self, widget, _a): + to_copy = "" + for i in range(len(self.selected_host_flatpak_indexes)): + host_flatpak_index = self.selected_host_flatpak_indexes[i] + to_copy += f"{(self.host_flatpaks[host_flatpak_index][8])}\n" + self.clipboard.set(to_copy) + self.toast_overlay.add_toast(Adw.Toast.new(_("Copied selected app refs"))) + def __init__(self, **kwargs): super().__init__(**kwargs) self.my_utils = myUtils(self) @@ -330,7 +359,6 @@ class WarehouseWindow(Adw.ApplicationWindow): self.search_bar.connect_entry(self.search_entry) self.refresh_button.connect("clicked", self.refresh_list_of_flatpaks, True) self.batch_mode_button.connect("toggled", self.batch_mode_handler) - self.batch_copy_button.connect("clicked", self.batch_copy_handler) self.batch_clean_button.connect("clicked", self.batch_clean_handler) self.batch_uninstall_button.connect("clicked", self.batch_uninstall_button_handler) self.batch_select_all_button.connect("clicked", self.batch_select_all_handler) @@ -340,3 +368,7 @@ class WarehouseWindow(Adw.ApplicationWindow): self.add_controller(event_controller) self.main_overlay.add_overlay(self.main_progress_bar) + self.create_action("copy-names", self.copyNames) + self.create_action("copy-ids", self.copyIDs) + self.create_action("copy-refs", self.copyRefs) +