feat: Fixed issue with workspace changes getting stuck, b=bug #9334, c=common, compact-mode, glance, split-view, tests, workspaces

This commit is contained in:
Mr. M
2025-09-17 16:08:55 +02:00
parent 801533bf26
commit 16ec5b36c1
10 changed files with 74 additions and 58 deletions

View File

@@ -188,7 +188,11 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature {
* @param {boolean} [forUnsplit=false] - Whether the removal is for unsplitting.
* @param {boolean} [dontRebuildGrid=false] - Whether to skip rebuilding the grid layout.
*/
removeTabFromGroup(tab, groupIndex, { forUnsplit = false, dontRebuildGrid = false } = {}) {
removeTabFromGroup(
tab,
groupIndex,
{ forUnsplit = false, dontRebuildGrid = false, changeTab = true } = {}
) {
const group = this._data[groupIndex];
const tabIndex = group.tabs.indexOf(tab);
group.tabs.splice(tabIndex, 1);
@@ -206,7 +210,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature {
}
}
this.removeGroup(groupIndex);
gBrowser.selectedTab = remainingTabs[remainingTabs.length - 1];
if (changeTab) {
gBrowser.selectedTab = remainingTabs[remainingTabs.length - 1];
}
} else {
const node = this.getSplitNodeFromTab(tab);
const toUpdate = this.removeNode(node);
@@ -1940,14 +1946,19 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature {
window.addEventListener(
'ZenURLBarClosed',
(event) => {
const { onElementPicked } = event.detail;
const { onElementPicked, onSwitch } = event.detail;
const groupIndex = this._data.findIndex((group) => group.tabs.includes(emptyTab));
const newSelectedTab = gBrowser.selectedTab;
const cleanup = () => {
this.removeTabFromGroup(emptyTab, groupIndex);
this.removeTabFromGroup(emptyTab, groupIndex, { changeTab: false });
};
if (onElementPicked) {
if (newSelectedTab === emptyTab || newSelectedTab === selectedTab) {
if (
newSelectedTab === emptyTab ||
newSelectedTab === selectedTab ||
selectedTab.getAttribute('zen-workspace-id') !==
newSelectedTab.getAttribute('zen-workspace-id')
) {
cleanup();
return;
}
@@ -1956,7 +1967,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature {
this.resetTabState(emptyTab, false);
this.splitTabs([selectedTab, newSelectedTab], 'grid', 1);
} else {
gBrowser.selectedTab = selectedTab;
if (!onSwitch) {
gBrowser.selectedTab = selectedTab;
}
cleanup();
}
},