From c3fc7d792e0b5ea4dabaf6ffd69f8102068a5c70 Mon Sep 17 00:00:00 2001 From: "mr. M" Date: Sun, 10 Nov 2024 18:50:10 +0100 Subject: [PATCH] Refactor Zen tab management to improve performance and enable conditional functionality --- .../zen-styles/zen-tabs/vertical-tabs.css | 2 -- .../zen-components/ZenPinnedTabManager.mjs | 21 +++++++++++++++++++ .../base/zen-components/ZenTabUnloader.mjs | 8 +++---- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css b/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css index dcb5fbf01..c564e09c8 100644 --- a/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css +++ b/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css @@ -184,8 +184,6 @@ #vertical-pinned-tabs-container { padding-inline-end: 0 !important; - max-height: unset !important; - overflow: visible !important; display: flex !important; flex-direction: column; diff --git a/src/browser/base/zen-components/ZenPinnedTabManager.mjs b/src/browser/base/zen-components/ZenPinnedTabManager.mjs index f47f9285c..5b2145861 100644 --- a/src/browser/base/zen-components/ZenPinnedTabManager.mjs +++ b/src/browser/base/zen-components/ZenPinnedTabManager.mjs @@ -39,6 +39,9 @@ class ZenPinnedTabManager extends ZenPreloadedFeature { init() { + if (!this.enabled) { + return; + } this.observer = new ZenPinnedTabsObserver(); this._initClosePinnedTabShortcut(); this._insertItemsIntoTabContextMenu(); @@ -48,9 +51,23 @@ } async initTabs() { + if (!this.enabled) { + return; + } await ZenPinnedTabsStorage.init(); } + get enabled() { + if (!this._enabled) { + this._enabled = !( + docElement.hasAttribute('privatebrowsingmode') || + docElement.getAttribute('chromehidden').includes('toolbar') || + docElement.getAttribute('chromehidden').includes('menubar') + ); + } + return this._enabled; + } + async _refreshPinnedTabs() { await this._initializePinsCache(); this._initializePinnedTabs(); @@ -161,6 +178,7 @@ } _onPinnedTabEvent(action, event) { + if (!this.enabled) return; const tab = event.target; switch (action) { case "TabPinned": @@ -449,6 +467,9 @@ } updatePinnedTabContextMenu(contextTab) { + if (!this.enabled) { + return; + } const isVisible = contextTab.pinned && !contextTab.multiselected; document.getElementById("context_zen-reset-pinned-tab").hidden = !isVisible || !contextTab.getAttribute("zen-pin-id"); document.getElementById("context_zen-replace-pinned-url-with-current").hidden = !isVisible; diff --git a/src/browser/base/zen-components/ZenTabUnloader.mjs b/src/browser/base/zen-components/ZenTabUnloader.mjs index 5780544eb..e3668c9c4 100644 --- a/src/browser/base/zen-components/ZenTabUnloader.mjs +++ b/src/browser/base/zen-components/ZenTabUnloader.mjs @@ -250,7 +250,7 @@ canUnloadTab(tab, currentTimestamp, excludedUrls, ignoreTimestamp = false) { if ( - tab.pinned || + (tab.pinned && !ignoreTimestamp) || tab.selected || tab.multiselected || tab.hasAttribute('busy') || @@ -259,9 +259,9 @@ tab.splitView || tab.attention || tab.linkedBrowser?.zenModeActive || - tab.pictureinpicture || - tab.soundPlaying || - tab.zenIgnoreUnload || + (tab.pictureinpicture && !ignoreTimestamp) || + (tab.soundPlaying && !ignoreTimestamp) || + (tab.zenIgnoreUnload && !ignoreTimestamp) || excludedUrls.some((url) => url.test(tab.linkedBrowser.currentURI.spec)) ) { return false;