Refactor watermark handling and improve tab switching logic for enhanced user experience

This commit is contained in:
mr. M
2025-02-21 18:37:53 +01:00
parent 68cf549df3
commit df597e6452
7 changed files with 71 additions and 46 deletions

View File

@@ -1,5 +1,4 @@
{
const lazy = {};
var ZenStartup = {
init() {
this.openWatermark();
@@ -49,18 +48,30 @@
if (!Services.prefs.getBoolPref('zen.watermark.enabled', false)) {
return;
}
const watermark = window.MozXULElement.parseXULToFragment(`
<html:div id="zen-watermark">
<image src="chrome://branding/content/about-logo.png" />
</html:div>
`);
document.body.appendChild(watermark);
for (let elem of document.querySelectorAll('#browser > *, #urlbar')) {
elem.style.opacity = 0;
}
},
closeWatermark() {
const watermark = document.getElementById('zen-watermark');
if (watermark) {
watermark.setAttribute('hidden', 'true');
document.documentElement.removeAttribute('zen-before-loaded');
if (Services.prefs.getBoolPref('zen.watermark.enabled', false)) {
gZenUIManager.motion
.animate(
'#browser > *, #urlbar',
{
opacity: [0, 1],
},
{
delay: 0.6,
easing: 'ease-in-out',
}
)
.then(() => {
for (let elem of document.querySelectorAll('#browser > *, #urlbar')) {
elem.style.removeProperty('opacity');
}
});
}
},

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..26a5b896de61ce73b03d1b378487d0e84c6a0a5b 100644
index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..56ed0bffb0ec0863c18ef881acb4efcc590e4a96 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -32,6 +32,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -42,3 +42,20 @@ index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..26a5b896de61ce73b03d1b378487d0e8
},
openURIInFrame: function browser_openURIInFrame(
@@ -6351,7 +6361,7 @@ function switchToTabHavingURI(
ignoreQueryString || replaceQueryString,
ignoreFragmentWhenComparing
);
- let browsers = aWindow.gBrowser.browsers;
+ let browsers = aWindow.ZenWorkspaces.allUsedBrowsers;
for (let i = 0; i < browsers.length; i++) {
let browser = browsers[i];
let browserCompare = cleanURL(
@@ -6364,6 +6374,7 @@ function switchToTabHavingURI(
continue;
}
if (requestedCompare == browserCompare) {
+ aWindow.ZenWorkspaces.switchIfNeeded(browser);
// If adoptIntoActiveWindow is set, and this is a cross-window switch,
// adopt the tab into the current window, after the active tab.
let doAdopt =

View File

@@ -1,8 +1,16 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index 891c067d6ad718061c410c04743bed25744504b5..b7ded9691225068b23e4d6a5113242d0c0f5f842 100644
index 891c067d6ad718061c410c04743bed25744504b5..135c8515bbcb534c3f900e7ba1ee4d3b9fe17436 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -99,6 +99,8 @@
@@ -25,6 +25,7 @@
sizemode="normal"
retargetdocumentfocus="urlbar-input"
scrolling="false"
+ zen-before-loaded="true"
persist="screenX screenY width height sizemode"
data-l10n-sync="true">
<head>
@@ -99,6 +100,8 @@
<title data-l10n-id="browser-main-window-default-title"></title>
@@ -11,7 +19,7 @@ index 891c067d6ad718061c410c04743bed25744504b5..b7ded9691225068b23e4d6a5113242d0
# All JS files which are needed by browser.xhtml and other top level windows to
# support MacOS specific features *must* go into the global-scripts.inc file so
# that they can be shared with macWindow.inc.xhtml.
@@ -143,6 +145,7 @@
@@ -143,6 +146,7 @@
window.addEventListener("DOMContentLoaded",
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
</script>
@@ -19,7 +27,7 @@ index 891c067d6ad718061c410c04743bed25744504b5..b7ded9691225068b23e4d6a5113242d0
</head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
# All sets except for popupsets (commands, keys, and stringbundles)
@@ -164,9 +167,13 @@
@@ -164,9 +168,13 @@
</vbox>
</html:template>

View File

@@ -26,6 +26,11 @@
}
}
:root[zen-before-loaded='true'] #browser > *,
:root[zen-before-loaded='true'] #urlbar {
opacity: 0 !important;
}
#browser {
width: 100%;
background: var(--zen-main-browser-background) !important;

View File

@@ -318,7 +318,6 @@
@media (-moz-bool-pref: 'zen.view.compact.color-toolbar') {
background-attachment: fixed;
backdrop-filter: blur(5px);
background: var(--zen-main-browser-background-toolbar);
background-size: 100% 2000px;
border-bottom: 1px solid var(--zen-colors-border);

View File

@@ -11,35 +11,6 @@
right: 1.5%;
}
/* Watermark */
#zen-watermark {
--zen-themed-toolbar-bg-transparency: 1 !important;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: var(--zen-main-browser-background);
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
}
#zen-watermark image {
opacity: 0.2;
filter: grayscale(100%);
width: 200px;
height: 200px;
}
#zen-watermark[hidden='true'] {
transition: 0.6s;
opacity: 0;
pointer-events: none;
}
#zen-workspaces-button .zen-workspace-sidebar-name {
margin-left: 10px;
display: none;

View File

@@ -107,7 +107,6 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}
selectEmptyTab() {
console.log(new Error().stack);
if (this._emptyTab && Services.prefs.getBoolPref('zen.urlbar.replace-newtab')) {
gBrowser.selectedTab = this._emptyTab;
return this._emptyTab;
@@ -2227,6 +2226,13 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
return this._allStoredTabs;
}
get allUsedBrowsers() {
if (!this._hasInitializedTabsStrip) {
return gBrowser.browsers;
}
return Array.from(gBrowser.tabpanels.querySelectorAll('browser'));
}
get pinnedTabCount() {
return this.pinnedTabsContainer.children.length - 1;
}
@@ -2245,4 +2251,12 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
this.moveTabToWorkspace(tab, this.activeWorkspace);
}
}
switchIfNeeded(browser) {
const tab = gBrowser.getTabForBrowser(browser);
const workspaceId = tab.getAttribute('zen-workspace-id');
if (!tab.hasAttribute('zen-essential') && workspaceId !== this.activeWorkspace) {
this.changeWorkspace({ uuid: workspaceId });
}
}
})();