diff --git a/src/browser/base/content/zen-assets.inc.xhtml b/src/browser/base/content/zen-assets.inc.xhtml
index 1404e03b6..036308d06 100644
--- a/src/browser/base/content/zen-assets.inc.xhtml
+++ b/src/browser/base/content/zen-assets.inc.xhtml
@@ -41,14 +41,13 @@
# Scripts used all over the browser
-
-
-
+
+s
diff --git a/src/browser/components/tabbrowser/content/tabbrowser-js.patch b/src/browser/components/tabbrowser/content/tabbrowser-js.patch
index d1cfe8b17..ad66c739e 100644
--- a/src/browser/components/tabbrowser/content/tabbrowser-js.patch
+++ b/src/browser/components/tabbrowser/content/tabbrowser-js.patch
@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
-index d7765e0adb37216d35f2125abf96025cbb150bab..4913c2e6cfb4f77bd8f2c0f33310c27475172132 100644
+index d7765e0adb37216d35f2125abf96025cbb150bab..d787c39f68ea4507b2cb902df325498dd65b1fba 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -405,6 +405,7 @@
@@ -411,9 +411,12 @@ index d7765e0adb37216d35f2125abf96025cbb150bab..4913c2e6cfb4f77bd8f2c0f33310c274
});
}
-@@ -4122,7 +4247,7 @@
+@@ -4120,9 +4245,9 @@
+ }
+
// Add a new tab if needed.
- if (!tab) {
+- if (!tab) {
++ if (!tab || tab?._markedForReplacement) {
let createLazyBrowser =
- restoreTabsLazily && !select && !tabData.pinned;
+ restoreTabsLazily && !(tabData.pinned && !Services.prefs.getBoolPref("browser.sessionstore.restore_pinned_tabs_on_demand"));
@@ -470,10 +473,10 @@ index d7765e0adb37216d35f2125abf96025cbb150bab..4913c2e6cfb4f77bd8f2c0f33310c274
+ gZenWorkspaces._initialTab._shouldRemove = true;
+ }
+ }
-+ }
+ }
+ else {
+ gZenWorkspaces._tabToRemoveForEmpty = this.selectedTab;
- }
++ }
+ this._hasAlreadyInitializedZenSessionStore = true;
if (tabs.length > 1 || !tabs[0].selected) {
diff --git a/src/zen/sessionstore/ZenWindowSync.sys.mjs b/src/zen/sessionstore/ZenWindowSync.sys.mjs
index 361de92e0..38130661b 100644
--- a/src/zen/sessionstore/ZenWindowSync.sys.mjs
+++ b/src/zen/sessionstore/ZenWindowSync.sys.mjs
@@ -16,6 +16,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
TabStateCache: "resource:///modules/sessionstore/TabStateCache.sys.mjs",
setTimeout: "resource://gre/modules/Timer.sys.mjs",
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
+ RunState: "resource:///modules/sessionstore/RunState.sys.mjs",
});
XPCOMUtils.defineLazyPreferenceGetter(lazy, "gWindowSyncEnabled", "zen.window-sync.enabled", true);
@@ -1268,7 +1269,8 @@ class nsZenWindowSync {
!window?.gBrowser ||
this.#lastFocusedWindow?.deref() === window ||
window.closing ||
- !window.toolbar.visible
+ !window.toolbar.visible ||
+ lazy.RunState.isQuitting
) {
return;
}
diff --git a/src/zen/workspaces/ZenWorkspaces.mjs b/src/zen/workspaces/ZenWorkspaces.mjs
index 135a2bd98..69a2d2ea9 100644
--- a/src/zen/workspaces/ZenWorkspaces.mjs
+++ b/src/zen/workspaces/ZenWorkspaces.mjs
@@ -450,16 +450,13 @@ class nsZenWorkspaces {
workspaceWrapper.hidden = true; // Hide workspace while creating it
}
container.appendChild(workspaceWrapper);
- this.#organizeTabsToWorkspaceSections(
- workspace,
- workspaceWrapper.tabsContainer,
- workspaceWrapper.pinnedTabsContainer,
- tabs
- );
+ this.#organizeTabsToWorkspaceSections(workspace, workspaceWrapper, tabs);
workspaceWrapper.checkPinsExistence();
}
- #organizeTabsToWorkspaceSections(workspace, section, pinnedSection, tabs) {
+ #organizeTabsToWorkspaceSections(workspace, spaceElement, tabs) {
+ let section = spaceElement.tabsContainer;
+ let pinnedSection = spaceElement.pinnedTabsContainer;
const workspaceTabs = Array.from(tabs).filter(
(tab) =>
tab.getAttribute("zen-workspace-id") === workspace.uuid &&
@@ -1062,6 +1059,7 @@ class nsZenWorkspaces {
}
// note: We cant access `gZenVerticalTabsManager._canReplaceNewTab` this early
if (isEmpty && Services.prefs.getBoolPref("zen.urlbar.replace-newtab", true)) {
+ tab._markedForReplacement = true;
this._tabToRemoveForEmpty = tab;
} else {
this._initialTab = tab;