From 066b240defb75f0843d4621b321475e87e87d5d3 Mon Sep 17 00:00:00 2001 From: Vedaant Date: Mon, 17 Nov 2025 16:27:12 -0800 Subject: [PATCH 1/2] feat: Enhance tab removal functionality to handle essential and pinned tabs in ctrl-tab menu --- .../content/browser-ctrlTab-js.patch | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/browser/components/tabbrowser/content/browser-ctrlTab-js.patch b/src/browser/components/tabbrowser/content/browser-ctrlTab-js.patch index af58c3dd34..3c86305052 100644 --- a/src/browser/components/tabbrowser/content/browser-ctrlTab-js.patch +++ b/src/browser/components/tabbrowser/content/browser-ctrlTab-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/tabbrowser/content/browser-ctrlTab.js b/browser/components/tabbrowser/content/browser-ctrlTab.js -index 958728cde19dd7cc24692baa89e11fcab816ab82..32e2b6af2536133f170bd5e14c47392ded8440eb 100644 +index 958728cde19dd7cc24692baa89e11fcab816ab82..92de87cc8461146e0040ca8a59710bf5d46d685f 100644 --- a/browser/components/tabbrowser/content/browser-ctrlTab.js +++ b/browser/components/tabbrowser/content/browser-ctrlTab.js @@ -249,7 +249,8 @@ var ctrlTab = { @@ -12,7 +12,31 @@ index 958728cde19dd7cc24692baa89e11fcab816ab82..32e2b6af2536133f170bd5e14c47392d }, init: function ctrlTab_init() { -@@ -460,7 +461,7 @@ var ctrlTab = { +@@ -452,7 +453,22 @@ var ctrlTab = { + + remove: function ctrlTab_remove(aPreview) { + if (aPreview._tab) { +- gBrowser.removeTab(aPreview._tab); ++ const tab = aPreview._tab; ++ ++ if (tab.hasAttribute("zen-essential") || tab.pinned) { ++ // Unload essential/pinned tabs instead of removing them ++ gZenPinnedTabManager.onCloseTabShortcut( ++ new KeyboardEvent('keydown', { key: 'w', ctrlKey: true }), ++ tab ++ ); ++ // Manually update UI since unloading doesn't trigger TabClose ++ this.detachTab(tab); ++ if (this.isOpen) { ++ this.removeClosingTabFromUI(tab); ++ } ++ } else { ++ gBrowser.removeTab(tab); ++ } + } + }, + +@@ -460,7 +476,7 @@ var ctrlTab = { // If the tab is hidden, don't add it to the list unless it's selected // (Normally hidden tabs would be unhidden when selected, but that doesn't // happen for Firefox View). @@ -21,7 +45,7 @@ index 958728cde19dd7cc24692baa89e11fcab816ab82..32e2b6af2536133f170bd5e14c47392d return; } -@@ -484,7 +485,7 @@ var ctrlTab = { +@@ -484,7 +500,7 @@ var ctrlTab = { }, open: function ctrlTab_open() { @@ -30,7 +54,7 @@ index 958728cde19dd7cc24692baa89e11fcab816ab82..32e2b6af2536133f170bd5e14c47392d return; } -@@ -763,7 +764,7 @@ var ctrlTab = { +@@ -763,7 +779,7 @@ var ctrlTab = { _initRecentlyUsedTabs() { this._recentlyUsedTabs = Array.prototype.filter.call( gBrowser.tabs, From ebab82cc71198aec69702d221d8edcc3491417fe Mon Sep 17 00:00:00 2001 From: Vedaant Date: Tue, 18 Nov 2025 19:42:04 -0800 Subject: [PATCH 2/2] fix(tabs): all essential are pinned and comment removal --- .../tabbrowser/content/browser-ctrlTab-js.patch | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/browser/components/tabbrowser/content/browser-ctrlTab-js.patch b/src/browser/components/tabbrowser/content/browser-ctrlTab-js.patch index 3c86305052..3e4b8d1984 100644 --- a/src/browser/components/tabbrowser/content/browser-ctrlTab-js.patch +++ b/src/browser/components/tabbrowser/content/browser-ctrlTab-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/tabbrowser/content/browser-ctrlTab.js b/browser/components/tabbrowser/content/browser-ctrlTab.js -index 958728cde19dd7cc24692baa89e11fcab816ab82..92de87cc8461146e0040ca8a59710bf5d46d685f 100644 +index 958728cde19dd7cc24692baa89e11fcab816ab82..89063cca2c26b92e0c8b23960e9cfb43ea59b557 100644 --- a/browser/components/tabbrowser/content/browser-ctrlTab.js +++ b/browser/components/tabbrowser/content/browser-ctrlTab.js @@ -249,7 +249,8 @@ var ctrlTab = { @@ -12,20 +12,18 @@ index 958728cde19dd7cc24692baa89e11fcab816ab82..92de87cc8461146e0040ca8a59710bf5 }, init: function ctrlTab_init() { -@@ -452,7 +453,22 @@ var ctrlTab = { +@@ -452,7 +453,20 @@ var ctrlTab = { remove: function ctrlTab_remove(aPreview) { if (aPreview._tab) { - gBrowser.removeTab(aPreview._tab); + const tab = aPreview._tab; + -+ if (tab.hasAttribute("zen-essential") || tab.pinned) { -+ // Unload essential/pinned tabs instead of removing them ++ if (tab.pinned) { + gZenPinnedTabManager.onCloseTabShortcut( + new KeyboardEvent('keydown', { key: 'w', ctrlKey: true }), + tab + ); -+ // Manually update UI since unloading doesn't trigger TabClose + this.detachTab(tab); + if (this.isOpen) { + this.removeClosingTabFromUI(tab); @@ -36,7 +34,7 @@ index 958728cde19dd7cc24692baa89e11fcab816ab82..92de87cc8461146e0040ca8a59710bf5 } }, -@@ -460,7 +476,7 @@ var ctrlTab = { +@@ -460,7 +474,7 @@ var ctrlTab = { // If the tab is hidden, don't add it to the list unless it's selected // (Normally hidden tabs would be unhidden when selected, but that doesn't // happen for Firefox View). @@ -45,7 +43,7 @@ index 958728cde19dd7cc24692baa89e11fcab816ab82..92de87cc8461146e0040ca8a59710bf5 return; } -@@ -484,7 +500,7 @@ var ctrlTab = { +@@ -484,7 +498,7 @@ var ctrlTab = { }, open: function ctrlTab_open() { @@ -54,7 +52,7 @@ index 958728cde19dd7cc24692baa89e11fcab816ab82..92de87cc8461146e0040ca8a59710bf5 return; } -@@ -763,7 +779,7 @@ var ctrlTab = { +@@ -763,7 +777,7 @@ var ctrlTab = { _initRecentlyUsedTabs() { this._recentlyUsedTabs = Array.prototype.filter.call( gBrowser.tabs,