feat: Enhance folder creation with split-view groups (#9968)

This commit is contained in:
octaviusz
2025-08-22 23:45:39 +03:00
committed by GitHub
parent 777bbfeef1
commit 6b5131bbde
2 changed files with 36 additions and 12 deletions

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index d80a66a01002e78a9c65545d08fe786328ddf124..749991884735a1a6d7b1a2c2e1c77f7eae2e5c28 100644
index d80a66a01002e78a9c65545d08fe786328ddf124..1c01a1931a2d0b98f2d8f9a3b27e565c1ec15e92 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -422,15 +422,60 @@
@@ -718,8 +718,12 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..749991884735a1a6d7b1a2c2e1c77f7e
} else if (targetElement) {
targetElement.after(element);
} else {
@@ -6230,7 +6388,7 @@
if (!this.isTab(aTab)) {
@@ -6227,10 +6385,10 @@
* @param {TabMetricsContext} [metricsContext]
*/
moveTabToGroup(aTab, aGroup, metricsContext) {
- if (!this.isTab(aTab)) {
+ if (!this.isTab(aTab) && !aTab.hasAttribute('split-view-group')) {
throw new Error("Can only move a tab into a tab group");
}
- if (aTab.pinned) {

View File

@@ -615,12 +615,26 @@
contextMenu.triggerNode &&
(contextMenu.triggerNode.tab || contextMenu.triggerNode.closest('tab'));
tabs.push(triggerTab, ...gBrowser.selectedTabs);
const selectedTabs = gBrowser.selectedTabs;
if (selectedTabs.length > 1) {
tabs.push(triggerTab, ...gBrowser.selectedTabs);
} else {
tabs.push(triggerTab);
}
if (isFromToolbar) {
tabs = [];
}
const group = this.createFolder(tabs, { insertBefore: triggerTab, renameFolder: true });
const canInsertBefore =
!triggerTab.hasAttribute('zen-essential') &&
!triggerTab?.group?.hasAttribute('split-view-group') &&
this.canDropElement({ isZenFolder: true }, triggerTab);
const group = this.createFolder(tabs, {
insertAfter: !canInsertBefore ? triggerTab?.group : null,
insertBefore: canInsertBefore ? triggerTab : null,
renameFolder: true,
});
if (!group) return;
this.#groupInit(group);
}
@@ -695,19 +709,25 @@
}
canDropElement(element, targetElement) {
if (element?.isZenFolder && targetElement?.group?.level >= ZEN_MAX_SUBFOLDERS) {
const isZenFolder = element?.isZenFolder;
const level = targetElement?.group?.level + 1;
if (isZenFolder && level >= ZEN_MAX_SUBFOLDERS) {
return false;
}
return true;
}
createFolder(tabs = [], options = {}) {
for (const tab of tabs) {
if (tab.hasAttribute('zen-essential')) return;
if (tab.group?.hasAttribute('split-view-group')) return;
const filteredTabs = tabs
.filter((tab) => !tab.hasAttribute('zen-essential'))
.map((tab) => {
gBrowser.pinTab(tab);
if (tab?.group?.hasAttribute('split-view-group')) {
tab = tab.group;
}
return tab;
});
gBrowser.pinTab(tab);
}
const workspacePinned = gZenWorkspaces.workspaceElement(
options.workspaceId
)?.pinnedTabsContainer;
@@ -724,7 +744,7 @@
_forZenEmptyTab: true,
});
tabs = [emptyTab, ...tabs];
tabs = [emptyTab, ...filteredTabs];
const folder = this._createFolderNode(options);
if (options.initialPinId) {