From 15844bda300785589993f69612381be6cd0b4c11 Mon Sep 17 00:00:00 2001 From: vish-coding Date: Fri, 24 Jul 2026 03:24:32 +0530 Subject: [PATCH] The Copy Button --------------- When using Web Apps I came across many instances where I needed to copy the current item and change little bit after copy. Since there was no 'Copy' button, I added one. --- usr/lib/webapp-manager/webapp-manager.py | 14 ++++++++ usr/share/webapp-manager/webapp-manager.ui | 42 ++++++++++++++++------ 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/usr/lib/webapp-manager/webapp-manager.py b/usr/lib/webapp-manager/webapp-manager.py index d6aeb3ee..3b305755 100755 --- a/usr/lib/webapp-manager/webapp-manager.py +++ b/usr/lib/webapp-manager/webapp-manager.py @@ -86,6 +86,7 @@ def __init__(self, application): self.add_button = self.builder.get_object("add_button") self.remove_button = self.builder.get_object("remove_button") self.edit_button = self.builder.get_object("edit_button") + self.copy_button = self.builder.get_object("copy_button") self.run_button = self.builder.get_object("run_button") self.ok_button = self.builder.get_object("ok_button") self.name_entry = self.builder.get_object("name_entry") @@ -113,6 +114,7 @@ def __init__(self, application): self.builder.get_object("cancel_favicon_button").connect("clicked", self.on_cancel_favicon_button) self.remove_button.connect("clicked", self.on_remove_button) self.edit_button.connect("clicked", self.on_edit_button) + self.copy_button.connect("clicked", self.on_copy_button) self.run_button.connect("clicked", self.on_run_button) self.ok_button.connect("clicked", self.on_ok_button) self.favicon_button.connect("clicked", self.on_favicon_button) @@ -280,6 +282,8 @@ def on_key_press_event(self, widget, event): self.on_edit_button(self.edit_button) elif event.keyval == Gdk.KEY_d: self.on_remove_button(self.remove_button) + elif event.keyval == Gdk.KEY_c: + self.on_copy_button(self.copy_button) elif event.keyval == Gdk.KEY_Escape: self.load_webapps() @@ -351,6 +355,16 @@ def on_add_button(self, widget): self.toggle_ok_sensitivity() self.name_entry.grab_focus() + def on_copy_button(self, widget): + if (web_app := self.selected_webapp) is not None: + name = f'{self.selected_webapp.name} (copy)' + browser = next((b for b in self.manager.get_supported_browsers() if b.name == web_app.web_browser), None) + if browser: + self.manager.create_webapp(name, web_app.desc, web_app.url, web_app.icon, web_app.category, browser, web_app.custom_parameters, web_app.isolate_profile, web_app.navbar, + web_app.privatewindow) + self.load_webapps() + + def on_edit_button(self, widget): if self.selected_webapp is not None: self.name_entry.set_text(self.selected_webapp.name) diff --git a/usr/share/webapp-manager/webapp-manager.ui b/usr/share/webapp-manager/webapp-manager.ui index f08bd9f6..2ad89d1b 100644 --- a/usr/share/webapp-manager/webapp-manager.ui +++ b/usr/share/webapp-manager/webapp-manager.ui @@ -1,5 +1,5 @@ - + @@ -129,6 +129,26 @@ 2 + + + True + False + False + Add + + + True + False + xsi-edit-copy-symbolic + + + + + False + True + 3 + + True @@ -147,7 +167,7 @@ False True - 3 + 4 @@ -193,8 +213,8 @@ True False end - True Name: + True 0 @@ -206,8 +226,8 @@ True False end - True Address: + True 0 @@ -219,8 +239,8 @@ True False end - True Icon: + True 0 @@ -351,8 +371,8 @@ True False end - True Category: + True 0 @@ -384,8 +404,8 @@ True False end - True Browser: + True 0 @@ -410,8 +430,8 @@ True False end - True Isolated profile: + True 0 @@ -434,8 +454,8 @@ True False end - True Navigation bar: + True 0 @@ -458,8 +478,8 @@ True False end - True Private/Incognito Window: + True 0 @@ -471,8 +491,8 @@ True False end - True Custom parameters: + True 0