From 68184141840f371cbf48bc64dd52fde3668a30b9 Mon Sep 17 00:00:00 2001 From: mic Date: Tue, 14 May 2024 17:48:40 +0200 Subject: [PATCH] fixed correct reloading of the listener. see #12 --- js/mzta-menus.js | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/js/mzta-menus.js b/js/mzta-menus.js index eca5d653..dba7df8b 100644 --- a/js/mzta-menus.js +++ b/js/mzta-menus.js @@ -38,10 +38,14 @@ export class mzta_Menus { this.menu_context_display = getMenuContextDisplay(); this.openChatGPT = openChatGPT; this.allPrompts = []; + this.listener = this.listener.bind(this); } async initialize() { + this.allPrompts = []; + this.rootMenu = []; + this.menu_listeners = {}; this.allPrompts = await getPrompts(true); this.allPrompts.forEach((prompt) => { this.addAction(prompt) @@ -52,8 +56,7 @@ export class mzta_Menus { await browser.menus.removeAll().catch(error => { console.error(">>>>>>>> ERROR removing the menus: ", error); }); - this.allPrompts = []; - this.rootMenu = []; + this.removeClickListener(); this.loadMenus(); } @@ -125,10 +128,22 @@ export class mzta_Menus { async loadMenus() { await this.initialize(); await this.addMenu(this.rootMenu); + this.addClickListener(); + } + + listener(info, tab) { let listeners = this.menu_listeners; - browser.menus.onClicked.addListener((info, tab) => { - listeners[info.menuItemId] && listeners[info.menuItemId] (info, tab); - }); + if (listeners[info.menuItemId]) { + listeners[info.menuItemId](info, tab); + } + } + + addClickListener() { + browser.menus.onClicked.addListener(this.listener); + } + + removeClickListener() { + browser.menus.onClicked.removeListener(this.listener); } addMenu = async (menu, root = null) => {