diff --git a/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css b/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css index 65473b89..f93c6f6f 100644 --- a/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css +++ b/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css @@ -1106,7 +1106,7 @@ &::after { content: ""; inset: -50%; - filter: blur(15px) brightness(1.2); + filter: blur(20px); position: absolute; background-size: 100% 100%; background-clip: padding-box; diff --git a/src/browser/base/content/zen-styles/zen-workspaces.css b/src/browser/base/content/zen-styles/zen-workspaces.css index ab55b1a5..2717ceac 100644 --- a/src/browser/base/content/zen-styles/zen-workspaces.css +++ b/src/browser/base/content/zen-styles/zen-workspaces.css @@ -130,6 +130,9 @@ overflow: hidden; display: flex; gap: 0.5ch; + overflow-x: auto; + scrollbar-width: none; + scroll-behavior: smooth; } } diff --git a/src/browser/base/zen-components/ZenMediaController.mjs b/src/browser/base/zen-components/ZenMediaController.mjs index 19c28220..57bc92cd 100644 --- a/src/browser/base/zen-components/ZenMediaController.mjs +++ b/src/browser/base/zen-components/ZenMediaController.mjs @@ -192,15 +192,6 @@ class ZenMediaController { this._currentBrowser = browser; this.updatePipButton(); - - const positionState = mediaController.getPositionState(); - this.mediaControllersMap.set(mediaController.id, { - controller: mediaController, - browser, - position: positionState.position, - duration: positionState.duration, - lastUpdated: Date.now(), - }); } setupMediaControlUI(metadata, positionState) { @@ -244,6 +235,7 @@ class ZenMediaController { browser, position: positionState.position, duration: positionState.duration, + playbackRate: positionState.playbackRate, lastUpdated: Date.now(), }); @@ -292,6 +284,7 @@ class ZenMediaController { ...mediaController, position: event.position, duration: event.duration, + playbackRate: event.playbackRate, lastUpdated: Date.now(), }); @@ -333,6 +326,7 @@ class ZenMediaController { this.setupMediaControlUI(nextController.controller.getMetadata(), { position: nextController.position + (nextController.controller.isPlaying ? elapsedTime : 0), duration: nextController.duration, + playbackRate: nextController.playbackRate, }); this.showMediaControls(); diff --git a/src/browser/base/zen-components/ZenViewSplitter.mjs b/src/browser/base/zen-components/ZenViewSplitter.mjs index 33ab211b..e536a43f 100644 --- a/src/browser/base/zen-components/ZenViewSplitter.mjs +++ b/src/browser/base/zen-components/ZenViewSplitter.mjs @@ -981,7 +981,9 @@ class ZenViewSplitter extends ZenDOMOperatedFeature { layoutTree: this.calculateLayoutTree(tabs, gridType), }; this._data.push(splitData); - window.gBrowser.selectedTab = tabs[0]; + if (!this._sessionRestoring) { + window.gBrowser.selectedTab = tabs[0]; + } // Add tabs to the split view group let splitGroup = this._getSplitViewGroup(tabs); @@ -1739,6 +1741,7 @@ class ZenViewSplitter extends ZenDOMOperatedFeature { if (!data) { return; } + this._sessionRestoring = true; // We can just get the tab group with document.getElementById(group.groupId) // and add the tabs to it for (const group of data) { @@ -1748,6 +1751,15 @@ class ZenViewSplitter extends ZenDOMOperatedFeature { this.splitTabs([...tabs], group.gridType); } } + delete this._sessionRestoring; + } + + onAfterWorkspaceSessionRestore() { + if (this.currentView >= 0) { + // Activate all browsers in the split view + this.currentView = -1; + this.onLocationChange(gBrowser.selectedTab.linkedBrowser); + } } } diff --git a/src/browser/base/zen-components/ZenWorkspaces.mjs b/src/browser/base/zen-components/ZenWorkspaces.mjs index 0d7f3472..a1afd515 100644 --- a/src/browser/base/zen-components/ZenWorkspaces.mjs +++ b/src/browser/base/zen-components/ZenWorkspaces.mjs @@ -405,6 +405,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { _handleSwipeMayStart(event) { if (!this.workspaceEnabled) return; + if (event.target.closest('#zen-sidebar-bottom-buttons')) return; // Only handle horizontal swipes if (event.direction === event.DIRECTION_LEFT || event.direction === event.DIRECTION_RIGHT) { @@ -648,6 +649,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { if (gZenVerticalTabsManager._canReplaceNewTab && showed) { BrowserCommands.openTab(); } + gZenViewSplitter.onAfterWorkspaceSessionRestore(); } handleInitialTab(tab, isEmpty) { @@ -2415,6 +2417,17 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { const maxWidth = 100 / numButtons; parent.style.setProperty('--zen-overflowed-workspace-button-width', `${maxWidth}%`); this._processingResize = false; + + // Scroll to the active workspace button if it's not visible + const activeButton = parent.querySelector('.zen-workspace-button.active'); + if (!activeButton) { + return; + } + const parentRect = parent.getBoundingClientRect(); + const activeRect = activeButton.getBoundingClientRect(); + if (activeRect.left < parentRect.left || activeRect.right > parentRect.right) { + parent.scrollLeft = activeButton.offsetLeft; + } }); } })(); diff --git a/src/browser/components/sessionstore/SessionStore-sys-mjs.patch b/src/browser/components/sessionstore/SessionStore-sys-mjs.patch index 3f6b5aa1..b4ab32df 100644 --- a/src/browser/components/sessionstore/SessionStore-sys-mjs.patch +++ b/src/browser/components/sessionstore/SessionStore-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs -index f814772114948f87cbb3c3a7231c95ea1f68d776..ee358a46956d5f09983fa98a202085bac69c8b27 100644 +index f814772114948f87cbb3c3a7231c95ea1f68d776..38913eb9dee97b42697440560f7a1bab1ffe9f15 100644 --- a/browser/components/sessionstore/SessionStore.sys.mjs +++ b/browser/components/sessionstore/SessionStore.sys.mjs @@ -3171,7 +3171,7 @@ var SessionStoreInternal = { @@ -54,17 +54,6 @@ index f814772114948f87cbb3c3a7231c95ea1f68d776..ee358a46956d5f09983fa98a202085ba this._log.debug( `restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs` ); -@@ -5933,8 +5936,8 @@ var SessionStoreInternal = { - let isRemotenessUpdate = options.isRemotenessUpdate; - - let willRestoreImmediately = -- options.restoreImmediately || tabbrowser.selectedBrowser == browser; -- -+ options.restoreImmediately || tabbrowser.selectedBrowser == browser -+ || (tabbrowser.selectedTab.group?.id == tab.group?.id); - let isBrowserInserted = browser.isConnected; - - // Increase the busy state counter before modifying the tab. @@ -6086,8 +6089,23 @@ var SessionStoreInternal = { // Most of tabData has been restored, now continue with restoring diff --git a/surfer.json b/surfer.json index cd2b1a8a..b7018c92 100644 --- a/surfer.json +++ b/surfer.json @@ -19,7 +19,7 @@ "brandShortName": "Zen", "brandFullName": "Zen Browser", "release": { - "displayVersion": "1.10.1b", + "displayVersion": "1.10.2b", "github": { "repo": "zen-browser/desktop" }, @@ -39,7 +39,7 @@ "brandShortName": "Twilight", "brandFullName": "Zen Twilight", "release": { - "displayVersion": "1.10.1t", + "displayVersion": "1.10.2t", "github": { "repo": "zen-browser/desktop" }