Merge pull request #7464 from zen-browser/new-split-essentials

Allow splitting essentials and pinned tabs
This commit is contained in:
mr. m
2025-04-09 00:17:39 +02:00
committed by GitHub
2 changed files with 26 additions and 8 deletions

View File

@@ -188,8 +188,8 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
this.fakeBrowser || this.fakeBrowser ||
!this._lastOpenedTab || !this._lastOpenedTab ||
(this._lastOpenedTab && (this._lastOpenedTab &&
(this._lastOpenedTab.getAttribute('zen-workspace-id') !== draggedTab.getAttribute('zen-workspace-id') || this._lastOpenedTab.getAttribute('zen-workspace-id') !== draggedTab.getAttribute('zen-workspace-id') &&
this._lastOpenedTab.hasAttribute('zen-essential'))) !this._lastOpenedTab.hasAttribute('zen-essential'))
) { ) {
return; return;
} }
@@ -887,7 +887,7 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
return false; return false;
} }
for (const tab of window.gBrowser.selectedTabs) { for (const tab of window.gBrowser.selectedTabs) {
if (tab.splitView || tab.hasAttribute('zen-empty-tab') || tab.hasAttribute('zen-essential')) { if (tab.splitView || tab.hasAttribute('zen-empty-tab')) {
return false; return false;
} }
} }
@@ -945,14 +945,14 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
*/ */
splitTabs(tabs, gridType, initialIndex = 0) { splitTabs(tabs, gridType, initialIndex = 0) {
// TODO: Add support for splitting essential tabs // TODO: Add support for splitting essential tabs
tabs = tabs.filter((t) => !t.hidden && !t.hasAttribute('zen-empty-tab') && !t.hasAttribute('zen-essential')); tabs = tabs.filter((t) => !t.hidden && !t.hasAttribute('zen-empty-tab'));
if (tabs.length < 2 || tabs.length > this.MAX_TABS) { if (tabs.length < 2 || tabs.length > this.MAX_TABS) {
return; return;
} }
this._moveTabsToContainer(tabs, tabs[initialIndex]);
const existingSplitTab = tabs.find((tab) => tab.splitView); const existingSplitTab = tabs.find((tab) => tab.splitView);
if (existingSplitTab) { if (existingSplitTab) {
this._moveTabsToContainer(tabs, tabs[initialIndex]);
const groupIndex = this._data.findIndex((group) => group.tabs.includes(existingSplitTab)); const groupIndex = this._data.findIndex((group) => group.tabs.includes(existingSplitTab));
const group = this._data[groupIndex]; const group = this._data[groupIndex];
const gridTypeChange = gridType && group.gridType !== gridType; const gridTypeChange = gridType && group.gridType !== gridType;
@@ -978,6 +978,24 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
this.activateSplitView(group, true); this.activateSplitView(group, true);
return; return;
} }
// We are here if none of the tabs have been previously split
// If there's ANY pinned tab on the list, we clone the pinned tab
// state to all the tabs
const allArePinned = tabs.every((tab) => tab.pinned);
const allAreEssential = tabs.every((tab) => tab.hasAttribute('zen-essential'));
const thereIsOnePinned = tabs.some((tab) => tab.pinned);
const thereIsOneEssential = tabs.some((tab) => tab.hasAttribute('zen-essential'));
if ((thereIsOneEssential && !allAreEssential) || (thereIsOnePinned && !allArePinned)) {
for (let i = 0; i < tabs.length; i++) {
const tab = tabs[i];
if (tab.pinned) {
tabs[i] = gBrowser.duplicateTab(tab, true);
}
}
}
gridType ??= 'grid'; gridType ??= 'grid';
const splitData = { const splitData = {

View File

@@ -6,7 +6,7 @@
"version": { "version": {
"product": "firefox", "product": "firefox",
"version": "137.0.1", "version": "137.0.1",
"candidate": "137.0" "candidate": "137.0.1"
}, },
"buildOptions": { "buildOptions": {
"generateBranding": true "generateBranding": true
@@ -19,7 +19,7 @@
"brandShortName": "Zen", "brandShortName": "Zen",
"brandFullName": "Zen Browser", "brandFullName": "Zen Browser",
"release": { "release": {
"displayVersion": "1.11.1b", "displayVersion": "1.11.2b",
"github": { "github": {
"repo": "zen-browser/desktop" "repo": "zen-browser/desktop"
}, },
@@ -39,7 +39,7 @@
"brandShortName": "Twilight", "brandShortName": "Twilight",
"brandFullName": "Zen Twilight", "brandFullName": "Zen Twilight",
"release": { "release": {
"displayVersion": "1.11.1t", "displayVersion": "1.11.2t",
"github": { "github": {
"repo": "zen-browser/desktop" "repo": "zen-browser/desktop"
} }