From 7147fd2dfc8b304d47ed0321fc3bde663b2162ab Mon Sep 17 00:00:00 2001 From: mauro-balades Date: Fri, 27 Sep 2024 20:34:37 +0200 Subject: [PATCH] Refactor ZenTabUnloader to optimize tab unloading and add context menu options --- src/ZenTabUnloader.mjs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/ZenTabUnloader.mjs b/src/ZenTabUnloader.mjs index 2e33deb..cb208fc 100644 --- a/src/ZenTabUnloader.mjs +++ b/src/ZenTabUnloader.mjs @@ -149,6 +149,7 @@ if (!lazy.zenTabUnloaderEnabled) { return; } + this.insertIntoContextMenu(); this.observer = new ZenTabsObserver(); this.intervalUnloader = new ZenTabsIntervalUnloader(this); this.observer.addTabsListener(this.onTabEvent.bind(this)); @@ -217,6 +218,47 @@ return gBrowser.tabs; } + insertIntoContextMenu() { + const element = window.MozXULElement.parseXULToFragment(` + + + + + + + + + `); + document.getElementById('context_closeDuplicateTabs').parentNode.appendChild(element); + } + + unloadTab() { + const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + for (const tab of tabs) { + gBrowser.discardBrowser(tab); + } + } + + preventUnloadTab() { + const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + for (const tab of tabs) { + tab.zenIgnoreUnload = true; + } + } + + ignoreUnloadTab() { + const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + for (const tab of tabs) { + tab.zenIgnoreUnload = false; + } + } + canUnloadTab(tab, currentTimestamp, excludedUrls) { if (tab.pinned || tab.selected || tab.multiselected || tab.hasAttribute("busy") || tab.hasAttribute("pending")