From 1942fc88c0a14ab80d4f93e0d284f7aec110e84b Mon Sep 17 00:00:00 2001 From: Teemu Ikonen Date: Sun, 22 Oct 2023 20:10:31 +0300 Subject: [PATCH] Replace inject_extensions_menu() with ExtensionMenuHelper --- src/gpodder/gtkui/main.py | 47 ++++++++++----------------------------- 1 file changed, 12 insertions(+), 35 deletions(-) diff --git a/src/gpodder/gtkui/main.py b/src/gpodder/gtkui/main.py index baf781b6..72018c79 100644 --- a/src/gpodder/gtkui/main.py +++ b/src/gpodder/gtkui/main.py @@ -84,7 +84,6 @@ class gPodder(BuilderWidget, dbus.service.Object): self.db = self.core.db self.model = self.core.model self.options = options - self.extensions_menu = None self.extensions_actions = [] self._search_podcasts = None self._search_episodes = None @@ -210,7 +209,14 @@ class gPodder(BuilderWidget, dbus.service.Object): # Set up the first instance of MygPoClient self.mygpo_client = my.MygPoClient(self.config) - self.inject_extensions_menu() + # Extensions section in app menu and menubar Extras menu + extensions_menu = Gio.Menu() + self.application.menu_extras.append_section(_('Extensions'), extensions_menu) + self.extensions_menu_helper = ExtensionMenuHelper(self.gPodder, + extensions_menu, 'extensions.action_', + lambda fun: lambda action, param: fun()) + self.extensions_menu_helper.replace_entries( + gpodder.user_extensions.on_create_menu()) gpodder.user_extensions.on_ui_initialized(self.model, self.extensions_podcast_update_cb, @@ -428,37 +434,6 @@ class gPodder(BuilderWidget, dbus.service.Object): self.bluetooth_episodes_action.set_enabled(self.bluetooth_available) - def inject_extensions_menu(self): - """ - Update Extras/Extensions menu. - Called at startup and when en/dis-abling extensions. - """ - def gen_callback(label, callback): - return lambda action, param: callback() - - for a in self.extensions_actions: - self.gPodder.remove_action(a.get_property('name')) - self.extensions_actions = [] - - if self.extensions_menu is None: - # insert menu section at startup (hides when empty) - self.extensions_menu = Gio.Menu.new() - self.application.menu_extras.append_section(_('Extensions'), self.extensions_menu) - else: - self.extensions_menu.remove_all() - - extension_entries = gpodder.user_extensions.on_create_menu() - if extension_entries: - # populate menu - for i, (label, callback) in enumerate(extension_entries): - action_id = 'extensions.action_%d' % i - action = Gio.SimpleAction.new(action_id) - action.connect('activate', gen_callback(label, callback)) - self.extensions_actions.append(action) - self.gPodder.add_action(action) - itm = Gio.MenuItem.new(label, 'win.' + action_id) - self.extensions_menu.append_item(itm) - def on_resume_all_infobar_response(self, infobar, response_id): if response_id == Gtk.ResponseType.OK: selection = self.treeDownloads.get_selection() @@ -4122,7 +4097,9 @@ class gPodder(BuilderWidget, dbus.service.Object): extension.on_ui_initialized(self.model, self.extensions_podcast_update_cb, self.extensions_episode_download_cb) - self.inject_extensions_menu() + self.extensions_menu_helper.replace_entries( + gpodder.user_extensions.on_create_menu()) def on_extension_disabled(self, extension): - self.inject_extensions_menu() + self.extensions_menu_helper.replace_entries( + gpodder.user_extensions.on_create_menu())