forked from ZenBrowserMirrors/zen-desktop
chore: Better support for restoring previous tabs, b=(no-bug), c=workspaces
This commit is contained in:
parent
cc1619ab5d
commit
1f68a45417
2 changed files with 48 additions and 29 deletions
|
@ -1,5 +1,5 @@
|
||||||
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
|
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
|
||||||
index 6dece2b9d0462d90a28e75350ce983d87816ef73..1d179c969f2fc29f8664ddae4a1536a9b95e7327 100644
|
index 6dece2b9d0462d90a28e75350ce983d87816ef73..a2fd09d94746bbb8ba16c5e234c6e99c2eb25c4c 100644
|
||||||
--- a/browser/components/tabbrowser/content/tabbrowser.js
|
--- a/browser/components/tabbrowser/content/tabbrowser.js
|
||||||
+++ b/browser/components/tabbrowser/content/tabbrowser.js
|
+++ b/browser/components/tabbrowser/content/tabbrowser.js
|
||||||
@@ -415,11 +415,45 @@
|
@@ -415,11 +415,45 @@
|
||||||
|
@ -383,7 +383,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..1d179c969f2fc29f8664ddae4a1536a9
|
||||||
if (typeof index != "number") {
|
if (typeof index != "number") {
|
||||||
// Move the new tab after another tab if needed, to the end otherwise.
|
// Move the new tab after another tab if needed, to the end otherwise.
|
||||||
- index = Infinity;
|
- index = Infinity;
|
||||||
+ index = Services.prefs.getBoolPref("zen.view.show-newtab-button-top") ? this.pinnedTabCount : Infinity;
|
+ index = Services.prefs.getBoolPref("zen.view.show-newtab-button-top") ? this._numVisiblePinTabsWithoutCollapsed : Infinity;
|
||||||
if (
|
if (
|
||||||
!bulkOrderedOpen &&
|
!bulkOrderedOpen &&
|
||||||
((openerTab &&
|
((openerTab &&
|
||||||
|
@ -403,9 +403,10 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..1d179c969f2fc29f8664ddae4a1536a9
|
||||||
- index = Math.max(index, 0);
|
- index = Math.max(index, 0);
|
||||||
- index = Math.min(index, this.pinnedTabCount);
|
- index = Math.min(index, this.pinnedTabCount);
|
||||||
+ index = Math.max(index, tab.hasAttribute("zen-essential") ? 0 : this._numZenEssentials);
|
+ index = Math.max(index, tab.hasAttribute("zen-essential") ? 0 : this._numZenEssentials);
|
||||||
+ index = Math.min(index, tab.hasAttribute("zen-essential") ? this._numZenEssentials : this.pinnedTabCount);
|
+ index = Math.min(index, tab.hasAttribute("zen-essential") ? this._numZenEssentials : this._numVisiblePinTabsWithoutCollapsed);
|
||||||
} else {
|
} else {
|
||||||
index = Math.max(index, this.pinnedTabCount);
|
- index = Math.max(index, this.pinnedTabCount);
|
||||||
|
+ index = Math.max(index, this._numVisiblePinTabsWithoutCollapsed);
|
||||||
index = Math.min(index, this.tabContainer.ariaFocusableItems.length);
|
index = Math.min(index, this.tabContainer.ariaFocusableItems.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -799,37 +799,33 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let showed = false;
|
let showed = false;
|
||||||
|
let resolveSelectPromise;
|
||||||
|
let selectPromise = new Promise((resolve) => {
|
||||||
|
resolveSelectPromise = resolve;
|
||||||
|
});
|
||||||
|
|
||||||
const cleanup = () => {
|
const cleanup = () => {
|
||||||
if (this._initialTab?._veryPossiblyEmpty && !this._initialTab?.selected) {
|
|
||||||
gBrowser.removeTab(this._initialTab, {
|
|
||||||
skipSessionStore: true,
|
|
||||||
animate: false,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
delete this._tabToSelect;
|
delete this._tabToSelect;
|
||||||
delete this._tabToRemoveForEmpty;
|
delete this._tabToRemoveForEmpty;
|
||||||
|
resolveSelectPromise();
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this._initialTab) {
|
let removedEmptyTab = false;
|
||||||
if (this._initialTab._shouldRemove && this._initialTab._veryPossiblyEmpty) {
|
if (this._initialTab && !(this._initialTab._shouldRemove && this._initialTab._veryPossiblyEmpty)) {
|
||||||
this._removedByStartupPage = true;
|
gBrowser.selectedTab = this._initialTab;
|
||||||
gBrowser.removeTab(this._initialTab, {
|
this.moveTabToWorkspace(this._initialTab, this.activeWorkspace);
|
||||||
skipSessionStore: true,
|
gBrowser.moveTabTo(this._initialTab, { forceUngrouped: true, tabIndex: 0 });
|
||||||
});
|
removedEmptyTab = true;
|
||||||
} else {
|
|
||||||
this.moveTabToWorkspace(this._initialTab, this.activeWorkspace);
|
|
||||||
gBrowser.selectedTab = this._initialTab;
|
|
||||||
gBrowser.moveTabTo(this._initialTab, { forceUngrouped: true, tabIndex: 0 });
|
|
||||||
}
|
|
||||||
delete this._initialTab;
|
delete this._initialTab;
|
||||||
}
|
}
|
||||||
if (this._tabToRemoveForEmpty) {
|
|
||||||
|
if (this._tabToRemoveForEmpty && !removedEmptyTab) {
|
||||||
const tabs = gBrowser.tabs.filter((tab) => !tab.collapsed && !tab.hasAttribute('zen-empty-tab'));
|
const tabs = gBrowser.tabs.filter((tab) => !tab.collapsed && !tab.hasAttribute('zen-empty-tab'));
|
||||||
if (
|
if (
|
||||||
typeof this._tabToSelect === 'number' &&
|
typeof this._tabToSelect === 'number' &&
|
||||||
this._tabToSelect >= 0 &&
|
this._tabToSelect >= 0 &&
|
||||||
tabs[this._tabToSelect] &&
|
tabs[this._tabToSelect] &&
|
||||||
this._shouldShowTab(tabs[this._tabToSelect]) &&
|
(await this.#shouldShowTabInCurrentWorkspace(tabs[this._tabToSelect])) &&
|
||||||
tabs[this._tabToSelect] !== this._tabToRemoveForEmpty
|
tabs[this._tabToSelect] !== this._tabToRemoveForEmpty
|
||||||
) {
|
) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -844,15 +840,29 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||||
} else {
|
} else {
|
||||||
this.selectEmptyTab();
|
this.selectEmptyTab();
|
||||||
showed = true;
|
showed = true;
|
||||||
this._removedByStartupPage = true;
|
setTimeout(() => {
|
||||||
gBrowser.removeTab(this._tabToRemoveForEmpty, {
|
this._removedByStartupPage = true;
|
||||||
skipSessionStore: true,
|
gBrowser.removeTab(this._tabToRemoveForEmpty, {
|
||||||
});
|
skipSessionStore: true,
|
||||||
cleanup();
|
});
|
||||||
|
cleanup();
|
||||||
|
}, 0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
cleanup();
|
setTimeout(() => {
|
||||||
|
cleanup();
|
||||||
|
}, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await selectPromise;
|
||||||
|
if (this._initialTab) {
|
||||||
|
this._removedByStartupPage = true;
|
||||||
|
gBrowser.removeTab(this._initialTab, {
|
||||||
|
skipSessionStore: true,
|
||||||
|
});
|
||||||
|
delete this._initialTab;
|
||||||
|
}
|
||||||
|
|
||||||
if (gZenVerticalTabsManager._canReplaceNewTab && showed) {
|
if (gZenVerticalTabsManager._canReplaceNewTab && showed) {
|
||||||
BrowserCommands.openTab();
|
BrowserCommands.openTab();
|
||||||
}
|
}
|
||||||
|
@ -897,6 +907,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||||
!workspaces.workspaces.find((workspace) => workspace.uuid === workspaceID)
|
!workspaces.workspaces.find((workspace) => workspace.uuid === workspaceID)
|
||||||
) {
|
) {
|
||||||
// Remove any tabs where their workspace doesn't exist anymore
|
// Remove any tabs where their workspace doesn't exist anymore
|
||||||
|
gBrowser.unpinTab(tab);
|
||||||
gBrowser.removeTab(tab, {
|
gBrowser.removeTab(tab, {
|
||||||
skipSessionStore: true,
|
skipSessionStore: true,
|
||||||
closeWindowWithLastTab: false,
|
closeWindowWithLastTab: false,
|
||||||
|
@ -2259,6 +2270,11 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||||
return !(aTab?.hasAttribute('zen-essential') || (aTab?.pinned && aTab?.hasAttribute('pending')));
|
return !(aTab?.hasAttribute('zen-essential') || (aTab?.pinned && aTab?.hasAttribute('pending')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async #shouldShowTabInCurrentWorkspace(tab) {
|
||||||
|
const currentWorkspace = this.getActiveWorkspaceFromCache();
|
||||||
|
return this._shouldShowTab(tab, currentWorkspace.uuid, currentWorkspace.containerTabId, await this._workspaces());
|
||||||
|
}
|
||||||
|
|
||||||
_shouldShowTab(tab, workspaceUuid, containerId, workspaces) {
|
_shouldShowTab(tab, workspaceUuid, containerId, workspaces) {
|
||||||
const isEssential = tab.getAttribute('zen-essential') === 'true';
|
const isEssential = tab.getAttribute('zen-essential') === 'true';
|
||||||
const tabWorkspaceId = tab.getAttribute('zen-workspace-id');
|
const tabWorkspaceId = tab.getAttribute('zen-workspace-id');
|
||||||
|
@ -2398,6 +2414,8 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTimeout(gURLBar.formatValue.bind(gURLBar), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
async _fixCtrlTabBehavior() {
|
async _fixCtrlTabBehavior() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue