From ef259f58aa1836c6d8428ff1229f774f5c44c6b8 Mon Sep 17 00:00:00 2001 From: Andrey Bochkarev <50177704+octaviusz@users.noreply.github.com> Date: Mon, 18 May 2026 23:26:49 +0300 Subject: [PATCH 01/31] no-bug: Fix cyclic workspace switching (gh-13743) --- src/zen/drag-and-drop/ZenDragAndDrop.js | 2 +- src/zen/spaces/ZenSpaceManager.mjs | 55 ++++++++++++++++++------- src/zen/spaces/zen-workspaces.css | 2 + 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/src/zen/drag-and-drop/ZenDragAndDrop.js b/src/zen/drag-and-drop/ZenDragAndDrop.js index 360e8f75f..0c9d9d427 100644 --- a/src/zen/drag-and-drop/ZenDragAndDrop.js +++ b/src/zen/drag-and-drop/ZenDragAndDrop.js @@ -725,7 +725,7 @@ .changeWorkspaceShortcut( isNearLeftEdge ? -1 : 1, false, - /* Disable wrapping */ true + /* Disable wrapping */ false ) .then(spaceChanged => { this.#onSpaceChanged(spaceChanged, dt); diff --git a/src/zen/spaces/ZenSpaceManager.mjs b/src/zen/spaces/ZenSpaceManager.mjs index 725d652bb..a16f88711 100644 --- a/src/zen/spaces/ZenSpaceManager.mjs +++ b/src/zen/spaces/ZenSpaceManager.mjs @@ -1741,13 +1741,26 @@ class nsZenWorkspaces { const otherContainersEssentials = document.querySelectorAll( `#zen-essentials .zen-workspace-tabs-section` ); + let nextSpaceIdx; + const spaceLen = workspaces.length; + if (offsetPixels > 0) { + nextSpaceIdx = (workspaceIndex - 1 + spaceLen) % spaceLen; + } else if (offsetPixels < 0) { + nextSpaceIdx = (workspaceIndex + 1) % spaceLen; + } else { + nextSpaceIdx = workspaceIndex; + } const workspaceContextId = workspace.containerTabId; - const nextWorkspaceContextId = - workspaces[workspaceIndex + (offsetPixels > 0 ? -1 : 1)]?.containerTabId; + const nextWorkspaceContextId = workspaces[nextSpaceIdx]?.containerTabId; for (const otherWorkspace of workspaces) { const element = this.workspaceElement(otherWorkspace.uuid); - const newTransform = - -(workspaceIndex - workspaces.indexOf(otherWorkspace)) * 100; + let diff = workspaces.indexOf(otherWorkspace) - workspaceIndex; + if (diff > Math.floor(spaceLen / 2)) { + diff -= spaceLen; + } else if (diff < -Math.floor(spaceLen / 2)) { + diff += spaceLen; + } + const newTransform = diff * 100; element.style.transform = `translateX(${newTransform + offsetPixels / 2}%)`; } // Hide other essentials with different containerTabId @@ -1781,8 +1794,7 @@ class nsZenWorkspaces { } if (offsetPixels) { // Find the next workspace we are scrolling to - const nextWorkspace = - workspaces[workspaceIndex + (offsetPixels > 0 ? -1 : 1)]; + const nextWorkspace = workspaces[nextSpaceIdx]; if (nextWorkspace) { const { gradient: nextGradient, @@ -1892,10 +1904,17 @@ class nsZenWorkspaces { this._animatingChange = true; const animations = []; const workspaces = this.getWorkspaces(); + const spaceLen = workspaces.length; const newWorkspaceIndex = workspaces.findIndex( w => w.uuid === newWorkspace.uuid ); - const isGoingLeft = newWorkspaceIndex <= previousWorkspaceIndex; + let diff = newWorkspaceIndex - previousWorkspaceIndex; + if (diff > Math.floor(spaceLen / 2)) { + diff -= spaceLen; + } else if (diff < -Math.floor(spaceLen / 2)) { + diff += spaceLen; + } + const isGoingLeft = diff < 0; const clonedEssentials = []; if (shouldAnimate && this.shouldAnimateEssentials && previousWorkspace) { for (const workspace of workspaces) { @@ -1974,19 +1993,23 @@ class nsZenWorkspaces { const elementWorkspaceIndex = workspaces.findIndex( w => w.uuid === elementWorkspaceId ); - const offset = -(newWorkspaceIndex - elementWorkspaceIndex) * 100; + let offset = elementWorkspaceIndex - newWorkspaceIndex; + if (offset > Math.floor(spaceLen / 2)) { + offset -= spaceLen; + } else if (offset < -Math.floor(spaceLen / 2)) { + offset += spaceLen; + } + offset = offset * 100; const newTransform = `translateX(${offset}%)`; // Only animate the workspace that is coming in, to avoid having multiple workspaces // animating off-screen at the same time which can cause performance issues. With an off // set of 1 or -1, so we animate the current workspace and the next one. - const goingLeft = newWorkspaceIndex < previousWorkspaceIndex; - const willBeVisible = - (goingLeft && - elementWorkspaceIndex >= newWorkspaceIndex && - elementWorkspaceIndex <= previousWorkspaceIndex) || - (!goingLeft && - elementWorkspaceIndex <= newWorkspaceIndex && - elementWorkspaceIndex >= previousWorkspaceIndex); + const totalDistance = Math.abs(diff); + const distanceToElement = isGoingLeft + ? (previousWorkspaceIndex - elementWorkspaceIndex + spaceLen) % spaceLen + : (elementWorkspaceIndex - previousWorkspaceIndex + spaceLen) % + spaceLen; + const willBeVisible = distanceToElement <= totalDistance; if (shouldAnimate) { if (!willBeVisible) { element.style.transform = newTransform; diff --git a/src/zen/spaces/zen-workspaces.css b/src/zen/spaces/zen-workspaces.css index 97c0d89be..f2260e55e 100644 --- a/src/zen/spaces/zen-workspaces.css +++ b/src/zen/spaces/zen-workspaces.css @@ -314,6 +314,8 @@ /* mark: workspace element */ zen-workspace { + --toolbar-color: var(--toolbox-textcolor) !important; + flex-direction: column; width: calc(100% + var(--zen-toolbox-padding) * 2); position: absolute; From 1b9408ecb0e69eba6653ef55d529ca4c5b10b69b Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Tue, 19 May 2026 23:58:00 +0200 Subject: [PATCH 02/31] no-bug: Add polish to finished boosts implementation (gh-13762) Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com> --- package.json | 1 + prefs/zen/boosts.yaml | 2 +- src/browser/themes/shared/zen-icons/icons.css | 6 +- .../themes/shared/zen-icons/jar.inc.mn | 37 ++-- .../themes/shared/zen-icons/nucleo/dice.svg | 5 + src/gfx/layers/AnimationInfo-cpp.patch | 16 +- src/layout/style/StyleColor-cpp.patch | 22 +-- src/zen/boosts/ZenBoostsManager.sys.mjs | 6 + src/zen/boosts/ZenZapOverlayChild.sys.mjs | 13 +- src/zen/boosts/actors/ZenBoostsChild.sys.mjs | 12 +- .../boosts/gtest/TestZenBoostsColorFilter.cpp | 121 ++++++++++++ src/zen/boosts/gtest/moz.build | 9 + src/zen/boosts/moz.build | 4 + src/zen/boosts/nsZenBCOverrides.cpp | 2 +- src/zen/boosts/nsZenBoostsBackend.cpp | 180 ++++++++++++------ src/zen/boosts/nsZenBoostsBackend.h | 58 ++++-- src/zen/tests/boosts/browser.toml | 1 + .../boosts/browser_boost_selector_escaping.js | 94 +++++++++ 18 files changed, 465 insertions(+), 124 deletions(-) create mode 100644 src/browser/themes/shared/zen-icons/nucleo/dice.svg create mode 100644 src/zen/boosts/gtest/TestZenBoostsColorFilter.cpp create mode 100644 src/zen/boosts/gtest/moz.build create mode 100644 src/zen/tests/boosts/browser_boost_selector_escaping.js diff --git a/package.json b/package.json index 0ebf49c20..6e7fd8fd0 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "surfer": "surfer", "test": "python3 scripts/run_tests.py", "test:dbg": "python3 scripts/run_tests.py --jsdebugger --debug-on-failure", + "test:gtest": "cd engine && ./mach gtest", "ffprefs": "cd tools/ffprefs && cargo run --bin ffprefs -- ../../", "lc": "surfer license-check", "lc:fix": "surfer license-check --fix", diff --git a/prefs/zen/boosts.yaml b/prefs/zen/boosts.yaml index b0de3d3fa..b9ab5b473 100644 --- a/prefs/zen/boosts.yaml +++ b/prefs/zen/boosts.yaml @@ -3,7 +3,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. - name: zen.boosts.enabled - value: "@IS_TWILIGHT@" + value: true - name: zen.boosts.dissolve-on-zap value: true diff --git a/src/browser/themes/shared/zen-icons/icons.css b/src/browser/themes/shared/zen-icons/icons.css index 1f7779e35..cb1b6f892 100644 --- a/src/browser/themes/shared/zen-icons/icons.css +++ b/src/browser/themes/shared/zen-icons/icons.css @@ -924,7 +924,7 @@ position: relative; - list-style-image: url("paintbrush.svg"); + list-style-image: url("boost.svg"); & .toolbarbutton-text { display: none; @@ -937,6 +937,8 @@ & image { -moz-context-properties: fill, fill-opacity; fill: currentColor; + width: 14px; + fill-opacity: 0.7; } } @@ -1066,7 +1068,7 @@ } #zen-boost-shuffle { - list-style-image: url("arrow-rotate-anticlockwise.svg"); + list-style-image: url("dice.svg"); } #zen-boost-css-picker { diff --git a/src/browser/themes/shared/zen-icons/jar.inc.mn b/src/browser/themes/shared/zen-icons/jar.inc.mn index be1479dcf..b252b3f52 100644 --- a/src/browser/themes/shared/zen-icons/jar.inc.mn +++ b/src/browser/themes/shared/zen-icons/jar.inc.mn @@ -13,13 +13,13 @@ * skin/classic/browser/zen-icons/autoplay-media-fill.svg (../shared/zen-icons/nucleo/autoplay-media-fill.svg) * skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/nucleo/autoplay-media.svg) * skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/nucleo/back.svg) +* skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/block.svg (../shared/zen-icons/nucleo/block.svg) * skin/classic/browser/zen-icons/bolt.svg (../shared/zen-icons/nucleo/bolt.svg) * skin/classic/browser/zen-icons/bookmark-hollow.svg (../shared/zen-icons/nucleo/bookmark-hollow.svg) * skin/classic/browser/zen-icons/bookmark-star-on-tray.svg (../shared/zen-icons/nucleo/bookmark-star-on-tray.svg) * skin/classic/browser/zen-icons/bookmark.svg (../shared/zen-icons/nucleo/bookmark.svg) * skin/classic/browser/zen-icons/boost.svg (../shared/zen-icons/nucleo/boost.svg) -* skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/brackets-curly.svg (../shared/zen-icons/nucleo/brackets-curly.svg) * skin/classic/browser/zen-icons/camera-blocked.svg (../shared/zen-icons/nucleo/camera-blocked.svg) * skin/classic/browser/zen-icons/camera-fill.svg (../shared/zen-icons/nucleo/camera-fill.svg) @@ -37,6 +37,7 @@ * skin/classic/browser/zen-icons/desktop-notification-fill.svg (../shared/zen-icons/nucleo/desktop-notification-fill.svg) * skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/nucleo/desktop-notification.svg) * skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/nucleo/developer.svg) +* skin/classic/browser/zen-icons/dice.svg (../shared/zen-icons/nucleo/dice.svg) * skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/nucleo/downloads.svg) * skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/nucleo/drag-indicator.svg) * skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/nucleo/duplicate-tab.svg) @@ -102,26 +103,26 @@ * skin/classic/browser/zen-icons/popup-fill.svg (../shared/zen-icons/nucleo/popup-fill.svg) * skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/nucleo/popup.svg) * skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/nucleo/print.svg) -* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/nucleo/privateBrowsing.svg) +* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/nucleo/reader-mode.svg) * skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/nucleo/reload.svg) * skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/nucleo/save.svg) * skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/nucleo/screen-blocked.svg) -* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/nucleo/screenshot.svg) +* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/nucleo/search-glass.svg) * skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/nucleo/search-page.svg) * skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/nucleo/security-broken.svg) -* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/nucleo/security.svg) +* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/nucleo/send-to-device.svg) * skin/classic/browser/zen-icons/settings-fill.svg (../shared/zen-icons/nucleo/settings-fill.svg) * skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/nucleo/settings.svg) * skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/nucleo/share.svg) * skin/classic/browser/zen-icons/sidebar-right.svg (../shared/zen-icons/nucleo/sidebar-right.svg) -* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/nucleo/sidebars-right.svg) +* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sliders.svg (../shared/zen-icons/nucleo/sliders.svg) * skin/classic/browser/zen-icons/sparkles.svg (../shared/zen-icons/nucleo/sparkles.svg) * skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/nucleo/spell-check.svg) @@ -161,13 +162,13 @@ * skin/classic/browser/zen-icons/autoplay-media-fill.svg (../shared/zen-icons/nucleo/autoplay-media-fill.svg) * skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/nucleo/autoplay-media.svg) * skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/nucleo/back.svg) +* skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/block.svg (../shared/zen-icons/nucleo/block.svg) * skin/classic/browser/zen-icons/bolt.svg (../shared/zen-icons/nucleo/bolt.svg) * skin/classic/browser/zen-icons/bookmark-hollow.svg (../shared/zen-icons/nucleo/bookmark-hollow.svg) * skin/classic/browser/zen-icons/bookmark-star-on-tray.svg (../shared/zen-icons/nucleo/bookmark-star-on-tray.svg) * skin/classic/browser/zen-icons/bookmark.svg (../shared/zen-icons/nucleo/bookmark.svg) * skin/classic/browser/zen-icons/boost.svg (../shared/zen-icons/nucleo/boost.svg) -* skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/brackets-curly.svg (../shared/zen-icons/nucleo/brackets-curly.svg) * skin/classic/browser/zen-icons/camera-blocked.svg (../shared/zen-icons/nucleo/camera-blocked.svg) * skin/classic/browser/zen-icons/camera-fill.svg (../shared/zen-icons/nucleo/camera-fill.svg) @@ -185,6 +186,7 @@ * skin/classic/browser/zen-icons/desktop-notification-fill.svg (../shared/zen-icons/nucleo/desktop-notification-fill.svg) * skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/nucleo/desktop-notification.svg) * skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/nucleo/developer.svg) +* skin/classic/browser/zen-icons/dice.svg (../shared/zen-icons/nucleo/dice.svg) * skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/nucleo/downloads.svg) * skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/nucleo/drag-indicator.svg) * skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/nucleo/duplicate-tab.svg) @@ -250,26 +252,26 @@ * skin/classic/browser/zen-icons/popup-fill.svg (../shared/zen-icons/nucleo/popup-fill.svg) * skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/nucleo/popup.svg) * skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/nucleo/print.svg) -* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/nucleo/privateBrowsing.svg) +* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/nucleo/reader-mode.svg) * skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/nucleo/reload.svg) * skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/nucleo/save.svg) * skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/nucleo/screen-blocked.svg) -* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/nucleo/screenshot.svg) +* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/nucleo/search-glass.svg) * skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/nucleo/search-page.svg) * skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/nucleo/security-broken.svg) -* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/nucleo/security.svg) +* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/nucleo/send-to-device.svg) * skin/classic/browser/zen-icons/settings-fill.svg (../shared/zen-icons/nucleo/settings-fill.svg) * skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/nucleo/settings.svg) * skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/nucleo/share.svg) * skin/classic/browser/zen-icons/sidebar-right.svg (../shared/zen-icons/nucleo/sidebar-right.svg) -* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/nucleo/sidebars-right.svg) +* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sliders.svg (../shared/zen-icons/nucleo/sliders.svg) * skin/classic/browser/zen-icons/sparkles.svg (../shared/zen-icons/nucleo/sparkles.svg) * skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/nucleo/spell-check.svg) @@ -309,13 +311,13 @@ * skin/classic/browser/zen-icons/autoplay-media-fill.svg (../shared/zen-icons/nucleo/autoplay-media-fill.svg) * skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/nucleo/autoplay-media.svg) * skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/nucleo/back.svg) +* skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/block.svg (../shared/zen-icons/nucleo/block.svg) * skin/classic/browser/zen-icons/bolt.svg (../shared/zen-icons/nucleo/bolt.svg) * skin/classic/browser/zen-icons/bookmark-hollow.svg (../shared/zen-icons/nucleo/bookmark-hollow.svg) * skin/classic/browser/zen-icons/bookmark-star-on-tray.svg (../shared/zen-icons/nucleo/bookmark-star-on-tray.svg) * skin/classic/browser/zen-icons/bookmark.svg (../shared/zen-icons/nucleo/bookmark.svg) * skin/classic/browser/zen-icons/boost.svg (../shared/zen-icons/nucleo/boost.svg) -* skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/brackets-curly.svg (../shared/zen-icons/nucleo/brackets-curly.svg) * skin/classic/browser/zen-icons/camera-blocked.svg (../shared/zen-icons/nucleo/camera-blocked.svg) * skin/classic/browser/zen-icons/camera-fill.svg (../shared/zen-icons/nucleo/camera-fill.svg) @@ -333,6 +335,7 @@ * skin/classic/browser/zen-icons/desktop-notification-fill.svg (../shared/zen-icons/nucleo/desktop-notification-fill.svg) * skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/nucleo/desktop-notification.svg) * skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/nucleo/developer.svg) +* skin/classic/browser/zen-icons/dice.svg (../shared/zen-icons/nucleo/dice.svg) * skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/nucleo/downloads.svg) * skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/nucleo/drag-indicator.svg) * skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/nucleo/duplicate-tab.svg) @@ -398,26 +401,26 @@ * skin/classic/browser/zen-icons/popup-fill.svg (../shared/zen-icons/nucleo/popup-fill.svg) * skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/nucleo/popup.svg) * skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/nucleo/print.svg) -* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/nucleo/privateBrowsing.svg) +* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/nucleo/reader-mode.svg) * skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/nucleo/reload.svg) * skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/nucleo/save.svg) * skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/nucleo/screen-blocked.svg) -* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/nucleo/screenshot.svg) +* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/nucleo/search-glass.svg) * skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/nucleo/search-page.svg) * skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/nucleo/security-broken.svg) -* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/nucleo/security.svg) +* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/nucleo/send-to-device.svg) * skin/classic/browser/zen-icons/settings-fill.svg (../shared/zen-icons/nucleo/settings-fill.svg) * skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/nucleo/settings.svg) * skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/nucleo/share.svg) * skin/classic/browser/zen-icons/sidebar-right.svg (../shared/zen-icons/nucleo/sidebar-right.svg) -* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/nucleo/sidebars-right.svg) +* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sliders.svg (../shared/zen-icons/nucleo/sliders.svg) * skin/classic/browser/zen-icons/sparkles.svg (../shared/zen-icons/nucleo/sparkles.svg) * skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/nucleo/spell-check.svg) @@ -453,8 +456,8 @@ * skin/classic/browser/zen-icons/selectable/basket.svg (../shared/zen-icons/common/selectable/basket.svg) * skin/classic/browser/zen-icons/selectable/bed.svg (../shared/zen-icons/common/selectable/bed.svg) * skin/classic/browser/zen-icons/selectable/bell.svg (../shared/zen-icons/common/selectable/bell.svg) -* skin/classic/browser/zen-icons/selectable/book.svg (../shared/zen-icons/common/selectable/book.svg) * skin/classic/browser/zen-icons/selectable/bookmark.svg (../shared/zen-icons/common/selectable/bookmark.svg) +* skin/classic/browser/zen-icons/selectable/book.svg (../shared/zen-icons/common/selectable/book.svg) * skin/classic/browser/zen-icons/selectable/briefcase.svg (../shared/zen-icons/common/selectable/briefcase.svg) * skin/classic/browser/zen-icons/selectable/brush.svg (../shared/zen-icons/common/selectable/brush.svg) * skin/classic/browser/zen-icons/selectable/bug.svg (../shared/zen-icons/common/selectable/bug.svg) @@ -516,8 +519,8 @@ * skin/classic/browser/zen-icons/selectable/shapes.svg (../shared/zen-icons/common/selectable/shapes.svg) * skin/classic/browser/zen-icons/selectable/shirt.svg (../shared/zen-icons/common/selectable/shirt.svg) * skin/classic/browser/zen-icons/selectable/skull.svg (../shared/zen-icons/common/selectable/skull.svg) -* skin/classic/browser/zen-icons/selectable/square.svg (../shared/zen-icons/common/selectable/square.svg) * skin/classic/browser/zen-icons/selectable/squares.svg (../shared/zen-icons/common/selectable/squares.svg) +* skin/classic/browser/zen-icons/selectable/square.svg (../shared/zen-icons/common/selectable/square.svg) * skin/classic/browser/zen-icons/selectable/star-1.svg (../shared/zen-icons/common/selectable/star-1.svg) * skin/classic/browser/zen-icons/selectable/star.svg (../shared/zen-icons/common/selectable/star.svg) * skin/classic/browser/zen-icons/selectable/stats-chart.svg (../shared/zen-icons/common/selectable/stats-chart.svg) diff --git a/src/browser/themes/shared/zen-icons/nucleo/dice.svg b/src/browser/themes/shared/zen-icons/nucleo/dice.svg new file mode 100644 index 000000000..7a6197e79 --- /dev/null +++ b/src/browser/themes/shared/zen-icons/nucleo/dice.svg @@ -0,0 +1,5 @@ +#filter dumbComments emptyLines substitution +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + diff --git a/src/gfx/layers/AnimationInfo-cpp.patch b/src/gfx/layers/AnimationInfo-cpp.patch index e9779a101..aa58cdcbc 100644 --- a/src/gfx/layers/AnimationInfo-cpp.patch +++ b/src/gfx/layers/AnimationInfo-cpp.patch @@ -1,5 +1,5 @@ diff --git a/gfx/layers/AnimationInfo.cpp b/gfx/layers/AnimationInfo.cpp -index 1d330056bd7a4e89aac5e5296a3c164fb42b5c42..ef112715580b6bb7238e8f37bbe3133e187685dc 100644 +index 1d330056bd7a4e89aac5e5296a3c164fb42b5c42..38bfbcfcaf0c791ee817aafbd24b1cad67974e62 100644 --- a/gfx/layers/AnimationInfo.cpp +++ b/gfx/layers/AnimationInfo.cpp @@ -14,6 +14,7 @@ @@ -10,12 +10,22 @@ index 1d330056bd7a4e89aac5e5296a3c164fb42b5c42..ef112715580b6bb7238e8f37bbe3133e #include "nsIContent.h" #include "nsLayoutUtils.h" #include "nsRefreshDriver.h" -@@ -343,7 +344,7 @@ static void SetAnimatable(NonCustomCSSPropertyId aProperty, +@@ -343,7 +344,17 @@ static void SetAnimatable(NonCustomCSSPropertyId aProperty, // resolve currentColor at this moment. nscolor foreground = aFrame->Style()->GetVisitedDependentColor(&nsStyleText::mColor); - aAnimatable = aAnimationValue.GetColor(foreground); -+ aAnimatable = zen::nsZenBoostsBackend::FilterColorFromPresContext(aAnimationValue.GetColor(foreground), aFrame->PresContext()); ++ nscolor resolved = aAnimationValue.GetColor(foreground); ++ // |foreground| is already boost-resolved through ++ // StyleAbsoluteColor::ToColor, so a currentColor keyframe is already ++ // filtered; only absolute keyframe colors still need the boost applied ++ // here, exactly once, so the composited transition endpoint matches the ++ // resting/static paint and doesn't snap when the transition ends. ++ aAnimatable = ++ aAnimationValue.IsCurrentColor() ++ ? resolved ++ : zen::nsZenBoostsBackend::FilterColorFromPresContext( ++ resolved, aFrame->PresContext()); break; } case eCSSProperty_opacity: diff --git a/src/layout/style/StyleColor-cpp.patch b/src/layout/style/StyleColor-cpp.patch index 6f84f6327..ef81c99dc 100644 --- a/src/layout/style/StyleColor-cpp.patch +++ b/src/layout/style/StyleColor-cpp.patch @@ -1,5 +1,5 @@ diff --git a/layout/style/StyleColor.cpp b/layout/style/StyleColor.cpp -index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..8dbfbb846b786d51af288989163aacfae12e787c 100644 +index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..3b2118e224141f5151a31ac663dfbe17864ef182 100644 --- a/layout/style/StyleColor.cpp +++ b/layout/style/StyleColor.cpp @@ -8,6 +8,7 @@ @@ -10,25 +10,7 @@ index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..8dbfbb846b786d51af288989163aacfa namespace mozilla { -@@ -21,6 +22,8 @@ bool StyleColor::MaybeTransparent() const { - template <> - StyleAbsoluteColor StyleColor::ResolveColor( - const StyleAbsoluteColor& aForegroundColor) const { -+ auto ResolveColorInner = [this, -+ &aForegroundColor]() -> StyleAbsoluteColor { - if (IsAbsolute()) { - return AsAbsolute(); - } -@@ -30,6 +33,8 @@ StyleAbsoluteColor StyleColor::ResolveColor( - } - - return Servo_ResolveColor(this, &aForegroundColor); -+ }; -+ return zen::nsZenBoostsBackend::ResolveStyleColor(ResolveColorInner()); - } - - template <> -@@ -68,10 +73,11 @@ nscolor StyleAbsoluteColor::ToColor() const { +@@ -68,10 +69,11 @@ nscolor StyleAbsoluteColor::ToColor() const { auto green = std::clamp(srgb.components._1, 0.0f, 1.0f); auto blue = std::clamp(srgb.components._2, 0.0f, 1.0f); diff --git a/src/zen/boosts/ZenBoostsManager.sys.mjs b/src/zen/boosts/ZenBoostsManager.sys.mjs index 67abb7bc4..0525b5378 100644 --- a/src/zen/boosts/ZenBoostsManager.sys.mjs +++ b/src/zen/boosts/ZenBoostsManager.sys.mjs @@ -539,6 +539,12 @@ class nsZenBoostsManager { const directoryPath = this.#cssPath; const savePath = PathUtils.join(directoryPath, fileName); + if (!css || css.trim() === "") { + if (await IOUtils.exists(savePath)) { + await IOUtils.remove(savePath); + } + return; + } await IOUtils.makeDirectory(directoryPath, { createAncestors: true }); await IOUtils.writeUTF8(savePath, css); } diff --git a/src/zen/boosts/ZenZapOverlayChild.sys.mjs b/src/zen/boosts/ZenZapOverlayChild.sys.mjs index df7c10cc0..7b8b4ed35 100644 --- a/src/zen/boosts/ZenZapOverlayChild.sys.mjs +++ b/src/zen/boosts/ZenZapOverlayChild.sys.mjs @@ -26,6 +26,7 @@ export class ZapOverlay { #dissolvePoolSize = 5; #dissolveEffectPool = []; #currentDissolveIndex = 0; + #onZapDoneClick = null; /** * @param {*} document Webpage document @@ -77,10 +78,8 @@ export class ZapOverlay { */ #initializeElements() { this.zapDoneButton = this.getElementById("zap-done"); - this.zapDoneButton.addEventListener( - "click", - this.#disableZapMode.bind(this) - ); + this.#onZapDoneClick = this.#disableZapMode.bind(this); + this.zapDoneButton.addEventListener("click", this.#onZapDoneClick); this.#updateZappedList(); } @@ -355,6 +354,12 @@ export class ZapOverlay { dissolve.tearDown(); }); + if (this.zapDoneButton && this.#onZapDoneClick) { + this.zapDoneButton.removeEventListener("click", this.#onZapDoneClick); + } + this.#onZapDoneClick = null; + this.zapDoneButton = null; + if (this.#content) { try { this.document.removeAnonymousContent(this.#content); diff --git a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs index 1ea6b1e60..78260f30a 100644 --- a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs +++ b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs @@ -322,13 +322,18 @@ export class ZenBoostsChild extends JSWindowActorChild { return p; } + get #hostWithoutPort() { + const host = this.browsingContext.topWindow?.location.host; + return host?.split(":")[0]; + } + /** * Aquires the boost data for this website * * @returns {object} Boost data for the current website */ getWebsiteBoost() { - const domain = this.browsingContext.topWindow?.location?.host; + const domain = this.#hostWithoutPort; if (!domain) { return null; } @@ -362,6 +367,7 @@ export class ZenBoostsChild extends JSWindowActorChild { this.#loadStyleSheet(boost.styleSheet); } + browsingContext.fullZoom = boostData.sizeOverride; browsingContext.isZenBoostsInverted = boostData.smartInvert; if (boostData.enableColorBoost) { let primaryColor; @@ -484,7 +490,7 @@ export class ZenBoostsChild extends JSWindowActorChild { } addZapSelector(selector) { - const domain = this.browsingContext.topWindow?.location?.host; + const domain = this.#hostWithoutPort; this.sendQuery("ZenBoost:ZapSelector", { action: "add", selector, @@ -493,7 +499,7 @@ export class ZenBoostsChild extends JSWindowActorChild { } removeZapSelector(selector) { - const domain = this.browsingContext.topWindow?.location?.host; + const domain = this.#hostWithoutPort; this.sendQuery("ZenBoost:ZapSelector", { action: "remove", selector, diff --git a/src/zen/boosts/gtest/TestZenBoostsColorFilter.cpp b/src/zen/boosts/gtest/TestZenBoostsColorFilter.cpp new file mode 100644 index 000000000..e378451d0 --- /dev/null +++ b/src/zen/boosts/gtest/TestZenBoostsColorFilter.cpp @@ -0,0 +1,121 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "gtest/gtest.h" + +#include "mozilla/nsZenBoostsBackend.h" + +using zen::detail::FilterColorChannel; +using zen::detail::InvertColorChannel; +using zen::detail::PrecomputeAccent; +using zen::detail::RotateAccent; + +namespace { + +// A spread of representative input colors (opaque unless noted). +const nscolor kColors[] = { + NS_RGBA(255, 0, 0, 255), // pure red + NS_RGBA(0, 255, 0, 255), // pure green + NS_RGBA(0, 0, 255, 255), // pure blue + NS_RGBA(0, 0, 0, 255), // black + NS_RGBA(255, 255, 255, 255), // white + NS_RGBA(128, 128, 128, 255), // mid gray + NS_RGBA(18, 52, 86, 200), // arbitrary, semi-transparent + NS_RGBA(240, 17, 99, 1), // near-min alpha +}; + +// The accent stores the contrast/strength in its alpha byte +// (NS_GET_CONTRAST == NS_GET_A). 0 means "no tint". +zen::nsZenAccentOklab MakeAccent(uint8_t r, uint8_t g, uint8_t b, + uint8_t contrast) { + return PrecomputeAccent(NS_RGBA(r, g, b, contrast)); +} + +} // namespace + +// The headline invariant: filtering must never change opacity. The whole +// pipeline overloads the alpha byte for contrast on the *accent*, but a +// filtered *content* color must keep its original alpha. +TEST(ZenBoostsColorFilter, PreservesAlpha) +{ + const zen::nsZenAccentOklab accent = MakeAccent(80, 120, 200, 180); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 180.0f); + + for (nscolor c : kColors) { + const nscolor out = FilterColorChannel(c, accent, complementary); + EXPECT_EQ(NS_GET_A(out), NS_GET_A(c)) << "alpha changed for input " << c; + } +} + +// Fully transparent colors are invisible; the filter must pass them through +// untouched (and must not interpret their zero alpha as contrast). +TEST(ZenBoostsColorFilter, TransparentPassthrough) +{ + const zen::nsZenAccentOklab accent = MakeAccent(80, 120, 200, 180); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 90.0f); + + const nscolor transparent = NS_RGBA(255, 0, 0, 0); + EXPECT_EQ(FilterColorChannel(transparent, accent, complementary), + transparent); + EXPECT_EQ(InvertColorChannel(transparent), transparent); +} + +// Same inputs must always yield the same output (no hidden global state in +// the math itself; the production cache lives outside these primitives). +TEST(ZenBoostsColorFilter, Deterministic) +{ + const zen::nsZenAccentOklab accent = MakeAccent(33, 200, 90, 200); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 200.0f); + + for (nscolor c : kColors) { + const nscolor a = FilterColorChannel(c, accent, complementary); + const nscolor b = FilterColorChannel(c, accent, complementary); + EXPECT_EQ(a, b); + EXPECT_EQ(InvertColorChannel(c), InvertColorChannel(c)); + } +} + +// A zero-contrast accent means "no boost strength": the color must come back +// essentially unchanged (allow +/-1 per channel for sRGB<->Oklab rounding). +TEST(ZenBoostsColorFilter, ZeroContrastIsNearIdentity) +{ + const zen::nsZenAccentOklab accent = MakeAccent(200, 50, 50, 0); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 180.0f); + + for (nscolor c : kColors) { + if (NS_GET_A(c) == 0) { + continue; + } + const nscolor out = FilterColorChannel(c, accent, complementary); + EXPECT_NEAR(NS_GET_R(out), NS_GET_R(c), 1); + EXPECT_NEAR(NS_GET_G(out), NS_GET_G(c), 1); + EXPECT_NEAR(NS_GET_B(out), NS_GET_B(c), 1); + EXPECT_EQ(NS_GET_A(out), NS_GET_A(c)); + } +} + +// Guards against a regression that turns the filter into a no-op: a strong +// accent applied to a neutral gray must actually move the color. +TEST(ZenBoostsColorFilter, StrongAccentActuallyTints) +{ + const zen::nsZenAccentOklab accent = MakeAccent(20, 130, 240, 255); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 30.0f); + + const nscolor gray = NS_RGBA(128, 128, 128, 255); + const nscolor out = FilterColorChannel(gray, accent, complementary); + + const bool moved = NS_GET_R(out) != NS_GET_R(gray) || + NS_GET_G(out) != NS_GET_G(gray) || + NS_GET_B(out) != NS_GET_B(gray); + EXPECT_TRUE(moved) << "a full-strength accent should tint mid gray"; + EXPECT_EQ(NS_GET_A(out), NS_GET_A(gray)); +} + +// Inversion must also preserve opacity. +TEST(ZenBoostsColorFilter, InvertPreservesAlpha) +{ + for (nscolor c : kColors) { + EXPECT_EQ(NS_GET_A(InvertColorChannel(c)), NS_GET_A(c)); + } +} diff --git a/src/zen/boosts/gtest/moz.build b/src/zen/boosts/gtest/moz.build new file mode 100644 index 000000000..cc14100b7 --- /dev/null +++ b/src/zen/boosts/gtest/moz.build @@ -0,0 +1,9 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +UNIFIED_SOURCES += [ + "TestZenBoostsColorFilter.cpp", +] + +FINAL_LIBRARY = "xul-gtest" diff --git a/src/zen/boosts/moz.build b/src/zen/boosts/moz.build index 211d68fc2..a436cf3de 100644 --- a/src/zen/boosts/moz.build +++ b/src/zen/boosts/moz.build @@ -26,3 +26,7 @@ SOURCES += [ ] FINAL_LIBRARY = "xul" + +TEST_DIRS += [ + "gtest", +] diff --git a/src/zen/boosts/nsZenBCOverrides.cpp b/src/zen/boosts/nsZenBCOverrides.cpp index 0be59563e..306d35bf7 100644 --- a/src/zen/boosts/nsZenBCOverrides.cpp +++ b/src/zen/boosts/nsZenBCOverrides.cpp @@ -43,7 +43,7 @@ static void RefreshBoostCacheIfMatchesCurrent(BrowsingContext* aChanged) { if (!backend) { return; } - auto current = backend->GetCurrentBrowsingContext(); + RefPtr current = backend->GetCurrentBrowsingContext(); if (!current || current->Top() != aChanged) { return; } diff --git a/src/zen/boosts/nsZenBoostsBackend.cpp b/src/zen/boosts/nsZenBoostsBackend.cpp index 1968c6ad1..1a54b0264 100644 --- a/src/zen/boosts/nsZenBoostsBackend.cpp +++ b/src/zen/boosts/nsZenBoostsBackend.cpp @@ -4,7 +4,9 @@ #include #include +#include #include +#include #include "nsZenBoostsBackend.h" @@ -48,10 +50,6 @@ namespace zen { NS_IMPL_ISUPPORTS0(nsZenBoostsBackend) -nsZenAccentOklab nsZenBoostsBackend::mCachedAccent{0}; -nsZenAccentOklab nsZenBoostsBackend::mCachedComplementary{0}; -float nsZenBoostsBackend::mCachedComplementaryRotationDeg = 0.0f; - namespace { /** @@ -83,17 +81,43 @@ static inline float linearToSrgb(float c) { static inline float fastCbrt(float x) { if (x == 0.0f) return 0.0f; float a = std::abs(x); - union { - float f; - uint32_t i; - } u = {a}; - u.i = u.i / 3 + 0x2a504a2e; - float y = u.f; + // Bit-level initial guess. Use memcpy rather than a union to avoid the + // undefined behaviour of type-punning through a union member in C++. + uint32_t i; + std::memcpy(&i, &a, sizeof(i)); + i = i / 3 + 0x2a504a2e; + float y; + std::memcpy(&y, &i, sizeof(y)); y = (2.0f * y + a / (y * y)) * (1.0f / 3.0f); y = (2.0f * y + a / (y * y)) * (1.0f / 3.0f); return x < 0.0f ? -y : y; } +/** + * @brief sRGB(0..255) -> linear lookup table. The filter only ever feeds + * integer 8-bit channels through srgbToLinear, so the 256 possible results + * are precomputed once instead of calling std::pow three times per color on + * the per-color hot path. Built lazily on first use; the function-local + * static makes initialization thread-safe. + */ +static inline const std::array& SrgbLinearTable() { + static const std::array kTable = [] { + std::array table{}; + for (int i = 0; i < 256; ++i) { + table[i] = srgbToLinear(i * (1.0f / 255.0f)); + } + return table; + }(); + return kTable; +} + +/** + * @brief Linearizes an 8-bit sRGB channel via the precomputed table. + */ +static inline float srgbToLinear8(uint8_t aChannel) { + return SrgbLinearTable()[aChannel]; +} + /** * @brief Precomputes the Oklab values for a given accent color. This allows us * to efficiently apply the accent color as a filter to other colors without @@ -107,13 +131,9 @@ ZEN_HOT_FUNCTION inline static auto zenPrecomputeAccent(nscolor aAccentColor) { constexpr float inv255 = 1.0f / 255.0f; - const float r = NS_GET_R(aAccentColor) * inv255; - const float g = NS_GET_G(aAccentColor) * inv255; - const float b = NS_GET_B(aAccentColor) * inv255; - - const float lr = srgbToLinear(r); - const float lg = srgbToLinear(g); - const float lb = srgbToLinear(b); + const float lr = srgbToLinear8(NS_GET_R(aAccentColor)); + const float lg = srgbToLinear8(NS_GET_G(aAccentColor)); + const float lb = srgbToLinear8(NS_GET_B(aAccentColor)); const float l_ = fastCbrt(0.4122214708f * lr + 0.5363325363f * lg + 0.0514459929f * lb); @@ -156,6 +176,45 @@ inline static nsZenAccentOklab zenRotateAccent(const nsZenAccentOklab& aBase, }; } +/** + * @brief Small round-robin cache of precomputed accents. Painting several + * boosted tabs with different accents interleaved would otherwise recompute + * the Oklab base accent (with cbrt) and the rotated complementary accent on + * every single color. Keyed by the accent nscolor and the complementary hue + * rotation. Main-thread only (same threading assumption as the per-color + * paint path it serves). + */ +struct AccentCacheEntry { + nscolor accentNS = 0; + float rotationDeg = 0.0f; + bool valid = false; + nsZenAccentOklab accent{}; + nsZenAccentOklab complementary{}; +}; + +static constexpr size_t kAccentCacheSize = 4; +static AccentCacheEntry sAccentCache[kAccentCacheSize]; +static size_t sAccentCacheNext = 0; + +ZEN_HOT_FUNCTION +static const AccentCacheEntry& GetCachedAccent(nscolor aAccentNS, + float aRotationDeg) { + for (const auto& entry : sAccentCache) { + if (entry.valid && entry.accentNS == aAccentNS && + entry.rotationDeg == aRotationDeg) { + return entry; + } + } + AccentCacheEntry& slot = sAccentCache[sAccentCacheNext]; + sAccentCacheNext = (sAccentCacheNext + 1) % kAccentCacheSize; + slot.accentNS = aAccentNS; + slot.rotationDeg = aRotationDeg; + slot.accent = zenPrecomputeAccent(aAccentNS); + slot.complementary = zenRotateAccent(slot.accent, aRotationDeg); + slot.valid = true; + return slot; +} + /** * @brief Applies a duotone color filter to transform an original color toward * one of two accent colors. The original color's perceived lightness decides @@ -183,10 +242,10 @@ inline static nsZenAccentOklab zenRotateAccent(const nsZenAccentOklab& aBase, constexpr float inv255 = 1.0f / 255.0f; const float blendFactor = contrast * inv255; - // sRGB -> linear - const float lr = srgbToLinear(NS_GET_R(aOriginalColor) * inv255); - const float lg = srgbToLinear(NS_GET_G(aOriginalColor) * inv255); - const float lb = srgbToLinear(NS_GET_B(aOriginalColor) * inv255); + // sRGB -> linear (8-bit channels via the precomputed table) + const float lr = srgbToLinear8(NS_GET_R(aOriginalColor)); + const float lg = srgbToLinear8(NS_GET_G(aOriginalColor)); + const float lb = srgbToLinear8(NS_GET_B(aOriginalColor)); // Linear RGB -> LMS -> cube root -> Oklab (fused) const float l_ = @@ -347,6 +406,32 @@ inline static void GetZenBoostsDataFromBrowsingContext( } // namespace +namespace detail { + +// Thin forwarders that give unit tests access to the pure color math without +// pulling in the singleton / BrowsingContext. They are defined here, after the +// anonymous namespace, so they can reach those file-local implementations. +nsZenAccentOklab PrecomputeAccent(nscolor aAccentColor) { + return zenPrecomputeAccent(aAccentColor); +} + +nsZenAccentOklab RotateAccent(const nsZenAccentOklab& aBase, + float aRotationDeg) { + return zenRotateAccent(aBase, aRotationDeg); +} + +nscolor FilterColorChannel(nscolor aOriginalColor, + const nsZenAccentOklab& aAccent, + const nsZenAccentOklab& aComplementary) { + return zenFilterColorChannel(aOriginalColor, aAccent, aComplementary); +} + +nscolor InvertColorChannel(nscolor aColor) { + return zenInvertColorChannel(aColor); +} + +} // namespace detail + static mozilla::StaticRefPtr sZenBoostsBackend; auto nsZenBoostsBackend::GetInstance() -> nsZenBoostsBackend* { @@ -376,18 +461,25 @@ auto nsZenBoostsBackend::onPresShellEntered(mozilla::dom::Document* aDocument) if (!browsingContext) { return; } - mCurrentBrowsingContext = browsingContext; + mCurrentBrowsingContextId = browsingContext->Id(); RefreshCachedBoostState(); } +already_AddRefed +nsZenBoostsBackend::GetCurrentBrowsingContext() const { + return mozilla::dom::BrowsingContext::Get(mCurrentBrowsingContextId); +} + auto nsZenBoostsBackend::RefreshCachedBoostState() -> void { - if (!mCurrentBrowsingContext) { + RefPtr current = + mozilla::dom::BrowsingContext::Get(mCurrentBrowsingContextId); + if (!current) { mCachedCurrentAccent = 0; mCachedCurrentComplementaryRotation = 0.0f; mCachedCurrentInverted = false; return; } - auto top = mCurrentBrowsingContext->Top(); + auto top = current->Top(); mCachedCurrentAccent = top->ZenBoostsData(); mCachedCurrentComplementaryRotation = top->ZenBoostsComplementaryRotation(); mCachedCurrentInverted = top->IsZenBoostsInverted(); @@ -397,33 +489,27 @@ auto nsZenBoostsBackend::RefreshCachedBoostState() -> void { nsZenBoostsBackend::FilterColorFromPresContext(nscolor aColor, nsPresContext* aPresContext) -> nscolor { + if (NS_GET_A(aColor) == 0) { + // Skip processing fully transparent colors since they won't be visible and + // we want to avoid unnecessary computations. This also prevents issues with + // using the alpha channel for contrast information in the accent color. + return aColor; + } ZenBoostData accentNS = 0; float complementaryRotation = 0.0f; bool invertColors = false; GetZenBoostsDataFromBrowsingContext(&accentNS, &complementaryRotation, &invertColors, aPresContext); if (accentNS) { - if (mCachedAccent.accentNS != accentNS) { - mCachedAccent = zenPrecomputeAccent(accentNS); - // Trigger a recompute of the complementary accent since - // it depends on the base accent. - mCachedComplementary.accentNS = 0; - } - // Derive the complementary accent by rotating the base accent's hue by the - // boost's complementary rotation. Cached so the per-color hot path only - // recomputes it when the base accent or rotation changes. - if (mCachedComplementary.accentNS != accentNS || - mCachedComplementaryRotationDeg != complementaryRotation) { - mCachedComplementary = - zenRotateAccent(mCachedAccent, complementaryRotation); - mCachedComplementaryRotationDeg = complementaryRotation; - } - // Apply a filter-like tint: + // Resolve (and cache) the base + complementary accent for this accent and + // complementary rotation. Apply a filter-like tint: // - Preserve the original color's perceived luminance // - Map hue/chroma toward the base or complementary accent depending on // the original color's lightness // - Keep the original alpha - aColor = zenFilterColorChannel(aColor, mCachedAccent, mCachedComplementary); + const AccentCacheEntry& cached = + GetCachedAccent(accentNS, complementaryRotation); + aColor = zenFilterColorChannel(aColor, cached.accent, cached.complementary); } if (invertColors) { aColor = zenInvertColorChannel(aColor); @@ -431,20 +517,8 @@ nsZenBoostsBackend::FilterColorFromPresContext(nscolor aColor, return aColor; } -[[nodiscard]] ZEN_HOT_FUNCTION auto nsZenBoostsBackend::ResolveStyleColor( - mozilla::StyleAbsoluteColor aColor) -> mozilla::StyleAbsoluteColor { - const auto resultColor = FilterColorFromPresContext(aColor.ToColor()); - return mozilla::StyleAbsoluteColor::FromColor(resultColor); -} - [[nodiscard]] ZEN_HOT_FUNCTION auto nsZenBoostsBackend::ResolveStyleColor( nscolor aColor) -> nscolor { - if (NS_GET_A(aColor) == 0) { - // Skip processing fully transparent colors since they won't be visible and - // we want to avoid unnecessary computations. This also prevents issues with - // using the alpha channel for contrast information in the accent color. - return aColor; - } return FilterColorFromPresContext(aColor); } diff --git a/src/zen/boosts/nsZenBoostsBackend.h b/src/zen/boosts/nsZenBoostsBackend.h index 67f3af6e8..81ca1d95b 100644 --- a/src/zen/boosts/nsZenBoostsBackend.h +++ b/src/zen/boosts/nsZenBoostsBackend.h @@ -10,6 +10,13 @@ #include "nsPresContext.h" #include "mozilla/RefPtr.h" +#include "mozilla/AlreadyAddRefed.h" + +#include + +namespace mozilla::dom { +class BrowsingContext; +} #define ZEN_BOOSTS_BACKEND_CONTRACTID "@mozilla.org/zen/boosts-backend;1" @@ -23,6 +30,19 @@ struct nsZenAccentOklab { float contrastFactor; }; +namespace detail { +// Pure color-math primitives, exposed for unit testing. These have no +// dependency on the singleton, the BrowsingContext, or the process type, so +// they can be exercised directly from gtest. +nsZenAccentOklab PrecomputeAccent(nscolor aAccentColor); +nsZenAccentOklab RotateAccent(const nsZenAccentOklab& aBase, + float aRotationDeg); +nscolor FilterColorChannel(nscolor aOriginalColor, + const nsZenAccentOklab& aAccent, + const nsZenAccentOklab& aComplementary); +nscolor InvertColorChannel(nscolor aColor); +} // namespace detail + class nsZenBoostsBackend final : public nsISupports { public: NS_DECL_ISUPPORTS @@ -36,17 +56,15 @@ class nsZenBoostsBackend final : public nsISupports { bool mCurrentFrameIsAnonymousContent = false; /** - * @brief Resolve a StyleAbsoluteColor to take into account Zen boosts. + * @brief Resolve a color to take into account Zen boosts. This is the single + * place style colors are filtered; it is reached for every style color via + * StyleAbsoluteColor::ToColor. Do not add a second StyleColor::ResolveColor + * filter on top of this or colors get filtered multiple times (which also + * makes resting colors disagree with composited transition endpoints). * @param aColor The color to resolve. * @return The resolved color with Zen boost filters applied, or the original * color if no boost is active. - * @see StyleColor::ResolveColor for reference. - */ - static auto ResolveStyleColor(mozilla::StyleAbsoluteColor aColor) - -> mozilla::StyleAbsoluteColor; - - /** - * @see ResolveStyleColor for reference. + * @see StyleAbsoluteColor::ToColor for reference. */ static auto ResolveStyleColor(nscolor aColor) -> nscolor; @@ -73,10 +91,13 @@ class nsZenBoostsBackend final : public nsISupports { */ auto RefreshCachedBoostState() -> void; - [[nodiscard]] - inline auto GetCurrentBrowsingContext() const { - return mCurrentBrowsingContext; - } + /** + * Resolves the current top BrowsingContext from its stored id. May return + * null if it has since been discarded. Not on the per-color hot path; the + * hot path uses the mCachedCurrent* fields instead. + */ + [[nodiscard]] already_AddRefed + GetCurrentBrowsingContext() const; /** * Cached boost data for the current top BrowsingContext, refreshed on @@ -95,15 +116,12 @@ class nsZenBoostsBackend final : public nsISupports { ~nsZenBoostsBackend() = default; /** - * The presshell of the current document being rendered. + * Id of the top BrowsingContext of the current document being rendered. + * Stored as an id rather than a strong RefPtr so the process-wide singleton + * does not keep a navigated-away BrowsingContext (and its subtree) alive + * until the next presshell entry. */ - RefPtr mCurrentBrowsingContext; - - static nsZenAccentOklab mCachedAccent; - // Base accent with its Oklab hue rotated by mCachedComplementaryRotationDeg, - // recomputed only when the base accent or rotation changes. - static nsZenAccentOklab mCachedComplementary; - static float mCachedComplementaryRotationDeg; + uint64_t mCurrentBrowsingContextId = 0; public: /** diff --git a/src/zen/tests/boosts/browser.toml b/src/zen/tests/boosts/browser.toml index c24f62f6a..9cacfe47f 100644 --- a/src/zen/tests/boosts/browser.toml +++ b/src/zen/tests/boosts/browser.toml @@ -8,5 +8,6 @@ support-files = [ ] ["browser_boost_selector_basic.js"] +["browser_boost_selector_escaping.js"] ["browser_boost_selector_invalid.js"] ["browser_boost_selector_nthchild.js"] diff --git a/src/zen/tests/boosts/browser_boost_selector_escaping.js b/src/zen/tests/boosts/browser_boost_selector_escaping.js new file mode 100644 index 000000000..5a3e299b6 --- /dev/null +++ b/src/zen/tests/boosts/browser_boost_selector_escaping.js @@ -0,0 +1,94 @@ +/* Any copyright is dedicated to the Public Domain. + https://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Covers code paths the basic/invalid/nthchild tests don't: +// - getIdentification() running ids/classes through CSS.escape() +// - the ancestor-disambiguation while-loop in traverse(), which only runs +// when the exact path still matches more than one element. + +add_task(async function test_getSelectionPath_escapesSpecialChars() { + const doc = document.implementation.createHTMLDocument("TestEscape"); + + const container = doc.createElement("div"); + // Characters that are invalid in a CSS selector unless escaped. + container.id = "with.dot:and#hash"; + const target = doc.createElement("span"); + target.className = "foo:bar baz.qux"; + target.textContent = "target"; + container.appendChild(target); + doc.body.appendChild(container); + + const component = new SelectorComponent(doc, null, [], () => {}); + + const path = component.getSelectionPath(doc, 0, target); + ok(path, "A path should be generated for an element with special chars"); + + // The unescaped raw strings must not leak into the selector verbatim. + ok( + !path.includes("with.dot:and#hash"), + "Raw unescaped id must not appear in the selector" + ); + + // The generated selector must be valid and resolve back to the target. + let matched; + try { + matched = doc.querySelectorAll(path); + } catch (e) { + ok(false, `Generated selector should be parseable, got: ${e}`); + return; + } + ok( + Array.from(matched).includes(target), + "Escaped selector must still match the original element" + ); + Assert.equal( + matched.length, + 1, + "Selector should uniquely identify the element" + ); +}); + +add_task(async function test_getSelectionPath_disambiguatesAncestors() { + const doc = document.implementation.createHTMLDocument("TestAncestors"); + + // Two structurally identical subtrees. The leaf elements carry no id/class, + // so disambiguation must climb ancestors until the path is unique. The two + // wrappers differ only by id, forcing the ancestor-walk loop in traverse(). + const makeBranch = wrapperId => { + const wrapper = doc.createElement("section"); + wrapper.id = wrapperId; + const mid = doc.createElement("div"); + const leaf = doc.createElement("span"); + leaf.textContent = "leaf"; + mid.appendChild(leaf); + wrapper.appendChild(mid); + doc.body.appendChild(wrapper); + return leaf; + }; + + const leafA = makeBranch("branch-a"); + const leafB = makeBranch("branch-b"); + + const component = new SelectorComponent(doc, null, [], () => {}); + + for (const [leaf, label] of [ + [leafA, "branch-a"], + [leafB, "branch-b"], + ]) { + const path = component.getSelectionPath(doc, 0, leaf); + ok(path, `Path generated for the leaf under ${label}`); + + const matched = doc.querySelectorAll(path); + Assert.equal( + matched.length, + 1, + `Selector for the ${label} leaf must be unique despite an identical sibling subtree` + ); + ok( + matched[0] === leaf, + `Selector must resolve to the correct ${label} leaf, not the other branch` + ); + } +}); From d5d86dbfa5ef6a45048b449176513ed4270c2a0b Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 20 May 2026 00:29:25 +0200 Subject: [PATCH 03/31] no-bug: Fixed `continue where you left off` not working anymore (gh-13764) --- prefs/zen/mods.yaml | 3 --- src/zen/common/modules/ZenUIManager.mjs | 2 +- src/zen/common/zenThemeModifier.js | 3 --- src/zen/compact-mode/ZenCompactMode.mjs | 1 + src/zen/spaces/ZenSpaceManager.mjs | 6 +----- 5 files changed, 3 insertions(+), 12 deletions(-) diff --git a/prefs/zen/mods.yaml b/prefs/zen/mods.yaml index 207c7e074..86f1f00c0 100644 --- a/prefs/zen/mods.yaml +++ b/prefs/zen/mods.yaml @@ -12,9 +12,6 @@ value: "@cond" condition: "defined(MOZILLA_OFFICIAL)" -- name: zen.rice.share.notice.accepted - value: false - # === Mark: Site Injection === - name: zen.injections.match-urls diff --git a/src/zen/common/modules/ZenUIManager.mjs b/src/zen/common/modules/ZenUIManager.mjs index 67e26a3be..beef37687 100644 --- a/src/zen/common/modules/ZenUIManager.mjs +++ b/src/zen/common/modules/ZenUIManager.mjs @@ -1358,6 +1358,7 @@ window.gZenVerticalTabsManager = { if (!this._hasSetSingleToolbar) { buttonsTarget.append(this._topButtonsSeparatorElement); } + this._hasSetSingleToolbar = true; for (const button of elements) { this.appendCustomizableItem(this._topButtonsSeparatorElement, button); } @@ -1381,7 +1382,6 @@ window.gZenVerticalTabsManager = { titlebar.parentNode.moveBefore(navBar, titlebar); } document.documentElement.setAttribute("zen-single-toolbar", true); - this._hasSetSingleToolbar = true; } else if (this._hasSetSingleToolbar) { this._hasSetSingleToolbar = false; // Do the opposite diff --git a/src/zen/common/zenThemeModifier.js b/src/zen/common/zenThemeModifier.js index 31449efaa..109a6a63c 100644 --- a/src/zen/common/zenThemeModifier.js +++ b/src/zen/common/zenThemeModifier.js @@ -168,9 +168,6 @@ document.documentElement.setAttribute("zen-no-padding", true); } else { document.documentElement.removeAttribute("zen-no-padding"); - if (domFullscreen) { - window.windowUtils.flushLayoutWithoutThrottledAnimations(); - } } }, diff --git a/src/zen/compact-mode/ZenCompactMode.mjs b/src/zen/compact-mode/ZenCompactMode.mjs index a4b046bf2..a29d6dd13 100644 --- a/src/zen/compact-mode/ZenCompactMode.mjs +++ b/src/zen/compact-mode/ZenCompactMode.mjs @@ -724,6 +724,7 @@ window.gZenCompactModeManager = { } else { if (attr === "zen-has-hover") { element.removeAttribute("zen-has-implicit-hover"); + gURLBar.updateTextOverflow(); } element.removeAttribute(attr); // Only remove if none of the verified attributes are present diff --git a/src/zen/spaces/ZenSpaceManager.mjs b/src/zen/spaces/ZenSpaceManager.mjs index a16f88711..36ca9c50e 100644 --- a/src/zen/spaces/ZenSpaceManager.mjs +++ b/src/zen/spaces/ZenSpaceManager.mjs @@ -926,11 +926,7 @@ class nsZenWorkspaces { if (gZenUIManager.testingEnabled || !this.workspaceEnabled) { return; } - // note: We cant access `gZenVerticalTabsManager._canReplaceNewTab` this early - if ( - isEmpty && - Services.prefs.getBoolPref("zen.urlbar.replace-newtab", true) - ) { + if (isEmpty) { tab._markedForReplacement = true; this._tabToRemoveForEmpty = tab; } else { From 035e5931fce3877083d8f7b1df872e906653ac8d Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 20 May 2026 11:53:23 +0200 Subject: [PATCH 04/31] gh-10594: Video controls going under the screen when in fullscreen (gh-13769) --- .../tabbrowser/content/tabgroup-js.patch | 23 +++++++++++-------- src/zen/common/zenThemeModifier.js | 11 +++++++++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/browser/components/tabbrowser/content/tabgroup-js.patch b/src/browser/components/tabbrowser/content/tabgroup-js.patch index 5b242496c..60b9eafae 100644 --- a/src/browser/components/tabbrowser/content/tabgroup-js.patch +++ b/src/browser/components/tabbrowser/content/tabgroup-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js -index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c1a15b335 100644 +index d1be14df27d76a191eaff05502c030fd68c46738..e9b5e90e39b594a6119081c8d707fb4a064fea9b 100644 --- a/browser/components/tabbrowser/content/tabgroup.js +++ b/browser/components/tabbrowser/content/tabgroup.js @@ -14,11 +14,11 @@ @@ -147,7 +147,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c }); } -@@ -478,13 +511,65 @@ +@@ -478,13 +511,68 @@ * @returns {MozTabbrowserTab[]} */ get tabs() { @@ -162,8 +162,9 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c + tabsCollect.push(item); + if (gBrowser.isTabGroup(item)) { + tabsCollect.push(...item.tabs); -+ } -+ } + } + } +- return childrenArray.filter(node => node.matches("tab")); + return tabsCollect.filter(node => node.matches("tab")); + } + @@ -189,9 +190,8 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c + result.push(labelContainer); + } + result.push(...item.childGroupsAndTabs); - } - } -- return childrenArray.filter(node => node.matches("tab")); ++ } ++ } + return result; + } + @@ -210,6 +210,9 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c + return false; + } + } ++ if (this.pinned && gZenWorkspaces.activeWorkspaceElement?.hasCollapsedPinnedTabs) { ++ return false; ++ } + return true; + } + @@ -218,7 +221,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c } /** -@@ -592,7 +677,6 @@ +@@ -592,7 +680,6 @@ ); } else { if (tabOrSplitView.pinned) { @@ -226,7 +229,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c } let tabToMove = this.ownerGlobal === tabOrSplitView.ownerGlobal -@@ -661,7 +745,7 @@ +@@ -661,7 +748,7 @@ */ on_click(event) { let isToggleElement = @@ -235,7 +238,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c event.target === this.#overflowCountLabel; if (isToggleElement && event.button === 0) { event.preventDefault(); -@@ -740,5 +824,6 @@ +@@ -740,5 +827,6 @@ } } diff --git a/src/zen/common/zenThemeModifier.js b/src/zen/common/zenThemeModifier.js index 109a6a63c..d3e70d28f 100644 --- a/src/zen/common/zenThemeModifier.js +++ b/src/zen/common/zenThemeModifier.js @@ -168,6 +168,17 @@ document.documentElement.setAttribute("zen-no-padding", true); } else { document.documentElement.removeAttribute("zen-no-padding"); + if (domFullscreen) { + const selectedBrowser = gBrowser.selectedBrowser; + selectedBrowser.style.paddingRight = "env(hairline)"; + window.addEventListener( + "MozAfterPaint", + () => { + selectedBrowser.style.paddingRight = ""; + }, + { once: true } + ); + } } }, From f9c4575c786e492664b6f83e91f26293e33c9f61 Mon Sep 17 00:00:00 2001 From: Ashvin Jangid <142579833+ashvwinn@users.noreply.github.com> Date: Wed, 20 May 2026 16:16:11 +0530 Subject: [PATCH 05/31] gh-13767: fix special key shortcuts displaying incorrectly until page reload (gh-13768) The problem was that `input.value` was getting the raw shortcut and not really converting it to the normalized displayable string. There was no method to just get the `displayString` for a shortcut without creating a new one, so I put that logic into `gZenZenKeyboardShortcutsManager`. The static function in `KeyShortcut` class is just to reduce code duplication. fixes: #13767 --- .../components/preferences/zen-settings.js | 2 +- src/zen/kbs/ZenKeyboardShortcuts.mjs | 45 ++++++++++++++----- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/browser/components/preferences/zen-settings.js b/src/browser/components/preferences/zen-settings.js index 16ddcbc63..052f0217c 100644 --- a/src/browser/components/preferences/zen-settings.js +++ b/src/browser/components/preferences/zen-settings.js @@ -1124,7 +1124,7 @@ var gZenCKSSettings = { this._hasSafed = false; input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-invalid`); input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-not-set`); - input.value = modifiers.toDisplayString() + shortcut; + input.value = modifiers.toDisplayString() + gZenKeyboardShortcutsManager.getKeyDisplay(shortcut); this._latestValidKey = shortcut; }, }; diff --git a/src/zen/kbs/ZenKeyboardShortcuts.mjs b/src/zen/kbs/ZenKeyboardShortcuts.mjs index c7cadbbbc..98dd08da3 100644 --- a/src/zen/kbs/ZenKeyboardShortcuts.mjs +++ b/src/zen/kbs/ZenKeyboardShortcuts.mjs @@ -553,16 +553,15 @@ class KeyShortcut { }; } - toDisplayString() { - let str = this.#modifiers.toDisplayString(); - - if (this.#key) { - str += this.#key.toUpperCase(); - } else if (this.#keycode) { + static keyToDisplayString(key, keycode) { + let str = ""; + if (key) { + str += key.toUpperCase(); + } else if (keycode) { // Get the key from the value - for (let [key, value] of Object.entries(KEYCODE_MAP)) { - if (value == this.#keycode) { - const normalizedKey = key.toLowerCase(); + for (let [k, value] of Object.entries(KEYCODE_MAP)) { + if (value == keycode) { + const normalizedKey = k.toLowerCase(); switch (normalizedKey) { case "arrowleft": str += "←"; @@ -591,9 +590,17 @@ class KeyShortcut { break; } } - } else { + } + return str; + } + + toDisplayString() { + if (!this.#key && !this.#keycode) { return ""; } + + let str = this.#modifiers.toDisplayString(); + str += KeyShortcut.keyToDisplayString(this.#key, this.#keycode); return str; } @@ -1541,4 +1548,22 @@ window.gZenKeyboardShortcutsManager = { } return null; }, + + getKeyDisplay(shortcut) { + if (shortcut == "") { + return ""; + } + + let key = shortcut; + let keycode = ""; + for (let kc of Object.keys(KEYCODE_MAP)) { + if (kc == shortcut.toUpperCase()) { + keycode = KEYCODE_MAP[kc]; + key = ""; + break; + } + } + + return KeyShortcut.keyToDisplayString(key, keycode); + }, }; From 1c3b74c508171fdf3985711540b509fd41ecc02b Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 20 May 2026 13:35:55 +0200 Subject: [PATCH 06/31] no-bug: Increase toolbar overflow threshold (gh-13771) --- prefs/zen/view.yaml | 2 +- src/zen/glance/ZenGlanceManager.mjs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/prefs/zen/view.yaml b/prefs/zen/view.yaml index 5a94673a4..172523ec5 100644 --- a/prefs/zen/view.yaml +++ b/prefs/zen/view.yaml @@ -62,7 +62,7 @@ value: "@IS_TWILIGHT@" - name: zen.view.overflow-webext-toolbar-threshold - value: 50 + value: 55 - name: zen.view.enable-loading-indicator value: true diff --git a/src/zen/glance/ZenGlanceManager.mjs b/src/zen/glance/ZenGlanceManager.mjs index e2d83eb74..2eba42111 100644 --- a/src/zen/glance/ZenGlanceManager.mjs +++ b/src/zen/glance/ZenGlanceManager.mjs @@ -35,7 +35,7 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { // Arc animation configuration #ARC_CONFIG = Object.freeze({ ARC_STEPS: 80, // Browser interpolates between keyframes natively - MAX_ARC_HEIGHT: 25, + MAX_ARC_HEIGHT: 20, ARC_HEIGHT_RATIO: 0.2, // Arc height = distance * ratio (capped at MAX_ARC_HEIGHT) }); From 8840bd77ae943403854c52753801bd95b18efd22 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 20 May 2026 13:39:12 +0200 Subject: [PATCH 07/31] no-bug: Let overflowable webexts toolbar ride the train (gh-13772) --- prefs/zen/view.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prefs/zen/view.yaml b/prefs/zen/view.yaml index 172523ec5..69066e600 100644 --- a/prefs/zen/view.yaml +++ b/prefs/zen/view.yaml @@ -59,7 +59,7 @@ value: true - name: zen.view.overflow-webext-toolbar - value: "@IS_TWILIGHT@" + value: true - name: zen.view.overflow-webext-toolbar-threshold value: 55 From ae14d052900c1d445a9c14c875bb23fc168ad9da Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 20 May 2026 16:51:06 +0200 Subject: [PATCH 08/31] no-bug: Update to Firefox `151.0` (gh-13775) --- README.md | 2 +- build/firefox-cache/l10n-last-commit-hash | 2 +- surfer.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b79094c20..b99274606 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne ### Firefox Versions -- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `150.0.3`! 🚀 +- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `151.0`! 🚀 - [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 151.0`! ### Contributing diff --git a/build/firefox-cache/l10n-last-commit-hash b/build/firefox-cache/l10n-last-commit-hash index 0439d0657..f6c433445 100644 --- a/build/firefox-cache/l10n-last-commit-hash +++ b/build/firefox-cache/l10n-last-commit-hash @@ -1 +1 @@ -0c5fe3a13813ee9cee3324047c8f0294bb8f2aff \ No newline at end of file +10b4efc5a79c2ab80de3b22771b1d36b9b225920 \ No newline at end of file diff --git a/surfer.json b/surfer.json index a7e0075b5..cb55e66a5 100644 --- a/surfer.json +++ b/surfer.json @@ -5,7 +5,7 @@ "binaryName": "zen", "version": { "product": "firefox", - "version": "150.0.3", + "version": "151.0", "candidate": "151.0", "candidateBuild": 1 }, @@ -40,7 +40,7 @@ "brandShortName": "Twilight", "brandFullName": "Zen Twilight", "release": { - "displayVersion": "1.20t", + "displayVersion": "1.21t", "github": { "repo": "zen-browser/desktop" } From 81d30b906accedb073758c2c56c1b61667a65ca6 Mon Sep 17 00:00:00 2001 From: Ashvin Jangid <142579833+ashvwinn@users.noreply.github.com> Date: Thu, 21 May 2026 12:44:18 +0530 Subject: [PATCH 09/31] gh-13776: fix shortcut conflict detection failing with special keys (gh-13777) --- src/zen/kbs/ZenKeyboardShortcuts.mjs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/zen/kbs/ZenKeyboardShortcuts.mjs b/src/zen/kbs/ZenKeyboardShortcuts.mjs index 98dd08da3..82653c77a 100644 --- a/src/zen/kbs/ZenKeyboardShortcuts.mjs +++ b/src/zen/kbs/ZenKeyboardShortcuts.mjs @@ -44,6 +44,10 @@ const KEYCODE_MAP = { SCROLL_LOCK: "VK_SCROLL", }; +const REVERSE_KEYCODE_MAP = Object.fromEntries( + Object.entries(KEYCODE_MAP).map(([k, v]) => [v, k]) +); + const defaultKeyboardGroups = { windowAndTabManagement: [ "zen-window-new-shortcut", @@ -1507,9 +1511,11 @@ window.gZenKeyboardShortcutsManager = { continue; } + const keyNameOrCode = targetShortcut.getKeyNameOrCode(); + const key = REVERSE_KEYCODE_MAP[keyNameOrCode] ?? keyNameOrCode; if ( targetShortcut.getModifiers().equals(modifiers) && - targetShortcut.getKeyNameOrCode()?.toLowerCase() == realShortcut + key?.toLowerCase() == realShortcut ) { return { hasConflicts: true, From b726dc80524aa6cb13a1d4ba64fd293d61af2716 Mon Sep 17 00:00:00 2001 From: Ashvin Jangid <142579833+ashvwinn@users.noreply.github.com> Date: Thu, 21 May 2026 12:44:33 +0530 Subject: [PATCH 10/31] gh-13612: display "Space" key name correctly in keyboard shortcuts page (gh-13774) --- src/zen/kbs/ZenKeyboardShortcuts.mjs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/zen/kbs/ZenKeyboardShortcuts.mjs b/src/zen/kbs/ZenKeyboardShortcuts.mjs index 82653c77a..8073afd22 100644 --- a/src/zen/kbs/ZenKeyboardShortcuts.mjs +++ b/src/zen/kbs/ZenKeyboardShortcuts.mjs @@ -32,7 +32,6 @@ const KEYCODE_MAP = { TAB: "VK_TAB", ENTER: "VK_RETURN", ESCAPE: "VK_ESCAPE", - SPACE: "VK_SPACE", ARROWLEFT: "VK_LEFT", ARROWRIGHT: "VK_RIGHT", ARROWUP: "VK_UP", @@ -560,7 +559,13 @@ class KeyShortcut { static keyToDisplayString(key, keycode) { let str = ""; if (key) { - str += key.toUpperCase(); + switch (key) { + case " ": + str += AppConstants.platform == "macosx" ? "␣" : "Space"; + break; + default: + str += key.toUpperCase(); + } } else if (keycode) { // Get the key from the value for (let [k, value] of Object.entries(KEYCODE_MAP)) { @@ -585,9 +590,6 @@ class KeyShortcut { case "enter": str += AppConstants.platform == "macosx" ? "↩" : "Enter"; break; - case "space": - str += AppConstants.platform == "macosx" ? "␣" : "Space"; - break; default: str += normalizedKey; } From 0b9f0bbe9115b681644e1de3e78d5368636cd7f8 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Thu, 21 May 2026 09:21:19 +0200 Subject: [PATCH 11/31] no-bug: Lower boosts radius for macos (gh-13784) --- src/zen/boosts/zen-boosts.css | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/zen/boosts/zen-boosts.css b/src/zen/boosts/zen-boosts.css index 0b80ee2e1..94afd3f1d 100644 --- a/src/zen/boosts/zen-boosts.css +++ b/src/zen/boosts/zen-boosts.css @@ -106,9 +106,6 @@ body { & button { border-radius: 6px; - @media (-moz-platform: macos) { - border-radius: 10px; - } padding: 0 !important; min-width: fit-content !important; From cd1616d1c00e875dfb5e64289f858f59e0b4e6ee Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Thu, 21 May 2026 18:18:18 +0200 Subject: [PATCH 12/31] gh-13761: Fixed closing a split view selecting it on other windows (gh-13790) --- README.md | 4 ++-- src/zen/sessionstore/ZenWindowSync.sys.mjs | 4 +++- src/zen/split-view/ZenViewSplitter.mjs | 2 +- surfer.json | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b99274606..5e46f4dc9 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,8 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne ### Firefox Versions -- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `151.0`! 🚀 -- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 151.0`! +- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `151.0.1`! 🚀 +- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 151.0.1`! ### Contributing diff --git a/src/zen/sessionstore/ZenWindowSync.sys.mjs b/src/zen/sessionstore/ZenWindowSync.sys.mjs index a8b0f69a1..ede60adeb 100644 --- a/src/zen/sessionstore/ZenWindowSync.sys.mjs +++ b/src/zen/sessionstore/ZenWindowSync.sys.mjs @@ -1657,7 +1657,9 @@ class nsZenWindowSync { this.#runOnAllWindows(window, win => { const targetTab = this.getItemFromWindow(win, tab.id); if (targetTab && win.gZenViewSplitter) { - win.gZenViewSplitter.removeTabFromGroup(targetTab); + win.gZenViewSplitter.removeTabFromGroup(targetTab, undefined, { + changeTab: false, + }); } }); } diff --git a/src/zen/split-view/ZenViewSplitter.mjs b/src/zen/split-view/ZenViewSplitter.mjs index 2dc68c03c..344938714 100644 --- a/src/zen/split-view/ZenViewSplitter.mjs +++ b/src/zen/split-view/ZenViewSplitter.mjs @@ -2294,7 +2294,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { // Unsplit the tab and exit from the drag view this.dropZone?.removeAttribute("enabled"); this.disableTabRearrangeView(event); - this.removeTabFromSplit(browserContainer); + this.removeTabFromSplit(event, browserContainer); return true; } return false; diff --git a/surfer.json b/surfer.json index cb55e66a5..ef7606370 100644 --- a/surfer.json +++ b/surfer.json @@ -5,8 +5,8 @@ "binaryName": "zen", "version": { "product": "firefox", - "version": "151.0", - "candidate": "151.0", + "version": "151.0.1", + "candidate": "151.0.1", "candidateBuild": 1 }, "buildOptions": { From 7196527509ee8bacafeaf575db7d659c6f46b503 Mon Sep 17 00:00:00 2001 From: fen4flo <75260616+FlorianButz@users.noreply.github.com> Date: Fri, 22 May 2026 17:31:25 +0200 Subject: [PATCH 13/31] gh-13796: Fix tab order reversing on dnd & boosts window size / initial color state (gh-13799) Co-authored-by: Mr. M Signed-off-by: fen4flo <75260616+FlorianButz@users.noreply.github.com> --- prefs/privatefox/disablemozilla.yaml | 7 + src/zen/boosts/ZenBoostsEditor.mjs | 155 +++++++++---------- src/zen/boosts/ZenBoostsManager.sys.mjs | 7 +- src/zen/boosts/actors/ZenBoostsChild.sys.mjs | 17 +- src/zen/boosts/nsZenBoostsBackend.cpp | 17 +- src/zen/boosts/zen-boost-editor.inc.xhtml | 22 +-- src/zen/boosts/zen-boosts.css | 14 ++ src/zen/tabs/ZenPinnedTabManager.mjs | 4 + 8 files changed, 140 insertions(+), 103 deletions(-) diff --git a/prefs/privatefox/disablemozilla.yaml b/prefs/privatefox/disablemozilla.yaml index 41b7d06e7..e974e977b 100644 --- a/prefs/privatefox/disablemozilla.yaml +++ b/prefs/privatefox/disablemozilla.yaml @@ -44,3 +44,10 @@ - name: browser.taskbarTabs.enabled value: false + +- name: browser.contentblocking.report.hide_vpn_banner + value: true + locked: true + +- name: browser.vpn_promo.enabled + value: false diff --git a/src/zen/boosts/ZenBoostsEditor.mjs b/src/zen/boosts/ZenBoostsEditor.mjs index 1708ca752..f362abe13 100644 --- a/src/zen/boosts/ZenBoostsEditor.mjs +++ b/src/zen/boosts/ZenBoostsEditor.mjs @@ -65,6 +65,7 @@ export class nsZenBoostEditor { once: true, }); + this.doc.getElementById("zenBoostWindow").setAttribute("editor", "boost"); this.doc.getElementById("zen-boost-editor-root").style.display = "flex"; this.doc.getElementById("zen-boost-code-editor-root").style.display = "none"; @@ -366,20 +367,22 @@ export class nsZenBoostEditor { // being smaller than it should be this._boostEditorWidth = this.editorWindow.outerWidth; - this.editorWindow.resizeTo( - this._codeEditorWidth, - this.editorWindow.outerHeight - ); - if (openRightAligned) { - this.editorWindow.moveTo( - this.editorWindow.screenX - offset, - this.editorWindow.screenY + this.editorWindow.requestAnimationFrame(() => { + this.editorWindow.resizeTo( + this._codeEditorWidth, + this.editorWindow.outerHeight ); - } + if (openRightAligned) { + this.editorWindow.moveTo( + this.editorWindow.screenX - offset, + this.editorWindow.screenY + ); + } - this.doc.getElementById("zen-boost-editor-root").style.display = "none"; - this.doc.getElementById("zen-boost-code-editor-root").style.display = - "initial"; + this.doc.getElementById("zen-boost-editor-root").style.display = "none"; + this.doc.getElementById("zen-boost-code-editor-root").style.display = + "initial"; + }); } /** @@ -397,20 +400,22 @@ export class nsZenBoostEditor { } windowElem.setAttribute("editor", "boost"); - this.editorWindow.resizeTo( - this._boostEditorWidth, - this.editorWindow.outerHeight - ); - if (openRightAligned) { - this.editorWindow.moveTo( - this.editorWindow.screenX + offset, - this.editorWindow.screenY + this.editorWindow.requestAnimationFrame(() => { + this.editorWindow.resizeTo( + this._boostEditorWidth, + this.editorWindow.outerHeight ); - } + if (openRightAligned) { + this.editorWindow.moveTo( + this.editorWindow.screenX + offset, + this.editorWindow.screenY + ); + } - this.doc.getElementById("zen-boost-editor-root").style.display = "flex"; - this.doc.getElementById("zen-boost-code-editor-root").style.display = - "none"; + this.doc.getElementById("zen-boost-editor-root").style.display = "flex"; + this.doc.getElementById("zen-boost-code-editor-root").style.display = + "none"; + }); // Disable picker mode this.disableAllPickers(); @@ -564,6 +569,9 @@ ${cssSelector} { this.wasDragging = true; event.preventDefault(); + this.currentBoostData.changeWasMade = true; + this.updateButtonToggleVisuals(); + if (this.dragTarget == "zen-boost-color-picker-dot-secondary") { this.setSecondaryDotPos(event.clientX, event.clientY); } else if (event.target.id != "zen-boost-magic-theme") { @@ -670,20 +678,6 @@ ${cssSelector} { panel.openPopup(event.target, "bottomcenter topcenter", 0, 2); } - /** - * Resets the color picker dot to the default position (default state). - */ - resetDotPosition() { - const gradient = this.doc.querySelector(".zen-boost-color-picker-gradient"); - const rect = gradient.getBoundingClientRect(); - const padding = 50; - const centerX = rect.left + rect.width / 2; - const centerY = rect.top + rect.height / 2; - const radius = (rect.width - padding) / 2; - - this.setDotPos(centerX + radius / 1.25, centerY); - } - /** * Handles clicks on the theme picker gradient or magic theme button. * Updates the dot position or toggles auto-theme mode based on the click target. @@ -695,14 +689,16 @@ ${cssSelector} { this.currentBoostData.changeWasMade = true; + this.currentBoostData.enableColorBoost = true; + this.updateButtonToggleVisuals(); + if (event.target.id == "zen-boost-magic-theme") { - this.currentBoostData.enableColorBoost = true; this.currentBoostData.autoTheme = !this.currentBoostData.autoTheme; - this.updateButtonToggleVisuals(); this.updateCurrentBoost(); } else if (this.dragTarget != "zen-boost-color-picker-dot-secondary") { this.setDotPos(event.clientX, event.clientY, !this.wasDragging); } + this.wasDragging = false; } @@ -1310,6 +1306,23 @@ ${cssSelector} { const resetBoost = this.doc.getElementById("zen-boost-edit-reset"); const popup = this.doc.getElementById("zenBoostContextMenu"); + popup.addEventListener( + "popupshown", + () => { + // Don't give the user following options if the boost + // is not going to save / not currently saved (unchanged) + let shouldDisable = !this.currentBoostData.changeWasMade; + const items = [renameBoost, deleteBoost, resetBoost]; + for (let item of items) { + if (shouldDisable) { + item.setAttribute("disabled", ""); + } else { + item.removeAttribute("disabled"); + } + } + }, + { once: true } + ); popup.openPopup( event.target, "bottomcenter topcenter", @@ -1319,12 +1332,6 @@ ${cssSelector} { false /* attributesOverride */, event ); - - // Don't give the user following options if the boost - // is not going to save / not currently saved (unchanged) - renameBoost.disabled = !this.currentBoostData.changeWasMade; - deleteBoost.disabled = !this.currentBoostData.changeWasMade; - resetBoost.disabled = !this.currentBoostData.changeWasMade; } /** @@ -1566,44 +1573,32 @@ ${cssSelector} { } if ( - this.currentBoostData.dotPos.x == null || - this.currentBoostData.dotPos.y == null - ) { - this.resetDotPosition(); - } else { // Test if the stored position is a non-normalized dot position - if ( - this.currentBoostData.dotPos.x > 1 || - this.currentBoostData.dotPos.x < 0 || - this.currentBoostData.dotPos.y > 1 || - this.currentBoostData.dotPos.y < 0 - ) { - // Normalize position - this.currentBoostData.dotPos.x = - this.currentBoostData.dotPos.x / rect.width; - this.currentBoostData.dotPos.y = - this.currentBoostData.dotPos.y / rect.height; - } - - // Convert normalized position to relative position - const xPos = this.currentBoostData.dotPos.x * rect.width; - const yPos = this.currentBoostData.dotPos.y * rect.height; - - dot.style.left = `${xPos}px`; - dot.style.top = `${yPos}px`; - } - - if ( - this.currentBoostData.secondaryDotPos?.x != null && - this.currentBoostData.secondaryDotPos?.y != null + this.currentBoostData.dotPos.x > 1 || + this.currentBoostData.dotPos.x < 0 || + this.currentBoostData.dotPos.y > 1 || + this.currentBoostData.dotPos.y < 0 ) { - const xPosSec = this.currentBoostData.secondaryDotPos.x * rect.width; - const yPosSec = this.currentBoostData.secondaryDotPos.y * rect.height; - - dotSec.style.left = `${xPosSec}px`; - dotSec.style.top = `${yPosSec}px`; + // Normalize position + this.currentBoostData.dotPos.x = + this.currentBoostData.dotPos.x / rect.width; + this.currentBoostData.dotPos.y = + this.currentBoostData.dotPos.y / rect.height; } + // Convert normalized position to relative position + const xPos = this.currentBoostData.dotPos.x * rect.width; + const yPos = this.currentBoostData.dotPos.y * rect.height; + + dot.style.left = `${xPos}px`; + dot.style.top = `${yPos}px`; + + const xPosSec = this.currentBoostData.secondaryDotPos.x * rect.width; + const yPosSec = this.currentBoostData.secondaryDotPos.y * rect.height; + + dotSec.style.left = `${xPosSec}px`; + dotSec.style.top = `${yPosSec}px`; + this.editorWindow._editor.setText(this.currentBoostData.customCSS || ""); this.updateFontButtonVisuals(); diff --git a/src/zen/boosts/ZenBoostsManager.sys.mjs b/src/zen/boosts/ZenBoostsManager.sys.mjs index 0525b5378..b9bb534ed 100644 --- a/src/zen/boosts/ZenBoostsManager.sys.mjs +++ b/src/zen/boosts/ZenBoostsManager.sys.mjs @@ -115,11 +115,11 @@ class nsZenBoostsManager { boostName: "My Boost", dotAngleDeg: 0, - dotPos: { x: null, y: null }, + dotPos: { x: 0.76, y: 0.66 }, dotDistance: 0, secondaryDotAngleDegDelta: 55, - secondaryDotPos: { x: null, y: null }, + secondaryDotPos: { x: 0.5, y: 0.81 }, brightness: 0.5, saturation: 0.5, @@ -559,7 +559,8 @@ class nsZenBoostsManager { const domainEntry = this.#getDomainEntry(domain); if (domainEntry) { - return domainEntry.boostEntries.has(domainEntry.activeBoostId); + const boost = this.loadActiveBoostFromStore(domain); + return boost?.boostEntry.boostData.changeWasMade ?? false; } return false; diff --git a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs index 78260f30a..637d81909 100644 --- a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs +++ b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs @@ -367,7 +367,14 @@ export class ZenBoostsChild extends JSWindowActorChild { this.#loadStyleSheet(boost.styleSheet); } - browsingContext.fullZoom = boostData.sizeOverride; + if ( + boostData.sizeOverride && + isFinite(boostData.sizeOverride) && + boostData.sizeOverride !== 1 + ) { + browsingContext.fullZoom = boostData.sizeOverride; + } + browsingContext.isZenBoostsInverted = boostData.smartInvert; if (boostData.enableColorBoost) { let primaryColor; @@ -390,17 +397,17 @@ export class ZenBoostsChild extends JSWindowActorChild { // using the same modifiers as the color above primaryColor = this.#buildBoostColor( primaryGradientColor[0], - primaryGradientColor[1] * (1 - boostData.saturation), - 0.1 + primaryGradientColor[2] * 0.9 * boostData.brightness, + 1 - boostData.saturation, + 0.1 + 0.9 * boostData.brightness, boostData ); } else { primaryColor = this.#buildBoostColor( boostData.dotAngleDeg, /* already is [0, 1] */ - boostData.dotDistance * (1 - boostData.saturation), + 1 - boostData.saturation, /* lightness range from [0.1, 0.9] */ - 0.1 + boostData.dotDistance * 0.8 * boostData.brightness, + 0.1 + 0.9 * boostData.brightness, boostData ); } diff --git a/src/zen/boosts/nsZenBoostsBackend.cpp b/src/zen/boosts/nsZenBoostsBackend.cpp index 1a54b0264..b94e2890f 100644 --- a/src/zen/boosts/nsZenBoostsBackend.cpp +++ b/src/zen/boosts/nsZenBoostsBackend.cpp @@ -359,15 +359,24 @@ inline static nscolor zenInvertColorChannel(nscolor aColor) { const auto gShifted = sum - gInv; const auto bShifted = sum - bInv; - // Compress the channel range into [FLOOR, 255] so dark inversions are - // lifted while light inversions are left untouched. This preserves hue - // since all three channels are scaled by the same factor. + // If the resulting color is light, leave it untouched: mixing in the floor + // would raise its lowest channel and wash the color out toward grey. Only + // dark results get the floor lift, which keeps them off pure black. + const auto luma = (rShifted * 54 + gShifted * 183 + bShifted * 19) >> 8; + if (luma > 127) { + return NS_RGBA(static_cast(rShifted), + static_cast(gShifted), + static_cast(bShifted), a); + } + + // Compress the dark channel range into [FLOOR, 255] so dark inversions are + // lifted off pure black. This preserves hue since all three channels are + // scaled by the same factor. const auto channelFloor = INVERT_CHANNEL_FLOOR(); const uint32_t range = 255 - channelFloor; const auto lift = [channelFloor, range](uint8_t c) -> uint8_t { return static_cast(channelFloor + (c * range) / 255); }; - return NS_RGBA(lift(rShifted), lift(gShifted), lift(bShifted), a); } diff --git a/src/zen/boosts/zen-boost-editor.inc.xhtml b/src/zen/boosts/zen-boost-editor.inc.xhtml index 508dc9c42..15c75f57c 100644 --- a/src/zen/boosts/zen-boost-editor.inc.xhtml +++ b/src/zen/boosts/zen-boost-editor.inc.xhtml @@ -132,18 +132,18 @@ - - - - - - - - - - - + + + + + + + + + + + Date: Sat, 23 May 2026 08:16:22 +0200 Subject: [PATCH 14/31] no-bug: Update macos SDK version to `26.5` (gh-13807) --- .github/workflows/macos-release-build.yml | 6 ++++++ configs/macos/mozconfig | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/macos-release-build.yml b/.github/workflows/macos-release-build.yml index 66f2789f0..b3395f0f1 100644 --- a/.github/workflows/macos-release-build.yml +++ b/.github/workflows/macos-release-build.yml @@ -48,6 +48,12 @@ jobs: with: node-version-file: ".nvmrc" + - name: Log SDK versions + run: | + ls /Library/Developer/CommandLineTools/SDKs/ + xcrun --show-sdk-version + xcrun --show-sdk-path + - name: Run sccache-cache uses: mozilla-actions/sccache-action@main if: ${{ inputs.use-sccache }} diff --git a/configs/macos/mozconfig b/configs/macos/mozconfig index 4b2e503ea..e7f655940 100644 --- a/configs/macos/mozconfig +++ b/configs/macos/mozconfig @@ -8,7 +8,7 @@ ac_add_options --disable-dmd ac_add_options --enable-eme=widevine if test "$ZEN_RELEASE"; then - ac_add_options --with-macos-sdk=/Library/Developer/CommandLineTools/SDKs/MacOSX26.4.sdk + ac_add_options --with-macos-sdk=/Library/Developer/CommandLineTools/SDKs/MacOSX26.5.sdk fi if test "$ZEN_RELEASE"; then From 29226112f5b6040eba26c8ac867971cb994a201d Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Sat, 23 May 2026 08:31:03 +0200 Subject: [PATCH 15/31] no-bug: Fallbac to macos SDK version 26.4 if 26.5 doesnt exist (gh-13808) --- configs/macos/mozconfig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/configs/macos/mozconfig b/configs/macos/mozconfig index e7f655940..c838095cd 100644 --- a/configs/macos/mozconfig +++ b/configs/macos/mozconfig @@ -8,7 +8,13 @@ ac_add_options --disable-dmd ac_add_options --enable-eme=widevine if test "$ZEN_RELEASE"; then - ac_add_options --with-macos-sdk=/Library/Developer/CommandLineTools/SDKs/MacOSX26.5.sdk + ALLOWED_SDKS="26.5 26.4" + for SDK in $ALLOWED_SDKS; do + if [ -d "/Library/Developer/CommandLineTools/SDKs/MacOSX${SDK}.sdk" ]; then + ac_add_options --with-macos-sdk=/Library/Developer/CommandLineTools/SDKs/MacOSX${SDK}.sdk + break + fi + done fi if test "$ZEN_RELEASE"; then From 09ed192fc4be871a9fab1986e40ce90f3e18db9c Mon Sep 17 00:00:00 2001 From: Ashvin Jangid <142579833+ashvwinn@users.noreply.github.com> Date: Sat, 23 May 2026 15:56:13 +0530 Subject: [PATCH 16/31] gh-13642: fix unexpected sidebar width increase in compact mode (gh-13794) `getAndApplySidebarWidth()` does handle this case but in the condition it requires the event. ``` if ( event && shouldRecalculate && sidebarExpanded && !gZenVerticalTabsManager._hadSidebarCollapse ) { return; } ``` If the function does not return here then it makes the `--zen-sidebar-width` = `--actual-zen-sidebar-width` which adds the padding's width to the sidebar. I don't know if not passing event in the function was intentional, but this seems to fix the issue. fixes: #13642 --- src/zen/common/modules/ZenUIManager.mjs | 2 +- src/zen/spaces/ZenSpaceCreation.mjs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zen/common/modules/ZenUIManager.mjs b/src/zen/common/modules/ZenUIManager.mjs index beef37687..4553c5bb6 100644 --- a/src/zen/common/modules/ZenUIManager.mjs +++ b/src/zen/common/modules/ZenUIManager.mjs @@ -1510,7 +1510,7 @@ window.gZenVerticalTabsManager = { this.navigatorToolbox.after(splitter); window.dispatchEvent(new Event("resize")); if (!isCompactMode) { - gZenCompactModeManager.getAndApplySidebarWidth(); + gZenCompactModeManager.getAndApplySidebarWidth({}); } gZenUIManager.updateTabsToolbar(); this.rebuildURLBarMenus(); diff --git a/src/zen/spaces/ZenSpaceCreation.mjs b/src/zen/spaces/ZenSpaceCreation.mjs index 26690eabf..5792d2120 100644 --- a/src/zen/spaces/ZenSpaceCreation.mjs +++ b/src/zen/spaces/ZenSpaceCreation.mjs @@ -219,7 +219,7 @@ class nsZenWorkspaceCreation extends MozXULElement { document.getElementById("nav-bar").style.visibility = "collapse"; } this.style.visibility = "visible"; - gZenCompactModeManager.getAndApplySidebarWidth(); + gZenCompactModeManager.getAndApplySidebarWidth({}); this.resolveInitialized(); let animation = gZenUIManager.motion.animate( this.elementsToAnimate, From 999a78d65605e88c3cf2b867c5eef0e731f2a4bd Mon Sep 17 00:00:00 2001 From: fen4flo <75260616+FlorianButz@users.noreply.github.com> Date: Sat, 23 May 2026 15:28:45 +0200 Subject: [PATCH 17/31] no-bug: Fix manager not writing to file after boost toggle (gh-13815) --- src/zen/boosts/ZenBoostsManager.sys.mjs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/zen/boosts/ZenBoostsManager.sys.mjs b/src/zen/boosts/ZenBoostsManager.sys.mjs index b9bb534ed..a93492da5 100644 --- a/src/zen/boosts/ZenBoostsManager.sys.mjs +++ b/src/zen/boosts/ZenBoostsManager.sys.mjs @@ -312,6 +312,7 @@ class nsZenBoostsManager { Services.obs.notifyObservers(null, "zen-boosts-active-change", { id }); + this.#writeToDisk(this.registeredDomains); this.#stylesManager.invalidateStyleForDomain(domain); this.notify(); } @@ -327,23 +328,23 @@ class nsZenBoostsManager { if (domainEntry) { if (domainEntry.boostEntries.has(id)) { + let unloadStyles = false; if (domainEntry.activeBoostId === id) { domainEntry.activeBoostId = null; Services.obs.notifyObservers(null, "zen-boosts-active-change", { id: null, }); - - this.#stylesManager.invalidateStyleForDomain(domain); - this.notify(true); + unloadStyles = true; } else { domainEntry.activeBoostId = id; Services.obs.notifyObservers(null, "zen-boosts-active-change", { id, }); - - this.#stylesManager.invalidateStyleForDomain(domain); - this.notify(); } + + this.#writeToDisk(this.registeredDomains); + this.#stylesManager.invalidateStyleForDomain(domain); + this.notify(unloadStyles); } } } From 8f905e7abd9d4b0c145ea9f5ad3b02190308831f Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Sun, 24 May 2026 11:00:54 +0200 Subject: [PATCH 18/31] no-bug: Fix boosts picker showing wrong auto theme choice (gh-13821) --- src/zen/boosts/ZenBoostsEditor.mjs | 2 +- src/zen/boosts/zen-boosts.css | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/zen/boosts/ZenBoostsEditor.mjs b/src/zen/boosts/ZenBoostsEditor.mjs index f362abe13..723229743 100644 --- a/src/zen/boosts/ZenBoostsEditor.mjs +++ b/src/zen/boosts/ZenBoostsEditor.mjs @@ -690,7 +690,6 @@ ${cssSelector} { this.currentBoostData.changeWasMade = true; this.currentBoostData.enableColorBoost = true; - this.updateButtonToggleVisuals(); if (event.target.id == "zen-boost-magic-theme") { this.currentBoostData.autoTheme = !this.currentBoostData.autoTheme; @@ -699,6 +698,7 @@ ${cssSelector} { this.setDotPos(event.clientX, event.clientY, !this.wasDragging); } + this.updateButtonToggleVisuals(); this.wasDragging = false; } diff --git a/src/zen/boosts/zen-boosts.css b/src/zen/boosts/zen-boosts.css index d82f0e48e..f0b3c43ba 100644 --- a/src/zen/boosts/zen-boosts.css +++ b/src/zen/boosts/zen-boosts.css @@ -17,8 +17,8 @@ } #zenBoostWindow[editor="boost"] { - min-width: 192px; - max-width: 192px; + min-width: 184px; + max-width: 184px; } #zenBoostWindow[editor="code"] { @@ -239,9 +239,9 @@ body { } #zen-boost-filter-wrapper { - padding: 20px; + padding: 16px; gap: 14px; - padding-top: 10px; + padding-top: 6px; background-color: #fcfcfe; From 7e449ccdc9a73f1566ca71d7a18fbb7ffbab7326 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Mon, 25 May 2026 19:58:28 +0200 Subject: [PATCH 19/31] gh-10594: Increase the padding size when entering fullscreen (gh-13848) --- .../components/customizableui/CustomizableUI-sys-mjs.patch | 4 ++-- src/zen/common/styles/zen-theme.css | 2 +- src/zen/common/zenThemeModifier.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/browser/components/customizableui/CustomizableUI-sys-mjs.patch b/src/browser/components/customizableui/CustomizableUI-sys-mjs.patch index 4b057e3d2..861ba1f81 100644 --- a/src/browser/components/customizableui/CustomizableUI-sys-mjs.patch +++ b/src/browser/components/customizableui/CustomizableUI-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs -index 5905271a3343efa04b45f5d1a63bfca3de342755..af76922c1ba0b35a0072ec044f7d0860f9295d9d 100644 +index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23b95f08d0 100644 --- a/browser/components/customizableui/CustomizableUI.sys.mjs +++ b/browser/components/customizableui/CustomizableUI.sys.mjs @@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, { @@ -195,7 +195,7 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..af76922c1ba0b35a0072ec044f7d0860 + win.gZenVerticalTabsManager._hasSetSingleToolbar && + Services.prefs.getBoolPref("zen.view.overflow-webext-toolbar", true) && + !win.gURLBar.hasAttribute("breakout-extend")) { -+ const availSelectors = ":is(#page-action-buttons, #zen-copy-url-button, .unified-extensions-item)"; ++ const availSelectors = ":is(#page-action-buttons, #zen-copy-url-button, .unified-extensions-item, .urlbar-addon-page-action)"; + const width = [ + ...win.gURLBar._inputContainer.querySelectorAll(availSelectors), + ...win.document.getElementById("zen-overflow-extensions-list").querySelectorAll(availSelectors) diff --git a/src/zen/common/styles/zen-theme.css b/src/zen/common/styles/zen-theme.css index 1c6571ab3..815dd2a34 100644 --- a/src/zen/common/styles/zen-theme.css +++ b/src/zen/common/styles/zen-theme.css @@ -167,7 +167,7 @@ --toolbarbutton-hover-background: var(--zen-toolbar-element-bg-hover) !important; --zen-toolbar-button-size: 16px; @media (-moz-platform: macos) { - --zen-toolbar-button-size: 18px; + --zen-toolbar-button-size: 17px; } /* Using a semitransparent background preserves the tinting from the backdrop. diff --git a/src/zen/common/zenThemeModifier.js b/src/zen/common/zenThemeModifier.js index d3e70d28f..30f2a42ce 100644 --- a/src/zen/common/zenThemeModifier.js +++ b/src/zen/common/zenThemeModifier.js @@ -170,7 +170,7 @@ document.documentElement.removeAttribute("zen-no-padding"); if (domFullscreen) { const selectedBrowser = gBrowser.selectedBrowser; - selectedBrowser.style.paddingRight = "env(hairline)"; + selectedBrowser.style.paddingRight = "0.5px"; window.addEventListener( "MozAfterPaint", () => { From 69e76e51b7ac0aba91a586e260fb1e1c2f536adf Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Mon, 25 May 2026 19:58:38 +0200 Subject: [PATCH 20/31] gh-13844: Fixed boosts not working when anon content exists (gh-13847) --- src/gfx/layers/AnimationInfo-cpp.patch | 26 ++--- src/layout/base/PresShell-cpp.patch | 7 +- src/layout/generic/ViewportFrame-cpp.patch | 33 ------ src/layout/generic/nsContainerFrame-cpp.patch | 47 ++++++++ src/layout/generic/nsIFrame-h.patch | 13 +++ src/layout/generic/nsImageFrame-cpp.patch | 13 +++ src/layout/generic/nsTextFrame-cpp.patch | 13 +++ src/layout/generic/nsTextPaintStyle-cpp.patch | 67 +++++++++++ src/layout/mathml/nsMathMLChar-cpp.patch | 13 +++ src/layout/painting/nsCSSRendering-cpp.patch | 87 ++++++++++++++ src/layout/painting/nsDisplayList-cpp.patch | 23 ---- src/layout/style/ComputedStyle-cpp.patch | 65 +++++++++++ src/layout/style/ComputedStyle-h.patch | 22 ++++ src/layout/style/StyleColor-cpp.patch | 34 +++++- src/layout/style/StyleColorInlines-h.patch | 13 +++ src/layout/svg/FilterInstance-cpp.patch | 13 +++ src/layout/svg/SVGTextFrame-cpp.patch | 28 +++++ src/layout/tables/nsTableFrame-cpp.patch | 13 +++ src/layout/xul/tree/nsTreeBodyFrame-cpp.patch | 23 ++++ src/servo/ports/geckolib/cbindgen-toml.patch | 30 +++++ src/zen/boosts/actors/ZenBoostsChild.sys.mjs | 33 ++---- src/zen/boosts/nsZenBCOverrides.cpp | 15 --- src/zen/boosts/nsZenBoostsBackend.cpp | 106 ++++++------------ src/zen/boosts/nsZenBoostsBackend.h | 70 ++---------- src/zen/common/sys/ZenActorsManager.sys.mjs | 3 +- 25 files changed, 565 insertions(+), 245 deletions(-) delete mode 100644 src/layout/generic/ViewportFrame-cpp.patch create mode 100644 src/layout/generic/nsContainerFrame-cpp.patch create mode 100644 src/layout/generic/nsIFrame-h.patch create mode 100644 src/layout/generic/nsImageFrame-cpp.patch create mode 100644 src/layout/generic/nsTextFrame-cpp.patch create mode 100644 src/layout/generic/nsTextPaintStyle-cpp.patch create mode 100644 src/layout/mathml/nsMathMLChar-cpp.patch create mode 100644 src/layout/painting/nsCSSRendering-cpp.patch delete mode 100644 src/layout/painting/nsDisplayList-cpp.patch create mode 100644 src/layout/style/ComputedStyle-cpp.patch create mode 100644 src/layout/style/ComputedStyle-h.patch create mode 100644 src/layout/style/StyleColorInlines-h.patch create mode 100644 src/layout/svg/FilterInstance-cpp.patch create mode 100644 src/layout/svg/SVGTextFrame-cpp.patch create mode 100644 src/layout/tables/nsTableFrame-cpp.patch create mode 100644 src/layout/xul/tree/nsTreeBodyFrame-cpp.patch create mode 100644 src/servo/ports/geckolib/cbindgen-toml.patch diff --git a/src/gfx/layers/AnimationInfo-cpp.patch b/src/gfx/layers/AnimationInfo-cpp.patch index aa58cdcbc..7a91671c6 100644 --- a/src/gfx/layers/AnimationInfo-cpp.patch +++ b/src/gfx/layers/AnimationInfo-cpp.patch @@ -1,5 +1,5 @@ diff --git a/gfx/layers/AnimationInfo.cpp b/gfx/layers/AnimationInfo.cpp -index 1d330056bd7a4e89aac5e5296a3c164fb42b5c42..38bfbcfcaf0c791ee817aafbd24b1cad67974e62 100644 +index 1d330056bd7a4e89aac5e5296a3c164fb42b5c42..629fbdd748310c31aeb16b0a8d8e862a99314cc9 100644 --- a/gfx/layers/AnimationInfo.cpp +++ b/gfx/layers/AnimationInfo.cpp @@ -14,6 +14,7 @@ @@ -10,22 +10,20 @@ index 1d330056bd7a4e89aac5e5296a3c164fb42b5c42..38bfbcfcaf0c791ee817aafbd24b1cad #include "nsIContent.h" #include "nsLayoutUtils.h" #include "nsRefreshDriver.h" -@@ -343,7 +344,17 @@ static void SetAnimatable(NonCustomCSSPropertyId aProperty, +@@ -341,9 +342,13 @@ static void SetAnimatable(NonCustomCSSPropertyId aProperty, + case eCSSProperty_background_color: { + // We don't support color animation on the compositor yet so that we can // resolve currentColor at this moment. - nscolor foreground = - aFrame->Style()->GetVisitedDependentColor(&nsStyleText::mColor); +- nscolor foreground = +- aFrame->Style()->GetVisitedDependentColor(&nsStyleText::mColor); - aAnimatable = aAnimationValue.GetColor(foreground); ++ nscolor foreground = aFrame->Style()->GetVisitedDependentColor( ++ &nsStyleText::mColor, nullptr); + nscolor resolved = aAnimationValue.GetColor(foreground); -+ // |foreground| is already boost-resolved through -+ // StyleAbsoluteColor::ToColor, so a currentColor keyframe is already -+ // filtered; only absolute keyframe colors still need the boost applied -+ // here, exactly once, so the composited transition endpoint matches the -+ // resting/static paint and doesn't snap when the transition ends. -+ aAnimatable = -+ aAnimationValue.IsCurrentColor() -+ ? resolved -+ : zen::nsZenBoostsBackend::FilterColorFromPresContext( -+ resolved, aFrame->PresContext()); ++ aAnimatable = aAnimationValue.IsCurrentColor() ++ ? resolved ++ : zen::nsZenBoostsBackend::ResolveStyleColor(resolved, ++ aFrame); break; } case eCSSProperty_opacity: diff --git a/src/layout/base/PresShell-cpp.patch b/src/layout/base/PresShell-cpp.patch index c24995ca5..3ec1da1b6 100644 --- a/src/layout/base/PresShell-cpp.patch +++ b/src/layout/base/PresShell-cpp.patch @@ -1,5 +1,5 @@ diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp -index b5930f71e362eb78f74888e1b33b2a6f9dbb4ea4..dc1ba0b462402f62e47fcb32e2d7cd1a671a7fd8 100644 +index b5930f71e362eb78f74888e1b33b2a6f9dbb4ea4..2105911a18b64e210d3125fec1bfa8058ca07d4e 100644 --- a/layout/base/PresShell.cpp +++ b/layout/base/PresShell.cpp @@ -135,6 +135,7 @@ @@ -10,12 +10,13 @@ index b5930f71e362eb78f74888e1b33b2a6f9dbb4ea4..dc1ba0b462402f62e47fcb32e2d7cd1a #include "nsAnimationManager.h" #include "nsAutoLayoutPhase.h" #include "nsCOMArray.h" -@@ -5572,7 +5573,7 @@ nscolor PresShell::GetDefaultBackgroundColorToDraw() const { +@@ -5572,7 +5573,8 @@ nscolor PresShell::GetDefaultBackgroundColorToDraw() const { if (!mPresContext) { return NS_RGB(255, 255, 255); } - return mPresContext->DefaultBackgroundColor(); -+ return zen::nsZenBoostsBackend::FilterColorFromPresContext(mPresContext->DefaultBackgroundColor(), mPresContext); ++ return zen::nsZenBoostsBackend::ResolveStyleColor( ++ mPresContext->DefaultBackgroundColor(), GetRootFrame()); } void PresShell::UpdateCanvasBackground() { diff --git a/src/layout/generic/ViewportFrame-cpp.patch b/src/layout/generic/ViewportFrame-cpp.patch deleted file mode 100644 index 5f5e0294d..000000000 --- a/src/layout/generic/ViewportFrame-cpp.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff --git a/layout/generic/ViewportFrame.cpp b/layout/generic/ViewportFrame.cpp -index 9d1c25c3834da50fd7dfa3a9583144f5817ee231..08b69a63ea3a8067861984fa2fcd25435c921c0d 100644 ---- a/layout/generic/ViewportFrame.cpp -+++ b/layout/generic/ViewportFrame.cpp -@@ -23,6 +23,7 @@ - #include "nsLayoutUtils.h" - #include "nsPlaceholderFrame.h" - #include "nsSubDocumentFrame.h" -+#include "mozilla/nsZenBoostsBackend.h" - - using namespace mozilla; - -@@ -291,15 +292,20 @@ ViewportFrame::BuildDisplayListForViewTransitionsAndNACTopLayer( - } - } - -+ bool isAnonContent = false; - if (dom::Element* container = doc->GetCustomContentContainer()) { - if (nsIFrame* frame = container->GetPrimaryFrame()) { - MOZ_ASSERT(frame->StyleDisplay()->mTopLayer != StyleTopLayer::None, - "ua.css should ensure this"); - MOZ_ASSERT(frame->HasAnyStateBits(NS_FRAME_OUT_OF_FLOW)); -+ isAnonContent = frame->ContentIsRootOfNativeAnonymousSubtree(); - BuildDisplayListForTopLayerFrame(aBuilder, frame, &topLayerList); - } - } - -+ if (auto zenBackend = zen::nsZenBoostsBackend::GetInstance()) { -+ zenBackend->mCurrentFrameIsAnonymousContent = isAnonContent; -+ } - return MaybeWrapTopLayerList( - aBuilder, uint16_t(TopLayerIndex::ViewTransitionsAndAnonymousContent), - topLayerList); diff --git a/src/layout/generic/nsContainerFrame-cpp.patch b/src/layout/generic/nsContainerFrame-cpp.patch new file mode 100644 index 000000000..e8d69b552 --- /dev/null +++ b/src/layout/generic/nsContainerFrame-cpp.patch @@ -0,0 +1,47 @@ +diff --git a/layout/generic/nsContainerFrame.cpp b/layout/generic/nsContainerFrame.cpp +index c27fec39f9e32e61f0e335e5880ce3e97074965b..7b4f7760dcf92ead74c9f89cfc7a067892af9e34 100644 +--- a/layout/generic/nsContainerFrame.cpp ++++ b/layout/generic/nsContainerFrame.cpp +@@ -349,7 +349,8 @@ class nsDisplaySelectionOverlay final : public nsPaintedDisplayItem { + nsDisplayListBuilder* aDisplayListBuilder) override; + NS_DISPLAY_DECL_NAME("SelectionOverlay", TYPE_SELECTION_OVERLAY) + +- static DeviceColor ComputeColorFromSelectionStyle(const ComputedStyle&); ++ static DeviceColor ComputeColorFromSelectionStyle(const ComputedStyle&, ++ const nsIFrame*); + static DeviceColor ApplyTransparencyIfNecessary(nscolor); + + private: +@@ -371,9 +372,9 @@ DeviceColor nsDisplaySelectionOverlay::ApplyTransparencyIfNecessary( + } + + DeviceColor nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle( +- const ComputedStyle& aStyle) { +- return ApplyTransparencyIfNecessary( +- aStyle.GetVisitedDependentColor(&nsStyleBackground::mBackgroundColor)); ++ const ComputedStyle& aStyle, const nsIFrame* aFrame) { ++ return ApplyTransparencyIfNecessary(aStyle.GetVisitedDependentColor( ++ &nsStyleBackground::mBackgroundColor, aFrame)); + } + + void nsDisplaySelectionOverlay::Paint(nsDisplayListBuilder* aBuilder, +@@ -472,7 +473,8 @@ void nsContainerFrame::DisplaySelectionOverlay(nsDisplayListBuilder* aBuilder, + ComputeHighlightSelectionStyle(sd->mHighlightData.mHighlightName)) { + aList->AppendNewToTopWithIndex( + aBuilder, this, index++, +- nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle(*style)); ++ nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle(*style, ++ this)); + } + } + +@@ -480,7 +482,8 @@ void nsContainerFrame::DisplaySelectionOverlay(nsDisplayListBuilder* aBuilder, + if (normal) { + DeviceColor color; + if (RefPtr style = ComputeSelectionStyle(selectionValue)) { +- color = nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle(*style); ++ color = nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle(*style, ++ this); + } else { + LookAndFeel::ColorID colorID; + if (selectionValue == nsISelectionController::SELECTION_ON) { diff --git a/src/layout/generic/nsIFrame-h.patch b/src/layout/generic/nsIFrame-h.patch new file mode 100644 index 000000000..be0b97926 --- /dev/null +++ b/src/layout/generic/nsIFrame-h.patch @@ -0,0 +1,13 @@ +diff --git a/layout/generic/nsIFrame.h b/layout/generic/nsIFrame.h +index 588b00d7ee115f0a7513e357af7ab5eee28311c1..bf07b69c7e7957e6e558403e069f16e2dec3cad0 100644 +--- a/layout/generic/nsIFrame.h ++++ b/layout/generic/nsIFrame.h +@@ -1008,7 +1008,7 @@ class nsIFrame : public nsQueryFrame { + /** Also forward GetVisitedDependentColor to the style */ + template + nscolor GetVisitedDependentColor(T S::* aField) { +- return mComputedStyle->GetVisitedDependentColor(aField); ++ return mComputedStyle->GetVisitedDependentColor(aField, this); + } + + /** diff --git a/src/layout/generic/nsImageFrame-cpp.patch b/src/layout/generic/nsImageFrame-cpp.patch new file mode 100644 index 000000000..d64f3fd46 --- /dev/null +++ b/src/layout/generic/nsImageFrame-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/generic/nsImageFrame.cpp b/layout/generic/nsImageFrame.cpp +index c4ff60477e3061aeeecbdedb5ad8054d3808ab6e..40857d430eda576c4fca613857860f32abb39e2d 100644 +--- a/layout/generic/nsImageFrame.cpp ++++ b/layout/generic/nsImageFrame.cpp +@@ -1764,7 +1764,7 @@ void nsImageFrame::DisplayAltText(nsPresContext* aPresContext, + const nsRect& aRect) { + // Set font and color + aRenderingContext.SetColor( +- sRGBColor::FromABGR(StyleText()->mColor.ToColor())); ++ sRGBColor::FromABGR(StyleText()->mColor.ToColor(this))); + RefPtr fm = + nsLayoutUtils::GetInflatedFontMetricsForFrame(this); + diff --git a/src/layout/generic/nsTextFrame-cpp.patch b/src/layout/generic/nsTextFrame-cpp.patch new file mode 100644 index 000000000..0c8afe005 --- /dev/null +++ b/src/layout/generic/nsTextFrame-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/generic/nsTextFrame.cpp b/layout/generic/nsTextFrame.cpp +index e7f7943a19d3ac71872d0a8439b6ed90e8fd423d..eb3e84fabc67d95b6d194b5aaf3aaef7c38480c0 100644 +--- a/layout/generic/nsTextFrame.cpp ++++ b/layout/generic/nsTextFrame.cpp +@@ -6381,7 +6381,7 @@ void nsTextFrame::DrawSelectionDecorations( + computedStyleFromPseudo->StyleTextReset()->mTextDecorationStyle; + params.color = + computedStyleFromPseudo->StyleTextReset() +- ->mTextDecorationColor.CalcColor(*computedStyleFromPseudo); ++ ->mTextDecorationColor.CalcColor(*computedStyleFromPseudo, this); + params.decoration = + computedStyleFromPseudo->StyleTextReset()->mTextDecorationLine; + params.descentLimit = -1.f; diff --git a/src/layout/generic/nsTextPaintStyle-cpp.patch b/src/layout/generic/nsTextPaintStyle-cpp.patch new file mode 100644 index 000000000..9ff579abb --- /dev/null +++ b/src/layout/generic/nsTextPaintStyle-cpp.patch @@ -0,0 +1,67 @@ +diff --git a/layout/generic/nsTextPaintStyle.cpp b/layout/generic/nsTextPaintStyle.cpp +index 5d1bf44687e925aff67f44c8e0629f7f06e84e98..1fa60a4d91edc60ba733cefc5f73ab8b7684d02a 100644 +--- a/layout/generic/nsTextPaintStyle.cpp ++++ b/layout/generic/nsTextPaintStyle.cpp +@@ -240,7 +240,7 @@ bool nsTextPaintStyle::GetTargetTextColor(nscolor* aForeColor) { + (mTargetTextPseudoStyle->HasAuthorSpecifiedTextColor() || + mTargetTextPseudoStyle->HasAuthorSpecifiedBorderOrBackground())) { + *aForeColor = mTargetTextPseudoStyle->GetVisitedDependentColor( +- &nsStyleText::mWebkitTextFillColor); ++ &nsStyleText::mWebkitTextFillColor, mFrame); + return mTargetTextPseudoStyle->HasAuthorSpecifiedTextColor(); + } + *aForeColor = LookAndFeel::Color( +@@ -257,7 +257,7 @@ bool nsTextPaintStyle::GetTargetTextBackgroundColor(nscolor* aBackColor) { + (mTargetTextPseudoStyle->HasAuthorSpecifiedTextColor() || + mTargetTextPseudoStyle->HasAuthorSpecifiedBorderOrBackground())) { + *aBackColor = mTargetTextPseudoStyle->GetVisitedDependentColor( +- &nsStyleBackground::mBackgroundColor); ++ &nsStyleBackground::mBackgroundColor, mFrame); + return NS_GET_A(*aBackColor) != 0; + } + *aBackColor = LookAndFeel::Color( +@@ -295,7 +295,8 @@ bool nsTextPaintStyle::GetCustomHighlightTextColor(nsAtom* aHighlightName, + return false; + } + +- *aForeColor = highlightStyle->GetVisitedDependentColor(&nsStyleText::mColor); ++ *aForeColor = ++ highlightStyle->GetVisitedDependentColor(&nsStyleText::mColor, mFrame); + + return highlightStyle->HasAuthorSpecifiedTextColor(); + } +@@ -317,7 +318,7 @@ bool nsTextPaintStyle::GetCustomHighlightBackgroundColor(nsAtom* aHighlightName, + } + + *aBackColor = highlightStyle->GetVisitedDependentColor( +- &nsStyleBackground::mBackgroundColor); ++ &nsStyleBackground::mBackgroundColor, mFrame); + return NS_GET_A(*aBackColor) != 0; + } + +@@ -466,19 +467,19 @@ bool nsTextPaintStyle::InitSelectionColorsAndShadow() { + // this is web content or chrome content. See bug 2029839. + if (!mFrame->PresContext()->Document()->ChromeRulesEnabled()) { + mSelectionBGColor = mSelectionPseudoStyle->GetVisitedDependentColor( +- &nsStyleBackground::mBackgroundColor); +- mSelectionTextColor = +- mSelectionPseudoStyle->GetVisitedDependentColor(&nsStyleText::mColor); ++ &nsStyleBackground::mBackgroundColor, mFrame); ++ mSelectionTextColor = mSelectionPseudoStyle->GetVisitedDependentColor( ++ &nsStyleText::mColor, mFrame); + return true; + } + + if (nscolor bgColor = mSelectionPseudoStyle->GetVisitedDependentColor( +- &nsStyleBackground::mBackgroundColor); ++ &nsStyleBackground::mBackgroundColor, mFrame); + mSelectionPseudoStyle->HasAuthorSpecifiedTextColor() || + NS_GET_A(bgColor) > 0) { + mSelectionBGColor = bgColor; +- mSelectionTextColor = +- mSelectionPseudoStyle->GetVisitedDependentColor(&nsStyleText::mColor); ++ mSelectionTextColor = mSelectionPseudoStyle->GetVisitedDependentColor( ++ &nsStyleText::mColor, mFrame); + return true; + } + } diff --git a/src/layout/mathml/nsMathMLChar-cpp.patch b/src/layout/mathml/nsMathMLChar-cpp.patch new file mode 100644 index 000000000..a541b1a68 --- /dev/null +++ b/src/layout/mathml/nsMathMLChar-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/mathml/nsMathMLChar.cpp b/layout/mathml/nsMathMLChar.cpp +index befaf7fed81a486f61e1186775c138ce5473a057..c7eb36dc9fcd06f8641d2d1a974e75eb24e07669 100644 +--- a/layout/mathml/nsMathMLChar.cpp ++++ b/layout/mathml/nsMathMLChar.cpp +@@ -1686,7 +1686,7 @@ void nsMathMLChar::PaintForeground(nsIFrame* aForFrame, + + // Set color ... + nscolor fgColor = computedStyle->GetVisitedDependentColor( +- &nsStyleText::mWebkitTextFillColor); ++ &nsStyleText::mWebkitTextFillColor, aForFrame); + if (aIsSelected) { + // get color to use for selection from the look&feel object + fgColor = LookAndFeel::Color(LookAndFeel::ColorID::Highlighttext, aForFrame, diff --git a/src/layout/painting/nsCSSRendering-cpp.patch b/src/layout/painting/nsCSSRendering-cpp.patch new file mode 100644 index 000000000..3adf1e693 --- /dev/null +++ b/src/layout/painting/nsCSSRendering-cpp.patch @@ -0,0 +1,87 @@ +diff --git a/layout/painting/nsCSSRendering.cpp b/layout/painting/nsCSSRendering.cpp +index a581b039a8681f7d8191edfad100d287af38592e..4cd3d6695a04a42d806c36f8d5a324cac9efda34 100644 +--- a/layout/painting/nsCSSRendering.cpp ++++ b/layout/painting/nsCSSRendering.cpp +@@ -598,7 +598,8 @@ void nsCSSRendering::ComputePixelRadii(const nsRectCornerRadii& aRadii, + } + } + +-static Maybe GetBorderIfVisited(const ComputedStyle& aStyle) { ++static Maybe GetBorderIfVisited(const ComputedStyle& aStyle, ++ const nsIFrame* aFrame) { + Maybe result; + // Don't check RelevantLinkVisited here, since we want to take the + // same amount of time whether or not it's true. +@@ -611,7 +612,7 @@ static Maybe GetBorderIfVisited(const ComputedStyle& aStyle) { + auto& newBorder = result.ref(); + for (const auto side : mozilla::AllPhysicalSides()) { + nscolor color = aStyle.GetVisitedDependentColor( +- nsStyleBorder::BorderColorFieldFor(side)); ++ nsStyleBorder::BorderColorFieldFor(side), aFrame); + newBorder.BorderColorFor(side) = StyleColor::FromColor(color); + } + +@@ -624,7 +625,7 @@ ImgDrawResult nsCSSRendering::PaintBorder( + ComputedStyle* aStyle, PaintBorderFlags aFlags, Sides aSkipSides) { + AUTO_PROFILER_LABEL("nsCSSRendering::PaintBorder", GRAPHICS); + +- Maybe visitedBorder = GetBorderIfVisited(*aStyle); ++ Maybe visitedBorder = GetBorderIfVisited(*aStyle, aForFrame); + return PaintBorderWithStyleBorder( + aPresContext, aRenderingContext, aForFrame, aDirtyRect, aBorderArea, + visitedBorder.refOr(*aStyle->StyleBorder()), aStyle, aFlags, aSkipSides); +@@ -634,7 +635,7 @@ Maybe nsCSSRendering::CreateBorderRenderer( + nsPresContext* aPresContext, DrawTarget* aDrawTarget, nsIFrame* aForFrame, + const nsRect& aDirtyRect, const nsRect& aBorderArea, ComputedStyle* aStyle, + bool* aOutBorderIsEmpty, Sides aSkipSides) { +- Maybe visitedBorder = GetBorderIfVisited(*aStyle); ++ Maybe visitedBorder = GetBorderIfVisited(*aStyle, aForFrame); + return CreateBorderRendererWithStyleBorder( + aPresContext, aDrawTarget, aForFrame, aDirtyRect, aBorderArea, + visitedBorder.refOr(*aStyle->StyleBorder()), aStyle, aOutBorderIsEmpty, +@@ -649,7 +650,7 @@ ImgDrawResult nsCSSRendering::CreateWebRenderCommandsForBorder( + mozilla::layers::RenderRootStateManager* aManager, + nsDisplayListBuilder* aDisplayListBuilder) { + const auto* style = aForFrame->Style(); +- Maybe visitedBorder = GetBorderIfVisited(*style); ++ Maybe visitedBorder = GetBorderIfVisited(*style, aForFrame); + return nsCSSRendering::CreateWebRenderCommandsForBorderWithStyleBorder( + aItem, aForFrame, aBorderArea, aBuilder, aResources, aSc, aManager, + aDisplayListBuilder, visitedBorder.refOr(*style->StyleBorder())); +@@ -785,7 +786,7 @@ static nsCSSBorderRenderer ConstructBorderRenderer( + // pull out styles, colors + for (const auto i : mozilla::AllPhysicalSides()) { + borderStyles[i] = aStyleBorder.GetBorderStyle(i); +- borderColors[i] = aStyleBorder.BorderColorFor(i).CalcColor(*aStyle); ++ borderColors[i] = aStyleBorder.BorderColorFor(i).CalcColor(*aStyle, aForFrame); + } + + PrintAsFormatString( +@@ -1005,7 +1006,7 @@ nsCSSRendering::CreateBorderRendererForNonThemedOutline( + // This handles treating the initial color as 'currentColor'; if we + // ever want 'invert' back we'll need to do a bit of work here too. + nscolor outlineColor = +- aStyle->GetVisitedDependentColor(&nsStyleOutline::mOutlineColor); ++ aStyle->GetVisitedDependentColor(&nsStyleOutline::mOutlineColor, aForFrame); + nscolor outlineColors[4] = {outlineColor, outlineColor, outlineColor, + outlineColor}; + +@@ -2341,7 +2342,7 @@ static Maybe CalcScrollbarColor(nsIFrame* aFrame, + const auto& color = aKind == ScrollbarColorKind::Thumb + ? colors.AsColors().thumb + : colors.AsColors().track; +- return Some(color.CalcColor(*scrollbarStyle)); ++ return Some(color.CalcColor(*scrollbarStyle, aFrame)); + } + + static nscolor GetBackgroundColor(nsIFrame* aFrame, +@@ -2367,7 +2368,8 @@ static nscolor GetBackgroundColor(nsIFrame* aFrame, + default: + break; + } +- return aStyle->GetVisitedDependentColor(&nsStyleBackground::mBackgroundColor); ++ return aStyle->GetVisitedDependentColor(&nsStyleBackground::mBackgroundColor, ++ aFrame); + } + + nscolor nsCSSRendering::DetermineBackgroundColor(nsPresContext* aPresContext, diff --git a/src/layout/painting/nsDisplayList-cpp.patch b/src/layout/painting/nsDisplayList-cpp.patch deleted file mode 100644 index 716ccb545..000000000 --- a/src/layout/painting/nsDisplayList-cpp.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/layout/painting/nsDisplayList.cpp b/layout/painting/nsDisplayList.cpp -index 4488dc2025da64fbad0e0ec998793a476de640ef..82990853e7279723666635ab8d9a929ede3f3aca 100644 ---- a/layout/painting/nsDisplayList.cpp -+++ b/layout/painting/nsDisplayList.cpp -@@ -81,6 +81,7 @@ - #include "mozilla/layers/WebRenderLayerManager.h" - #include "mozilla/layers/WebRenderMessages.h" - #include "mozilla/layers/WebRenderScrollData.h" -+#include "mozilla/nsZenBoostsBackend.h" - #include "nsCSSProps.h" - #include "nsCSSRendering.h" - #include "nsCSSRenderingGradients.h" -@@ -1252,6 +1253,10 @@ void nsDisplayListBuilder::EnterPresShell(const nsIFrame* aReferenceFrame, - docShell->GetWindowDraggingAllowed(&mWindowDraggingAllowed); - } - -+ if (auto zenBackend = zen::nsZenBoostsBackend::GetInstance(); zenBackend && !mIsInChromePresContext) { -+ zenBackend->onPresShellEntered(pc->Document()); -+ } -+ - state->mTouchEventPrefEnabledDoc = dom::TouchEvent::PrefEnabled(docShell); - - if (auto* vt = pc->Document()->GetActiveViewTransition()) { diff --git a/src/layout/style/ComputedStyle-cpp.patch b/src/layout/style/ComputedStyle-cpp.patch new file mode 100644 index 000000000..6c403dde6 --- /dev/null +++ b/src/layout/style/ComputedStyle-cpp.patch @@ -0,0 +1,65 @@ +diff --git a/layout/style/ComputedStyle.cpp b/layout/style/ComputedStyle.cpp +index 18308d7891aab4ff0542e774190abeed6aad7c59..453da8ffa14ee5f31fbce873721779cbadce240d 100644 +--- a/layout/style/ComputedStyle.cpp ++++ b/layout/style/ComputedStyle.cpp +@@ -285,29 +285,32 @@ static nscolor GetVisitedDependentColorInternal(const ComputedStyle& aStyle, + } + + static nscolor ExtractColor(const ComputedStyle& aStyle, +- const StyleAbsoluteColor& aColor) { +- return aColor.ToColor(); ++ const StyleAbsoluteColor& aColor, ++ const nsIFrame* aFrame) { ++ return aColor.ToColor(aFrame); + } + + static nscolor ExtractColor(const ComputedStyle& aStyle, +- const StyleColor& aColor) { +- return aColor.CalcColor(aStyle); ++ const StyleColor& aColor, const nsIFrame* aFrame) { ++ return aColor.CalcColor(aStyle, aFrame); + } + + // Currently caret-color, the only property in the list which is a ColorOrAuto, + // always maps auto to currentcolor. + static nscolor ExtractColor(const ComputedStyle& aStyle, +- const StyleColorOrAuto& aColor) { ++ const StyleColorOrAuto& aColor, ++ const nsIFrame* aFrame) { + if (aColor.IsAuto()) { +- return ExtractColor(aStyle, StyleColor::CurrentColor()); ++ return ExtractColor(aStyle, StyleColor::CurrentColor(), aFrame); + } +- return ExtractColor(aStyle, aColor.AsColor()); ++ return ExtractColor(aStyle, aColor.AsColor(), aFrame); + } + + static nscolor ExtractColor(const ComputedStyle& aStyle, +- const StyleSVGPaint& aPaintServer) { ++ const StyleSVGPaint& aPaintServer, ++ const nsIFrame* aFrame) { + return aPaintServer.kind.IsColor() +- ? ExtractColor(aStyle, aPaintServer.kind.AsColor()) ++ ? ExtractColor(aStyle, aPaintServer.kind.AsColor(), aFrame) + : NS_RGBA(0, 0, 0, 0); + } + +@@ -315,14 +318,14 @@ static nscolor ExtractColor(const ComputedStyle& aStyle, + #define GENERATE_VISITED_COLOR_TEMPLATE(name_, fields_) \ + template <> \ + nscolor ComputedStyle::GetVisitedDependentColor( \ +- decltype(nsStyle##name_::MOZ_ARG_1 fields_) nsStyle##name_::* aField) \ +- const { \ ++ decltype(nsStyle##name_::MOZ_ARG_1 fields_) nsStyle##name_::* aField, \ ++ const nsIFrame* aFrame) const { \ + MOZ_ASSERT(MOZ_FOR_EACH(STYLE_FIELD, (nsStyle##name_, ), fields_) false, \ + "Getting visited-dependent color for a field in nsStyle" #name_ \ + " which is not listed in nsCSSVisitedDependentPropList.h"); \ + return GetVisitedDependentColorInternal( \ +- *this, [aField](const ComputedStyle& aStyle) { \ +- return ExtractColor(aStyle, aStyle.Style##name_()->*aField); \ ++ *this, [aField, aFrame](const ComputedStyle& aStyle) { \ ++ return ExtractColor(aStyle, aStyle.Style##name_()->*aField, aFrame); \ + }); \ + } + FOR_EACH_VISITED_DEPENDENT_STYLE_STRUCT(GENERATE_VISITED_COLOR_TEMPLATE) diff --git a/src/layout/style/ComputedStyle-h.patch b/src/layout/style/ComputedStyle-h.patch new file mode 100644 index 000000000..16345644c --- /dev/null +++ b/src/layout/style/ComputedStyle-h.patch @@ -0,0 +1,22 @@ +diff --git a/layout/style/ComputedStyle.h b/layout/style/ComputedStyle.h +index 661ec439dea1bc59dbc4507c9788df8821ea9086..7aa21f5388d6e3b5f1a85e38acdd646254ca8b01 100644 +--- a/layout/style/ComputedStyle.h ++++ b/layout/style/ComputedStyle.h +@@ -18,6 +18,7 @@ + + enum nsChangeHint : uint32_t; + class nsWindowSizes; ++class nsIFrame; + + #define FORWARD_STRUCT(name_) struct nsStyle##name_; + FOR_EACH_STYLE_STRUCT(FORWARD_STRUCT, FORWARD_STRUCT) +@@ -338,7 +339,8 @@ class ComputedStyle { + * been listed in nsCSSVisitedDependentPropList.h. + */ + template +- nscolor GetVisitedDependentColor(T S::* aField) const; ++ nscolor GetVisitedDependentColor(T S::* aField, ++ const nsIFrame* aFrame) const; + + /** + * aColors should be a two element array of nscolor in which the first diff --git a/src/layout/style/StyleColor-cpp.patch b/src/layout/style/StyleColor-cpp.patch index ef81c99dc..7f0e9423b 100644 --- a/src/layout/style/StyleColor-cpp.patch +++ b/src/layout/style/StyleColor-cpp.patch @@ -1,5 +1,5 @@ diff --git a/layout/style/StyleColor.cpp b/layout/style/StyleColor.cpp -index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..3b2118e224141f5151a31ac663dfbe17864ef182 100644 +index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..234a5fc3d94c341d6f8aea8f619661054d2f6a49 100644 --- a/layout/style/StyleColor.cpp +++ b/layout/style/StyleColor.cpp @@ -8,6 +8,7 @@ @@ -10,7 +10,34 @@ index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..3b2118e224141f5151a31ac663dfbe17 namespace mozilla { -@@ -68,10 +69,11 @@ nscolor StyleAbsoluteColor::ToColor() const { +@@ -44,13 +45,14 @@ nscolor StyleColor::CalcColor( + } + + template <> +-nscolor StyleColor::CalcColor(const ComputedStyle& aStyle) const { +- return ResolveColor(aStyle.StyleText()->mColor).ToColor(); ++nscolor StyleColor::CalcColor(const ComputedStyle& aStyle, ++ const nsIFrame* aFrame) const { ++ return ResolveColor(aStyle.StyleText()->mColor).ToColor(aFrame); + } + + template <> + nscolor StyleColor::CalcColor(const nsIFrame* aFrame) const { +- return ResolveColor(aFrame->StyleText()->mColor).ToColor(); ++ return ResolveColor(aFrame->StyleText()->mColor).ToColor(aFrame); + } + + StyleAbsoluteColor StyleAbsoluteColor::ToColorSpace( +@@ -58,7 +60,7 @@ StyleAbsoluteColor StyleAbsoluteColor::ToColorSpace( + return Servo_ConvertColorSpace(this, aColorSpace); + } + +-nscolor StyleAbsoluteColor::ToColor() const { ++nscolor StyleAbsoluteColor::ToColor(const nsIFrame* aFrame) const { + auto srgb = ToColorSpace(StyleColorSpace::Srgb); + + // TODO(tlouw): Needs gamut mapping here. Right now we just hard clip the +@@ -68,10 +70,12 @@ nscolor StyleAbsoluteColor::ToColor() const { auto green = std::clamp(srgb.components._1, 0.0f, 1.0f); auto blue = std::clamp(srgb.components._2, 0.0f, 1.0f); @@ -20,7 +47,8 @@ index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..3b2118e224141f5151a31ac663dfbe17 nsStyleUtil::FloatToColorComponent(green), nsStyleUtil::FloatToColorComponent(blue), - nsStyleUtil::FloatToColorComponent(srgb.alpha)); -+ nsStyleUtil::FloatToColorComponent(srgb.alpha))); ++ nsStyleUtil::FloatToColorComponent(srgb.alpha)), ++ aFrame); } } // namespace mozilla diff --git a/src/layout/style/StyleColorInlines-h.patch b/src/layout/style/StyleColorInlines-h.patch new file mode 100644 index 000000000..839901a46 --- /dev/null +++ b/src/layout/style/StyleColorInlines-h.patch @@ -0,0 +1,13 @@ +diff --git a/layout/style/StyleColorInlines.h b/layout/style/StyleColorInlines.h +index 332f715ca2a11c98afcb80a870da98c038a7e4f0..a5bddde67165fcb40d40b3aec76a9d19d8880d64 100644 +--- a/layout/style/StyleColorInlines.h ++++ b/layout/style/StyleColorInlines.h +@@ -66,7 +66,7 @@ template <> + nscolor StyleColor::CalcColor(nscolor) const; + + template <> +-nscolor StyleColor::CalcColor(const ComputedStyle&) const; ++nscolor StyleColor::CalcColor(const ComputedStyle&, const nsIFrame*) const; + + template <> + nscolor StyleColor::CalcColor(const nsIFrame*) const; diff --git a/src/layout/svg/FilterInstance-cpp.patch b/src/layout/svg/FilterInstance-cpp.patch new file mode 100644 index 000000000..3ff53172b --- /dev/null +++ b/src/layout/svg/FilterInstance-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/svg/FilterInstance.cpp b/layout/svg/FilterInstance.cpp +index 499f824aaeed6ac014974ff11848cf40ac0bba09..bec724baf0ae97cd9dea59a1609d8ea9baaad715 100644 +--- a/layout/svg/FilterInstance.cpp ++++ b/layout/svg/FilterInstance.cpp +@@ -1681,7 +1681,7 @@ nsresult FilterInstance::BuildPrimitivesForFilter( + // If we don't have a frame, use opaque black for shadows with unspecified + // shadow colors. + nscolor shadowFallbackColor = +- mTargetFrame ? mTargetFrame->StyleText()->mColor.ToColor() ++ mTargetFrame ? mTargetFrame->StyleText()->mColor.ToColor(mTargetFrame) + : NS_RGB(0, 0, 0); + + CSSFilterInstance cssFilterInstance(aFilter, shadowFallbackColor, diff --git a/src/layout/svg/SVGTextFrame-cpp.patch b/src/layout/svg/SVGTextFrame-cpp.patch new file mode 100644 index 000000000..33e45c798 --- /dev/null +++ b/src/layout/svg/SVGTextFrame-cpp.patch @@ -0,0 +1,28 @@ +diff --git a/layout/svg/SVGTextFrame.cpp b/layout/svg/SVGTextFrame.cpp +index 93f6f2a704734314586fa16b6a45b434f9c2304d..4503ee2b48be39bb2e61962316ef43ad292a7b27 100644 +--- a/layout/svg/SVGTextFrame.cpp ++++ b/layout/svg/SVGTextFrame.cpp +@@ -2662,9 +2662,9 @@ void SVGTextDrawPathCallbacks::ApplyOpacity( + sRGBColor& aColor, const StyleSVGPaint& aPaint, + const StyleSVGOpacity& aOpacity) const { + if (aPaint.kind.tag == StyleSVGPaintKind::Tag::Color) { +- aColor.a *= +- sRGBColor::FromABGR(aPaint.kind.AsColor().CalcColor(*mFrame->Style())) +- .a; ++ aColor.a *= sRGBColor::FromABGR( ++ aPaint.kind.AsColor().CalcColor(*mFrame->Style(), mFrame)) ++ .a; + } + aColor.a *= SVGUtils::GetOpacity(aOpacity, mContextPaint); + } +@@ -5076,8 +5076,8 @@ bool SVGTextFrame::ShouldRenderAsPath(nsTextFrame* aFrame, + // It's possible nsTextFrame will support non-opaque shadows in the future, + // in which case this test can be removed. + if (style->mFill.kind.IsColor() && aFrame->StyleText()->HasTextShadow() && +- NS_GET_A(style->mFill.kind.AsColor().CalcColor(*aFrame->Style())) != +- 0xFF) { ++ NS_GET_A(style->mFill.kind.AsColor().CalcColor(*aFrame->Style(), ++ aFrame)) != 0xFF) { + return true; + } + diff --git a/src/layout/tables/nsTableFrame-cpp.patch b/src/layout/tables/nsTableFrame-cpp.patch new file mode 100644 index 000000000..7c480c702 --- /dev/null +++ b/src/layout/tables/nsTableFrame-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/tables/nsTableFrame.cpp b/layout/tables/nsTableFrame.cpp +index 7c39ea94392dc158656621dfbee1be72bbcd46f8..e2fe47662b92ac6fb7fe2177d1d2cdab500bb969 100644 +--- a/layout/tables/nsTableFrame.cpp ++++ b/layout/tables/nsTableFrame.cpp +@@ -4088,7 +4088,7 @@ static void GetColorAndStyle(const nsIFrame* aFrame, WritingMode aTableWM, + return; + } + *aColor = aFrame->Style()->GetVisitedDependentColor( +- nsStyleBorder::BorderColorFieldFor(physicalSide)); ++ nsStyleBorder::BorderColorFieldFor(physicalSide), aFrame); + + if (aWidth) { + *aWidth = styleData->GetComputedBorderWidth(physicalSide); diff --git a/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch b/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch new file mode 100644 index 000000000..30fc951a7 --- /dev/null +++ b/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch @@ -0,0 +1,23 @@ +diff --git a/layout/xul/tree/nsTreeBodyFrame.cpp b/layout/xul/tree/nsTreeBodyFrame.cpp +index b6aa10336e7994c830e0326298820c3a534f8094..b3ddb7b9b3ceb8b868e7e48e02fdb70a876c9019 100644 +--- a/layout/xul/tree/nsTreeBodyFrame.cpp ++++ b/layout/xul/tree/nsTreeBodyFrame.cpp +@@ -2865,7 +2865,8 @@ ImgDrawResult nsTreeBodyFrame::PaintCell( + + const nsStyleBorder* borderStyle = lineContext->StyleBorder(); + // Resolve currentcolor values against the treeline context +- nscolor color = borderStyle->mBorderLeftColor.CalcColor(*lineContext); ++ nscolor color = ++ borderStyle->mBorderLeftColor.CalcColor(*lineContext, this); + ColorPattern colorPatt(ToDeviceColor(color)); + + StyleBorderStyle style = borderStyle->GetBorderStyle(eSideLeft); +@@ -3340,7 +3341,7 @@ ImgDrawResult nsTreeBodyFrame::PaintText( + } + + aRenderingContext.SetColor( +- sRGBColor::FromABGR(textContext->StyleText()->mColor.ToColor())); ++ sRGBColor::FromABGR(textContext->StyleText()->mColor.ToColor(this))); + nsLayoutUtils::DrawString( + this, *fontMet, &aRenderingContext, text.get(), text.Length(), + textRect.TopLeft() + nsPoint(0, baseline), cellContext); diff --git a/src/servo/ports/geckolib/cbindgen-toml.patch b/src/servo/ports/geckolib/cbindgen-toml.patch new file mode 100644 index 000000000..0bf358476 --- /dev/null +++ b/src/servo/ports/geckolib/cbindgen-toml.patch @@ -0,0 +1,30 @@ +diff --git a/servo/ports/geckolib/cbindgen.toml b/servo/ports/geckolib/cbindgen.toml +index e9ae0149e80a241b2a32ce445deb923af2fac445..464f4e8b853d26bd2da327de8bf8bb50e5ab8599 100644 +--- a/servo/ports/geckolib/cbindgen.toml ++++ b/servo/ports/geckolib/cbindgen.toml +@@ -679,9 +679,9 @@ renaming_overrides_prefixing = true + nscolor CalcColor(const nsIFrame*) const; + /** + * Compute the final color, taking into account the foreground color from the +- * style. ++ * style. The frame, when supplied, is used to resolve Zen boosts. + */ +- nscolor CalcColor(const ComputedStyle&) const; ++ nscolor CalcColor(const ComputedStyle&, const nsIFrame* = nullptr) const; + /** + * Compute the final color, making the argument the foreground color. + */ +@@ -704,9 +704,11 @@ renaming_overrides_prefixing = true + + /** + * Convert this color to an nscolor. The color will be converted to sRGB first +- * if required. ++ * if required. The frame, when supplied, is used to resolve Zen boosts; pass ++ * the frame the color is being resolved for so boosts can be derived from its ++ * document, or null to skip boost resolution. + */ +- nscolor ToColor() const; ++ nscolor ToColor(const nsIFrame* = nullptr) const; + """ + + "OwnedSlice" = """ diff --git a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs index 637d81909..597a74c09 100644 --- a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs +++ b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs @@ -70,6 +70,17 @@ export class ZenBoostsChild extends JSWindowActorChild { static PREVENTABLE_SET = new Set(ZenBoostsChild.PREVENTABLE_EVENTS); + actorCreated() { + this.#applyBoostForPageIfAvailable(); + } + + didDestroy() { + if (this.#currentState === ZenBoostsChild.STATES.ZAP) { + this.disableZapMode(); + } + this.#removeEventListeners(); + } + /** * Inverse of https://searchfox.org/firefox-main/rev/1a8c62b86277005f907151bc5389cf5c5091e76f/gfx/src/nsColor.h#23-27 * @@ -179,28 +190,6 @@ export class ZenBoostsChild extends JSWindowActorChild { return [h * 60, s, l]; } - /** - * Handles DOM events for the actor. Applies boost settings when a document - * element is inserted. - * - * @param {Event} event - The DOM event to handle. - */ - handleEvent(event) { - switch (event.type) { - case "unload": - if (this.#currentState === ZenBoostsChild.STATES.ZAP) { - this.disableZapMode(); - } - this.#removeEventListeners(); - break; - case "DOMWindowCreated": - this.#applyBoostForPageIfAvailable(); - break; - default: - break; - } - } - handleZapEvent(event) { if (ZenBoostsChild.ALL_EVENTS_SET.has(event.type)) { this.#overlay.handleEvent( diff --git a/src/zen/boosts/nsZenBCOverrides.cpp b/src/zen/boosts/nsZenBCOverrides.cpp index 306d35bf7..cafe19c5a 100644 --- a/src/zen/boosts/nsZenBCOverrides.cpp +++ b/src/zen/boosts/nsZenBCOverrides.cpp @@ -38,18 +38,6 @@ void BrowsingContext::WalkPresContexts(Callback&& aCallback) { }); } -static void RefreshBoostCacheIfMatchesCurrent(BrowsingContext* aChanged) { - auto* backend = zen::nsZenBoostsBackend::GetInstance(); - if (!backend) { - return; - } - RefPtr current = backend->GetCurrentBrowsingContext(); - if (!current || current->Top() != aChanged) { - return; - } - backend->RefreshCachedBoostState(); -} - /** * @brief Called when the ZenBoostsData field is set on a browsing context. * Triggers a restyle if the boost data has changed. @@ -61,7 +49,6 @@ void BrowsingContext::DidSet(FieldIndex, if (ZenBoostsData() == aOldValue) { return; } - RefreshBoostCacheIfMatchesCurrent(this); PresContextAffectingFieldChanged(); TRIGGER_PRES_CONTEXT_RESTYLE(); } @@ -79,7 +66,6 @@ void BrowsingContext::DidSet(FieldIndex, if (ZenBoostsComplementaryRotation() == aOldValue) { return; } - RefreshBoostCacheIfMatchesCurrent(this); PresContextAffectingFieldChanged(); TRIGGER_PRES_CONTEXT_RESTYLE(); } @@ -95,7 +81,6 @@ void BrowsingContext::DidSet(FieldIndex, if (IsZenBoostsInverted() == aOldValue) { return; } - RefreshBoostCacheIfMatchesCurrent(this); PresContextAffectingFieldChanged(); TRIGGER_PRES_CONTEXT_RESTYLE(); } diff --git a/src/zen/boosts/nsZenBoostsBackend.cpp b/src/zen/boosts/nsZenBoostsBackend.cpp index b94e2890f..3c12f3e15 100644 --- a/src/zen/boosts/nsZenBoostsBackend.cpp +++ b/src/zen/boosts/nsZenBoostsBackend.cpp @@ -12,6 +12,8 @@ #include "nsIXULRuntime.h" #include "nsPresContext.h" +#include "nsIFrame.h" +#include "nsIContent.h" #include "mozilla/ClearOnShutdown.h" #include "mozilla/StaticPtr.h" @@ -31,9 +33,6 @@ #define INVERT_CHANNEL_FLOOR() \ (mozilla::StaticPrefs::zen_boosts_invert_channel_floor_AtStartup()) -#define SHOULD_APPLY_BOOSTS_TO_ANONYMOUS_CONTENT() \ - (!mozilla::StaticPrefs::zen_boosts_disable_on_anonymous_content_AtStartup()) - #if defined(__clang__) || defined(__GNUC__) # define ZEN_HOT_FUNCTION __attribute__((hot)) #else @@ -381,27 +380,36 @@ inline static nscolor zenInvertColorChannel(nscolor aColor) { } /** - * @brief Retrieves the current boost data from the browsing context. When - * called without aPresContext, reads the precomputed cache populated on - * presshell entry; otherwise resolves from the supplied PresContext. + * @brief Whether the given frame belongs to anonymous content that boosts must + * not touch (devtools highlighters, screenshots, the boosts overlays + * themselves, and other native-anonymous UI such as scrollbars). A null frame + * gives no document to anchor the boost on, so it is treated the same way. */ ZEN_HOT_FUNCTION -inline static void GetZenBoostsDataFromBrowsingContext( - ZenBoostData* aData, float* aComplementaryRotation, bool* aIsInverted, - nsPresContext* aPresContext = nullptr) { - auto zenBoosts = nsZenBoostsBackend::GetInstance(); - if (!zenBoosts || (zenBoosts->mCurrentFrameIsAnonymousContent && - !SHOULD_APPLY_BOOSTS_TO_ANONYMOUS_CONTENT())) { +inline static bool IsBoostExemptFrame(const nsIFrame* aFrame) { + if (!aFrame) { + return true; + } + const nsIContent* content = aFrame->GetContent(); + return content && content->IsInNativeAnonymousSubtree(); +} + +/** + * @brief Retrieves the boost data for the document the given frame belongs to. + * Resolves from the frame's PresContext -> Document -> top BrowsingContext, + * which carries the accent/inversion fields. + */ +ZEN_HOT_FUNCTION +inline static void GetZenBoostsDataForFrame(const nsIFrame* aFrame, + ZenBoostData* aData, + float* aComplementaryRotation, + bool* aIsInverted) { + nsPresContext* presContext = aFrame->PresContext(); + if (!presContext) { return; } - if (!aPresContext) { - *aData = zenBoosts->mCachedCurrentAccent; - *aComplementaryRotation = zenBoosts->mCachedCurrentComplementaryRotation; - *aIsInverted = zenBoosts->mCachedCurrentInverted; - return; - } - mozilla::dom::BrowsingContext* browsingContext = nullptr; - if (auto document = aPresContext->Document()) { + const mozilla::dom::BrowsingContext* browsingContext = nullptr; + if (auto document = presContext->Document()) { browsingContext = document->GetBrowsingContext(); } if (!browsingContext) { @@ -456,59 +464,24 @@ auto nsZenBoostsBackend::GetInstance() -> nsZenBoostsBackend* { return sZenBoostsBackend.get(); } -auto nsZenBoostsBackend::onPresShellEntered(mozilla::dom::Document* aDocument) - -> void { - if (auto displayDoc = aDocument->GetDisplayDocument()) { - onPresShellEntered(displayDoc); - return; - } - // Note that aDocument can be null when entering anonymous content frames. - // We explicitly do this to prevent applying boosts to anonymous content, such - // as devtools or screenshots. - mozilla::dom::BrowsingContext* browsingContext = - aDocument ? aDocument->GetBrowsingContext() : nullptr; - if (!browsingContext) { - return; - } - mCurrentBrowsingContextId = browsingContext->Id(); - RefreshCachedBoostState(); -} - -already_AddRefed -nsZenBoostsBackend::GetCurrentBrowsingContext() const { - return mozilla::dom::BrowsingContext::Get(mCurrentBrowsingContextId); -} - -auto nsZenBoostsBackend::RefreshCachedBoostState() -> void { - RefPtr current = - mozilla::dom::BrowsingContext::Get(mCurrentBrowsingContextId); - if (!current) { - mCachedCurrentAccent = 0; - mCachedCurrentComplementaryRotation = 0.0f; - mCachedCurrentInverted = false; - return; - } - auto top = current->Top(); - mCachedCurrentAccent = top->ZenBoostsData(); - mCachedCurrentComplementaryRotation = top->ZenBoostsComplementaryRotation(); - mCachedCurrentInverted = top->IsZenBoostsInverted(); -} - -[[nodiscard]] ZEN_HOT_FUNCTION auto -nsZenBoostsBackend::FilterColorFromPresContext(nscolor aColor, - nsPresContext* aPresContext) - -> nscolor { +[[nodiscard]] ZEN_HOT_FUNCTION auto nsZenBoostsBackend::ResolveStyleColor( + nscolor aColor, const nsIFrame* aFrame) -> nscolor { if (NS_GET_A(aColor) == 0) { // Skip processing fully transparent colors since they won't be visible and // we want to avoid unnecessary computations. This also prevents issues with // using the alpha channel for contrast information in the accent color. return aColor; } + // Boosts are only supported in content; GetInstance() is null in the parent + // process, which keeps the browser chrome from being tinted. + if (!GetInstance() || IsBoostExemptFrame(aFrame)) { + return aColor; + } ZenBoostData accentNS = 0; float complementaryRotation = 0.0f; bool invertColors = false; - GetZenBoostsDataFromBrowsingContext(&accentNS, &complementaryRotation, - &invertColors, aPresContext); + GetZenBoostsDataForFrame(aFrame, &accentNS, &complementaryRotation, + &invertColors); if (accentNS) { // Resolve (and cache) the base + complementary accent for this accent and // complementary rotation. Apply a filter-like tint: @@ -526,9 +499,4 @@ nsZenBoostsBackend::FilterColorFromPresContext(nscolor aColor, return aColor; } -[[nodiscard]] ZEN_HOT_FUNCTION auto nsZenBoostsBackend::ResolveStyleColor( - nscolor aColor) -> nscolor { - return FilterColorFromPresContext(aColor); -} - } // namespace zen diff --git a/src/zen/boosts/nsZenBoostsBackend.h b/src/zen/boosts/nsZenBoostsBackend.h index 81ca1d95b..1d2073372 100644 --- a/src/zen/boosts/nsZenBoostsBackend.h +++ b/src/zen/boosts/nsZenBoostsBackend.h @@ -9,10 +9,7 @@ #include "nsISupportsImpl.h" #include "nsPresContext.h" -#include "mozilla/RefPtr.h" -#include "mozilla/AlreadyAddRefed.h" - -#include +class nsIFrame; namespace mozilla::dom { class BrowsingContext; @@ -49,80 +46,29 @@ class nsZenBoostsBackend final : public nsISupports { explicit nsZenBoostsBackend() = default; - /** - * Indicates whether the current frame being rendered is for anonymous - * content. - */ - bool mCurrentFrameIsAnonymousContent = false; - /** * @brief Resolve a color to take into account Zen boosts. This is the single * place style colors are filtered; it is reached for every style color via * StyleAbsoluteColor::ToColor. Do not add a second StyleColor::ResolveColor * filter on top of this or colors get filtered multiple times (which also * makes resting colors disagree with composited transition endpoints). + * + * The boost state is derived from the frame the color is being resolved for: + * its document's top BrowsingContext carries the accent/inversion data. When + * @p aFrame is null, or belongs to anonymous content (devtools, screenshots, + * the boosts overlays themselves), the color is returned unfiltered. * @param aColor The color to resolve. + * @param aFrame The frame the color is being resolved for, or null. * @return The resolved color with Zen boost filters applied, or the original * color if no boost is active. * @see StyleAbsoluteColor::ToColor for reference. */ - static auto ResolveStyleColor(nscolor aColor) -> nscolor; - - /** - * @brief Filter a color based on the current Zen boost settings. - * @param aColor The color to filter. - * @param aPresContext The presentation context to use for filtering. - * @return The filtered color. - */ - static auto FilterColorFromPresContext(nscolor aColor, - nsPresContext* aPresContext = nullptr) + static auto ResolveStyleColor(nscolor aColor, const nsIFrame* aFrame) -> nscolor; - /** - * @brief Called when a presshell is entered during rendering. - * @param aDocument The document associated with the presshell being entered. - */ - auto onPresShellEntered(mozilla::dom::Document* aDocument) -> void; - - /** - * @brief Refresh the cached boost state from the current top BrowsingContext. - * Called from onPresShellEntered and from BrowsingContext::DidSet hooks when - * the underlying boost fields change. - */ - auto RefreshCachedBoostState() -> void; - - /** - * Resolves the current top BrowsingContext from its stored id. May return - * null if it has since been discarded. Not on the per-color hot path; the - * hot path uses the mCachedCurrent* fields instead. - */ - [[nodiscard]] already_AddRefed - GetCurrentBrowsingContext() const; - - /** - * Cached boost data for the current top BrowsingContext, refreshed on - * presshell entry and on DidSet hooks. Read by the per-color hot path so - * that boost-off pages don't pay for a BrowsingContext walk on every color - * resolve. - */ - ZenBoostData mCachedCurrentAccent = 0; - // Hue rotation in degrees applied to the base accent to derive the - // complementary accent. Zero means the complementary accent equals the base - // accent (the duotone collapses to a single-accent tint). - float mCachedCurrentComplementaryRotation = 0.0f; - bool mCachedCurrentInverted = false; - private: ~nsZenBoostsBackend() = default; - /** - * Id of the top BrowsingContext of the current document being rendered. - * Stored as an id rather than a strong RefPtr so the process-wide singleton - * does not keep a navigated-away BrowsingContext (and its subtree) alive - * until the next presshell entry. - */ - uint64_t mCurrentBrowsingContextId = 0; - public: /** * @brief Get the singleton instance of the ZenBoostsBackend. diff --git a/src/zen/common/sys/ZenActorsManager.sys.mjs b/src/zen/common/sys/ZenActorsManager.sys.mjs index 766193ad3..759167674 100644 --- a/src/zen/common/sys/ZenActorsManager.sys.mjs +++ b/src/zen/common/sys/ZenActorsManager.sys.mjs @@ -67,8 +67,9 @@ if (!Services.appinfo.inSafeMode) { child: { esModuleURI: "resource:///actors/ZenBoostsChild.sys.mjs", events: { + // Needed to let the actor be created, please don't remove + // without checking if boosts still work without it, thanks <3 DOMWindowCreated: {}, - unload: {}, }, }, allFrames: true, From 6f41ffe02d83ccdfd3b4da72ee638141c1e4c8a1 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Mon, 25 May 2026 21:28:52 +0200 Subject: [PATCH 21/31] gh-13853: Fixed sidebar flickering on private windows (gh-13855) --- prefs/firefox/browser.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/prefs/firefox/browser.yaml b/prefs/firefox/browser.yaml index 23db6a4e4..341577cac 100644 --- a/prefs/firefox/browser.yaml +++ b/prefs/firefox/browser.yaml @@ -87,6 +87,10 @@ value: false locked: true +# See gh-13853 for details on why we should disable this preference +- name: browser.privatebrowsing.resetPBM.enabled + value: false + # See gh-12985 for details on the following preferences - name: browser.search.widget.new value: true From 346219c3b4877cc325c65e8934d8ed7c498498f1 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Mon, 25 May 2026 21:47:27 +0200 Subject: [PATCH 22/31] gh-13851: Fixed pressing `u` duplicating tabs (gh-13856) --- .../browser/preferences/zen-preferences.ftl | 3 ++- .../components/preferences/zen-settings.js | 2 ++ src/zen/kbs/ZenKeyboardShortcuts.mjs | 19 +++++++++++++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/locales/en-US/browser/browser/preferences/zen-preferences.ftl b/locales/en-US/browser/browser/preferences/zen-preferences.ftl index 6ec2bcf30..b403bad5a 100644 --- a/locales/en-US/browser/browser/preferences/zen-preferences.ftl +++ b/locales/en-US/browser/browser/preferences/zen-preferences.ftl @@ -358,4 +358,5 @@ zen-devtools-toggle-dom-shortcut = Toggle DOM zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Blank Window -zen-duplicate-tab-shortcut = Duplicate Tab \ No newline at end of file +zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/src/browser/components/preferences/zen-settings.js b/src/browser/components/preferences/zen-settings.js index 052f0217c..2d6bef1a8 100644 --- a/src/browser/components/preferences/zen-settings.js +++ b/src/browser/components/preferences/zen-settings.js @@ -793,6 +793,7 @@ const zenMissingKeyboardShortcutL10n = { key_selectTab7: "zen-key-select-tab-7", key_selectTab8: "zen-key-select-tab-8", key_selectLastTab: "zen-key-select-tab-last", + key_duplicateTab: "customkeys-file-duplicate-tab", key_showAllTabs: "zen-key-show-all-tabs", key_gotoHistory: "zen-key-goto-history", @@ -801,6 +802,7 @@ const zenMissingKeyboardShortcutL10n = { key_redo: "zen-key-redo", key_inspectorMac: "zen-key-inspector-mac", + key_findSelection: "zen-key-find-selection", // Devtools key_toggleToolbox: "zen-devtools-toggle-shortcut", diff --git a/src/zen/kbs/ZenKeyboardShortcuts.mjs b/src/zen/kbs/ZenKeyboardShortcuts.mjs index 8073afd22..b13ec6447 100644 --- a/src/zen/kbs/ZenKeyboardShortcuts.mjs +++ b/src/zen/kbs/ZenKeyboardShortcuts.mjs @@ -433,11 +433,14 @@ class KeyShortcut { if (this.#keycode) { key.setAttribute("keycode", this.#keycode); key.removeAttribute("key"); - } else { + } else if (this.#key) { // note to "mr. macos": Better use setAttribute, because without it, there's a // risk of malforming the XUL element. key.setAttribute("key", this.#key); key.removeAttribute("keycode"); + } else { + key.removeAttribute("key"); + key.removeAttribute("keycode"); } key.setAttribute("group", this.#group); @@ -845,7 +848,7 @@ class nsZenKeyboardShortcutsLoader { } class nsZenKeyboardShortcutsVersioner { - static LATEST_KBS_VERSION = 18; + static LATEST_KBS_VERSION = 19; constructor() {} @@ -1241,6 +1244,18 @@ class nsZenKeyboardShortcutsVersioner { ); } + if (version < 19) { + // Migrate from version 18 to 19. + // Disable "key_duplicateTab" since we already had "cmd_zenDuplicateTab" before Firefox 151. + for (let shortcut of data) { + if (shortcut.getID() == "key_duplicateTab") { + shortcut.shouldBeEmpty = true; + shortcut.setDisabled(true); + break; + } + } + } + return data; } } From b94dd3b927b0419c47eb3b41a92dfc8a0b28ce19 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Tue, 26 May 2026 12:00:14 +0200 Subject: [PATCH 23/31] gh-13868: Fixed tabs getting clipped when collapsing folders (gh-13869) --- src/zen/folders/ZenFolders.mjs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/zen/folders/ZenFolders.mjs b/src/zen/folders/ZenFolders.mjs index bce1923a4..3267d579f 100644 --- a/src/zen/folders/ZenFolders.mjs +++ b/src/zen/folders/ZenFolders.mjs @@ -1566,7 +1566,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const tabsContainer = group.groupContainer; tabsContainer.removeAttribute("hidden"); - tabsContainer.style.overflow = "hidden"; + tabsContainer.style.overflowY = "hidden"; const groupStart = group.groupStartElement; const itemsToShow = this.#normalizeGroupItems(group.childGroupsAndTabs); @@ -1615,7 +1615,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } const afterMarginTop = () => { - tabsContainer.style.overflow = ""; + tabsContainer.style.overflowY = ""; if (group.hasAttribute("has-active")) { const activeTabs = group.activeTabs; const folders = new Map(); @@ -1859,14 +1859,14 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const tabsContainer = currentGroup.groupContainer; const groupStart = currentGroup.groupStartElement; - tabsContainer.style.overflow = "clip"; + tabsContainer.style.overflowY = "clip"; if (tabsContainer.hasAttribute("hidden")) { tabsContainer.removeAttribute("hidden"); } const afterMarginTop = () => { - tabsContainer.style.overflow = ""; + tabsContainer.style.overflowY = ""; }; animations.push( @@ -1972,7 +1972,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const heightContainer = expand ? 0 : this.#calculateHeightShift(tabsContainer, []); - tabsContainer.style.overflow = "clip"; + tabsContainer.style.overflowY = "clip"; this.#createAnimation( groupStart, From e82012ff1c5bab351afecea714ca1f3aa4fb336b Mon Sep 17 00:00:00 2001 From: Ashvin Jangid <142579833+ashvwinn@users.noreply.github.com> Date: Wed, 27 May 2026 01:22:37 +0530 Subject: [PATCH 24/31] gh-13879: fix sidebar UI breaking on cancelling space creation (gh-13880) --- src/zen/spaces/ZenSpaceCreation.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zen/spaces/ZenSpaceCreation.mjs b/src/zen/spaces/ZenSpaceCreation.mjs index 5792d2120..330ca9e02 100644 --- a/src/zen/spaces/ZenSpaceCreation.mjs +++ b/src/zen/spaces/ZenSpaceCreation.mjs @@ -261,6 +261,7 @@ class nsZenWorkspaceCreation extends MozXULElement { } async onCancelButtonCommand() { + document.documentElement.removeAttribute("zen-creating-workspace"); await gZenWorkspaces.changeWorkspaceWithID(this.previousWorkspaceId); } From 7f08cf437abbacaf7b381af64c5ea6ffd8c503b6 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Tue, 26 May 2026 22:27:54 +0200 Subject: [PATCH 25/31] gh-13844: Part 2 - Fixed boosts not working for linear gradients (gh-13882) Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com> --- src/accessible/base/TextAttrs-cpp.patch | 18 +++++ .../ia2/ia2AccessibleComponent-cpp.patch | 13 ++++ .../canvas/CanvasRenderingContext2D-cpp.patch | 14 ++++ src/dom/html/HTMLInputElement-cpp.patch | 13 ++++ .../libeditor/HTMLAbsPositionEditor-cpp.patch | 13 ++++ src/gfx/thebes/gfxUtils-cpp.patch | 16 ++++ src/gfx/thebes/gfxUtils-h.patch | 23 ++++++ .../painting/nsCSSRenderingBorders-cpp.patch | 14 ++++ .../nsCSSRenderingGradients-cpp.patch | 78 +++++++++++++++++++ .../painting/nsCSSRenderingGradients-h.patch | 59 ++++++++++++++ src/layout/painting/nsImageRenderer-cpp.patch | 40 ++++++++++ src/layout/style/GeckoBindings-cpp.patch | 13 ++++ src/layout/style/StyleColor-cpp.patch | 16 +++- src/layout/style/nsStyleStruct-cpp.patch | 13 ++++ src/layout/svg/SVGContextPaint-cpp.patch | 13 ++++ src/layout/svg/SVGGradientFrame-cpp.patch | 42 ++++++++++ src/layout/svg/SVGImageContext-cpp.patch | 21 +++++ src/layout/svg/SVGUtils-cpp.patch | 60 ++++++++++++++ src/layout/svg/SVGUtils-h.patch | 13 ++++ src/layout/xul/tree/nsTreeBodyFrame-cpp.patch | 11 ++- src/servo/ports/geckolib/cbindgen-toml.patch | 6 +- src/widget/ScrollbarDrawing-cpp.patch | 23 ++++++ src/widget/ScrollbarDrawingCocoa-cpp.patch | 15 ++++ src/widget/ScrollbarDrawingWin11-cpp.patch | 22 ++++++ src/widget/ThemeColors-cpp.patch | 13 ++++ src/zen/boosts/nsZenBoostsBackend.cpp | 23 +++++- src/zen/common/styles/zen-popup.css | 19 +---- 27 files changed, 599 insertions(+), 25 deletions(-) create mode 100644 src/accessible/base/TextAttrs-cpp.patch create mode 100644 src/accessible/windows/ia2/ia2AccessibleComponent-cpp.patch create mode 100644 src/dom/canvas/CanvasRenderingContext2D-cpp.patch create mode 100644 src/dom/html/HTMLInputElement-cpp.patch create mode 100644 src/editor/libeditor/HTMLAbsPositionEditor-cpp.patch create mode 100644 src/gfx/thebes/gfxUtils-cpp.patch create mode 100644 src/gfx/thebes/gfxUtils-h.patch create mode 100644 src/layout/painting/nsCSSRenderingBorders-cpp.patch create mode 100644 src/layout/painting/nsCSSRenderingGradients-cpp.patch create mode 100644 src/layout/painting/nsCSSRenderingGradients-h.patch create mode 100644 src/layout/painting/nsImageRenderer-cpp.patch create mode 100644 src/layout/style/GeckoBindings-cpp.patch create mode 100644 src/layout/style/nsStyleStruct-cpp.patch create mode 100644 src/layout/svg/SVGContextPaint-cpp.patch create mode 100644 src/layout/svg/SVGGradientFrame-cpp.patch create mode 100644 src/layout/svg/SVGImageContext-cpp.patch create mode 100644 src/layout/svg/SVGUtils-cpp.patch create mode 100644 src/layout/svg/SVGUtils-h.patch create mode 100644 src/widget/ScrollbarDrawing-cpp.patch create mode 100644 src/widget/ScrollbarDrawingCocoa-cpp.patch create mode 100644 src/widget/ScrollbarDrawingWin11-cpp.patch create mode 100644 src/widget/ThemeColors-cpp.patch diff --git a/src/accessible/base/TextAttrs-cpp.patch b/src/accessible/base/TextAttrs-cpp.patch new file mode 100644 index 000000000..b88ca20d4 --- /dev/null +++ b/src/accessible/base/TextAttrs-cpp.patch @@ -0,0 +1,18 @@ +diff --git a/accessible/base/TextAttrs.cpp b/accessible/base/TextAttrs.cpp +index d2ce06bef67ecb6d6ccb798a62d7f2759dd9da18..fb4952df9aa54d4085a282dc269a48ad72979b8b 100644 +--- a/accessible/base/TextAttrs.cpp ++++ b/accessible/base/TextAttrs.cpp +@@ -237,11 +237,11 @@ bool TextAttrsMgr::BGColorTextAttr::GetColor(nsIFrame* aFrame, + TextAttrsMgr::ColorTextAttr::ColorTextAttr(nsIFrame* aRootFrame, + nsIFrame* aFrame) + : TTextAttr(!aFrame) { +- mRootNativeValue = aRootFrame->StyleText()->mColor.ToColor(); ++ mRootNativeValue = aRootFrame->StyleText()->mColor.ToColor(aRootFrame); + mIsRootDefined = true; + + if (aFrame) { +- mNativeValue = aFrame->StyleText()->mColor.ToColor(); ++ mNativeValue = aFrame->StyleText()->mColor.ToColor(aFrame); + mIsDefined = true; + } + } diff --git a/src/accessible/windows/ia2/ia2AccessibleComponent-cpp.patch b/src/accessible/windows/ia2/ia2AccessibleComponent-cpp.patch new file mode 100644 index 000000000..d751fa9b8 --- /dev/null +++ b/src/accessible/windows/ia2/ia2AccessibleComponent-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/accessible/windows/ia2/ia2AccessibleComponent.cpp b/accessible/windows/ia2/ia2AccessibleComponent.cpp +index 7837fdee3db339543f8b3d95dcb23ebe99aed8dc..207adf3ded9848b84ec89e94f80e8e02f161923c 100644 +--- a/accessible/windows/ia2/ia2AccessibleComponent.cpp ++++ b/accessible/windows/ia2/ia2AccessibleComponent.cpp +@@ -81,7 +81,7 @@ ia2AccessibleComponent::get_foreground(IA2Color* aForeground) { + if (!acc) return CO_E_OBJNOTCONNECTED; + + nsIFrame* frame = acc->GetFrame(); +- if (frame) *aForeground = frame->StyleText()->mColor.ToColor(); ++ if (frame) *aForeground = frame->StyleText()->mColor.ToColor(frame); + + return S_OK; + } diff --git a/src/dom/canvas/CanvasRenderingContext2D-cpp.patch b/src/dom/canvas/CanvasRenderingContext2D-cpp.patch new file mode 100644 index 000000000..5a4821efc --- /dev/null +++ b/src/dom/canvas/CanvasRenderingContext2D-cpp.patch @@ -0,0 +1,14 @@ +diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp +index ca400d3aed179ebef8e005206f29b419ae56afc4..4d4e56f4a222bd61dea82638f3e0b30fbe56a176 100644 +--- a/dom/canvas/CanvasRenderingContext2D.cpp ++++ b/dom/canvas/CanvasRenderingContext2D.cpp +@@ -1326,7 +1326,8 @@ Maybe CanvasRenderingContext2D::ParseColor( + RefPtr canvasStyle = + nsComputedDOMStyle::GetComputedStyle(mCanvasElement); + if (canvasStyle) { +- return Some(canvasStyle->StyleText()->mColor.ToColor()); ++ return Some(canvasStyle->StyleText()->mColor.ToColor( ++ mCanvasElement->GetPrimaryFrame())); + } + } + return data.mColor; diff --git a/src/dom/html/HTMLInputElement-cpp.patch b/src/dom/html/HTMLInputElement-cpp.patch new file mode 100644 index 000000000..cae2a6ce0 --- /dev/null +++ b/src/dom/html/HTMLInputElement-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp +index 3374a88b9335de1659df548fe8c18610f675b336..540f22697e7b85bca2fd6d3fe952ed3944216e17 100644 +--- a/dom/html/HTMLInputElement.cpp ++++ b/dom/html/HTMLInputElement.cpp +@@ -768,7 +768,7 @@ static void SerializeColorForHTMLCompatibility(const StyleAbsoluteColor& aColor, + // Raw StyleAbsoluteColor can have floats outside of 0-1 range e.g. when + // display-p3 color is converted to srgb, and ToColor guarantees to fit the + // values within the range. +- nscolor color = aColor.ToColor(); ++ nscolor color = aColor.ToColor(nullptr); + aResult.Truncate(); + aResult.AppendPrintf("#%02x%02x%02x", NS_GET_R(color), NS_GET_G(color), + NS_GET_B(color)); diff --git a/src/editor/libeditor/HTMLAbsPositionEditor-cpp.patch b/src/editor/libeditor/HTMLAbsPositionEditor-cpp.patch new file mode 100644 index 000000000..919f7a30c --- /dev/null +++ b/src/editor/libeditor/HTMLAbsPositionEditor-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/editor/libeditor/HTMLAbsPositionEditor.cpp b/editor/libeditor/HTMLAbsPositionEditor.cpp +index 44bd8ba90e9828423742d768e64ad6204b3cf134..49d5c9512137ce28ac463223098515f6912452b1 100644 +--- a/editor/libeditor/HTMLAbsPositionEditor.cpp ++++ b/editor/libeditor/HTMLAbsPositionEditor.cpp +@@ -1001,7 +1001,7 @@ nsresult HTMLEditor::GetTemporaryStyleForFocusedPositionedElement( + + static const uint8_t kBlackBgTrigger = 0xd0; + +- auto color = style->StyleText()->mColor.ToColor(); ++ auto color = style->StyleText()->mColor.ToColor(aElement.GetPrimaryFrame()); + if (NS_GET_R(color) >= kBlackBgTrigger && + NS_GET_G(color) >= kBlackBgTrigger && + NS_GET_B(color) >= kBlackBgTrigger) { diff --git a/src/gfx/thebes/gfxUtils-cpp.patch b/src/gfx/thebes/gfxUtils-cpp.patch new file mode 100644 index 000000000..4227df26d --- /dev/null +++ b/src/gfx/thebes/gfxUtils-cpp.patch @@ -0,0 +1,16 @@ +diff --git a/gfx/thebes/gfxUtils.cpp b/gfx/thebes/gfxUtils.cpp +index 6c19c572f06e8c4c97ce3f9dd390a32832e2f527..d11cbad2ee32a1507316809893e9c42a883e6c12 100644 +--- a/gfx/thebes/gfxUtils.cpp ++++ b/gfx/thebes/gfxUtils.cpp +@@ -1743,8 +1743,9 @@ DeviceColor ToDeviceColor(nscolor aColor) { + return ToDeviceColor(sRGBColor::FromABGR(aColor)); + } + +-DeviceColor ToDeviceColor(const StyleAbsoluteColor& aColor) { +- return ToDeviceColor(aColor.ToColor()); ++DeviceColor ToDeviceColor(const StyleAbsoluteColor& aColor, ++ const nsIFrame* aFrame) { ++ return ToDeviceColor(aColor.ToColor(aFrame)); + } + + sRGBColor ToSRGBColor(const StyleAbsoluteColor& aColor) { diff --git a/src/gfx/thebes/gfxUtils-h.patch b/src/gfx/thebes/gfxUtils-h.patch new file mode 100644 index 000000000..548a9875a --- /dev/null +++ b/src/gfx/thebes/gfxUtils-h.patch @@ -0,0 +1,23 @@ +diff --git a/gfx/thebes/gfxUtils.h b/gfx/thebes/gfxUtils.h +index 55f874429fd8cbb7a0a469eba33f6c777a5bc5f7..8cf0567d81fcae7413cee6df9471d1fa1738fc4a 100644 +--- a/gfx/thebes/gfxUtils.h ++++ b/gfx/thebes/gfxUtils.h +@@ -598,6 +598,9 @@ class ElementOrArray { + }; + + struct StyleAbsoluteColor; ++} // namespace mozilla ++class nsIFrame; ++namespace mozilla { + + namespace gfx { + +@@ -609,7 +612,7 @@ namespace gfx { + * applicable). + */ + DeviceColor ToDeviceColor(const sRGBColor&); +-DeviceColor ToDeviceColor(const StyleAbsoluteColor&); ++DeviceColor ToDeviceColor(const StyleAbsoluteColor&, const nsIFrame*); + DeviceColor ToDeviceColor(nscolor); + + sRGBColor ToSRGBColor(const StyleAbsoluteColor&); diff --git a/src/layout/painting/nsCSSRenderingBorders-cpp.patch b/src/layout/painting/nsCSSRenderingBorders-cpp.patch new file mode 100644 index 000000000..8837c1382 --- /dev/null +++ b/src/layout/painting/nsCSSRenderingBorders-cpp.patch @@ -0,0 +1,14 @@ +diff --git a/layout/painting/nsCSSRenderingBorders.cpp b/layout/painting/nsCSSRenderingBorders.cpp +index fd2524fd78b1709363afda35e4b0d4320913d9ec..c5b90bc789cdd7f8b0b661ca99b8c7f4d01e6d68 100644 +--- a/layout/painting/nsCSSRenderingBorders.cpp ++++ b/layout/painting/nsCSSRenderingBorders.cpp +@@ -3624,7 +3624,8 @@ ImgDrawResult nsCSSBorderImageRenderer::CreateWebRenderCommands( + case StyleImage::Tag::Gradient: { + const StyleGradient& gradient = *mImageRenderer.GetGradientData(); + nsCSSGradientRenderer renderer = nsCSSGradientRenderer::Create( +- aForFrame->PresContext(), aForFrame->Style(), gradient, mImageSize); ++ aForFrame->PresContext(), aForFrame->Style(), aForFrame, gradient, ++ mImageSize); + + wr::ExtendMode extendMode; + nsTArray stops; diff --git a/src/layout/painting/nsCSSRenderingGradients-cpp.patch b/src/layout/painting/nsCSSRenderingGradients-cpp.patch new file mode 100644 index 000000000..e41ca7dc7 --- /dev/null +++ b/src/layout/painting/nsCSSRenderingGradients-cpp.patch @@ -0,0 +1,78 @@ +diff --git a/layout/painting/nsCSSRenderingGradients.cpp b/layout/painting/nsCSSRenderingGradients.cpp +index 80a9d36ca865bbcd090d7aa556270a698447b016..2b1e0a70ed7e6f975c51a0912598c7903552ab20 100644 +--- a/layout/painting/nsCSSRenderingGradients.cpp ++++ b/layout/painting/nsCSSRenderingGradients.cpp +@@ -667,7 +667,8 @@ static nsTArray ComputeColorStops(ComputedStyle* aComputedStyle, + + nsCSSGradientRenderer nsCSSGradientRenderer::Create( + nsPresContext* aPresContext, ComputedStyle* aComputedStyle, +- const StyleGradient& aGradient, const nsSize& aIntrinsicSize) { ++ const nsIFrame* aFrame, const StyleGradient& aGradient, ++ const nsSize& aIntrinsicSize) { + auto srcSize = CSSSize::FromAppUnits(aIntrinsicSize); + + // Compute "gradient line" start and end relative to the intrinsic size of +@@ -704,6 +705,7 @@ nsCSSGradientRenderer nsCSSGradientRenderer::Create( + + nsCSSGradientRenderer renderer; + renderer.mPresContext = aPresContext; ++ renderer.mFrame = aFrame; + renderer.mGradient = &aGradient; + renderer.mStops = std::move(stops); + renderer.mLineStart = { +@@ -992,9 +994,10 @@ void nsCSSGradientRenderer::Paint(gfxContext& aContext, const nsRect& aDest, + GradientStopInterpolator( + const nsTArray& aStops, + const StyleColorInterpolationMethod& aStyleColorInterpolationMethod, +- bool aExtend, nsTArray& aResult) ++ bool aExtend, nsTArray& aResult, ++ const nsIFrame* aFrame) + : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, +- aExtend), ++ aExtend, aFrame), + mStops(aResult) {} + void CreateStop(float aPosition, gfx::DeviceColor aColor) { + mStops.AppendElement(gfx::GradientStop{aPosition, aColor}); +@@ -1007,12 +1010,12 @@ void nsCSSGradientRenderer::Paint(gfxContext& aContext, const nsRect& aDest, + bool extend = !isRepeat && styleColorInterpolationMethod.hue == + StyleHueInterpolationMethod::Longer; + GradientStopInterpolator interpolator(mStops, styleColorInterpolationMethod, +- extend, rawStops); ++ extend, rawStops, mFrame); + interpolator.CreateStops(); + } else { + rawStops.SetLength(mStops.Length()); + for (uint32_t i = 0; i < mStops.Length(); i++) { +- rawStops[i].color = ToDeviceColor(mStops[i].mColor); ++ rawStops[i].color = ToDeviceColor(mStops[i].mColor, mFrame); + rawStops[i].color.a *= aOpacity; + rawStops[i].offset = stopScale * (mStops[i].mPosition - stopOrigin); + } +@@ -1203,8 +1206,10 @@ class MOZ_STACK_CLASS WrColorStopInterpolator + WrColorStopInterpolator( + const nsTArray& aStops, + const StyleColorInterpolationMethod& aStyleColorInterpolationMethod, +- float aOpacity, nsTArray& aResult, bool aExtend) +- : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, aExtend), ++ float aOpacity, nsTArray& aResult, bool aExtend, ++ const nsIFrame* aFrame) ++ : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, aExtend, ++ aFrame), + mResult(aResult), + mOpacity(aOpacity), + mOutputStop(0) {} +@@ -1284,12 +1289,12 @@ void nsCSSGradientRenderer::BuildWebRenderParameters( + styleColorInterpolationMethod.hue == + StyleHueInterpolationMethod::Longer; + WrColorStopInterpolator interpolator(mStops, styleColorInterpolationMethod, +- aOpacity, aStops, extend); ++ aOpacity, aStops, extend, mFrame); + interpolator.CreateStops(); + } else { + aStops.SetLength(mStops.Length()); + for (uint32_t i = 0; i < mStops.Length(); i++) { +- aStops[i].color = wr::ToColorF(ToDeviceColor(mStops[i].mColor)); ++ aStops[i].color = wr::ToColorF(ToDeviceColor(mStops[i].mColor, mFrame)); + aStops[i].color.a *= aOpacity; + aStops[i].offset = (float)mStops[i].mPosition; + } diff --git a/src/layout/painting/nsCSSRenderingGradients-h.patch b/src/layout/painting/nsCSSRenderingGradients-h.patch new file mode 100644 index 000000000..661e7785f --- /dev/null +++ b/src/layout/painting/nsCSSRenderingGradients-h.patch @@ -0,0 +1,59 @@ +diff --git a/layout/painting/nsCSSRenderingGradients.h b/layout/painting/nsCSSRenderingGradients.h +index 30f665f7cacabb15fb6a1656385c5936d42be48b..8c4c4147ee8ec6812e9418f95b7b7c0358dcb735 100644 +--- a/layout/painting/nsCSSRenderingGradients.h ++++ b/layout/painting/nsCSSRenderingGradients.h +@@ -42,10 +42,11 @@ class MOZ_STACK_CLASS ColorStopInterpolator { + ColorStopInterpolator( + const nsTArray& aStops, + const StyleColorInterpolationMethod& aStyleColorInterpolationMethod, +- bool aExtend) ++ bool aExtend, const nsIFrame* aFrame) + : mStyleColorInterpolationMethod(aStyleColorInterpolationMethod), + mStops(aStops), +- mExtend(aExtend) {} ++ mExtend(aExtend), ++ mFrame(aFrame) {} + + void CreateStops() { + // This loop intentionally iterates extra stops at the beginning and end +@@ -96,7 +97,7 @@ class MOZ_STACK_CLASS ColorStopInterpolator { + Servo_InterpolateColor(mStyleColorInterpolationMethod, + &start.mColor, &end.mColor, progress); + static_cast(this)->CreateStop(float(position), +- gfx::ToDeviceColor(color)); ++ gfx::ToDeviceColor(color, mFrame)); + } + } + } +@@ -108,6 +109,7 @@ class MOZ_STACK_CLASS ColorStopInterpolator { + // which only matters if this is a CSS non-repeating gradient with + // StyleHueInterpolationMethod::Longer (only valid for hsl/hwb/lch/oklch). + bool mExtend; ++ const nsIFrame* mFrame; + + // This could be made tunable, but at 1.0/128 the error is largely + // irrelevant, as WebRender re-encodes it to 128 pairs of stops. +@@ -126,6 +128,7 @@ class nsCSSGradientRenderer final { + */ + static nsCSSGradientRenderer Create(nsPresContext* aPresContext, + ComputedStyle* aComputedStyle, ++ const nsIFrame* aFrame, + const StyleGradient& aGradient, + const nsSize& aIntrinsiceSize); + +@@ -173,6 +176,7 @@ class nsCSSGradientRenderer final { + private: + nsCSSGradientRenderer() + : mPresContext(nullptr), ++ mFrame(nullptr), + mGradient(nullptr), + mRadiusX(0.0), + mRadiusY(0.0), +@@ -192,6 +196,7 @@ class nsCSSGradientRenderer final { + const nsSize& aRepeatSize, bool aForceRepeatToCoverTiles); + + nsPresContext* mPresContext; ++ const nsIFrame* mFrame; + const StyleGradient* mGradient; + nsTArray mStops; + gfxPoint mLineStart, mLineEnd; // only for linear/radial gradients diff --git a/src/layout/painting/nsImageRenderer-cpp.patch b/src/layout/painting/nsImageRenderer-cpp.patch new file mode 100644 index 000000000..574f1c0f6 --- /dev/null +++ b/src/layout/painting/nsImageRenderer-cpp.patch @@ -0,0 +1,40 @@ +diff --git a/layout/painting/nsImageRenderer.cpp b/layout/painting/nsImageRenderer.cpp +index 4acb7670e971024f9c63e48ff711bbdd1dc02301..9ac1ae1b66eb6fb10195cd3709e0e29d8d53b574 100644 +--- a/layout/painting/nsImageRenderer.cpp ++++ b/layout/painting/nsImageRenderer.cpp +@@ -90,7 +90,7 @@ static already_AddRefed GetSymbolicIconImage(nsAtom* aName, + if (NS_WARN_IF(!XRE_IsParentProcess())) { + return nullptr; + } +- const auto fg = aFrame->StyleText()->mColor.ToColor(); ++ const auto fg = aFrame->StyleText()->mColor.ToColor(aFrame); + auto key = std::make_tuple(aName, aScale, fg); + auto* cache = aFrame->GetProperty(SymbolicImageCacheProp()); + if (!cache) { +@@ -567,7 +567,7 @@ ImgDrawResult nsImageRenderer::Draw(nsPresContext* aPresContext, + } + case StyleImage::Tag::Gradient: { + nsCSSGradientRenderer renderer = nsCSSGradientRenderer::Create( +- aPresContext, mForFrame->Style(), *mGradientData, mSize); ++ aPresContext, mForFrame->Style(), mForFrame, *mGradientData, mSize); + + renderer.Paint(*ctx, aDest, aFill, aRepeatSize, aSrc, aDirtyRect, + aOpacity); +@@ -644,7 +644,7 @@ ImgDrawResult nsImageRenderer::BuildWebRenderDisplayItems( + switch (mType) { + case StyleImage::Tag::Gradient: { + nsCSSGradientRenderer renderer = nsCSSGradientRenderer::Create( +- aPresContext, mForFrame->Style(), *mGradientData, mSize); ++ aPresContext, mForFrame->Style(), mForFrame, *mGradientData, mSize); + + renderer.BuildWebRenderDisplayItems(aBuilder, aSc, aDest, aFill, + aRepeatSize, aSrc, +@@ -1076,7 +1076,7 @@ ImgDrawResult nsImageRenderer::DrawShapeImage(nsPresContext* aPresContext, + + if (mImage->IsGradient()) { + nsCSSGradientRenderer renderer = nsCSSGradientRenderer::Create( +- aPresContext, mForFrame->Style(), *mGradientData, mSize); ++ aPresContext, mForFrame->Style(), mForFrame, *mGradientData, mSize); + nsRect dest(nsPoint(0, 0), mSize); + renderer.Paint(aRenderingContext, dest, dest, mSize, + CSSIntRect::FromAppUnitsRounded(dest), dest, 1.0); diff --git a/src/layout/style/GeckoBindings-cpp.patch b/src/layout/style/GeckoBindings-cpp.patch new file mode 100644 index 000000000..0c9df23d6 --- /dev/null +++ b/src/layout/style/GeckoBindings-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/style/GeckoBindings.cpp b/layout/style/GeckoBindings.cpp +index 56a16d313a5d30d12edf1f94459db1027af87002..3722f2d6ce6c0864956fed2b00c71a3286edc674 100644 +--- a/layout/style/GeckoBindings.cpp ++++ b/layout/style/GeckoBindings.cpp +@@ -1068,7 +1068,7 @@ void Gecko_SetFontPaletteOverride( + return; + } + aValues->mOverrides.AppendElement(gfx::FontPaletteValueSet::OverrideColor{ +- uint32_t(aIndex), gfx::sRGBColor::FromABGR(aColor->ToColor())}); ++ uint32_t(aIndex), gfx::sRGBColor::FromABGR(aColor->ToColor(nullptr))}); + } + + void Gecko_EnsureImageLayersLength(nsStyleImageLayers* aLayers, size_t aLen, diff --git a/src/layout/style/StyleColor-cpp.patch b/src/layout/style/StyleColor-cpp.patch index 7f0e9423b..f5aa44115 100644 --- a/src/layout/style/StyleColor-cpp.patch +++ b/src/layout/style/StyleColor-cpp.patch @@ -1,5 +1,5 @@ diff --git a/layout/style/StyleColor.cpp b/layout/style/StyleColor.cpp -index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..234a5fc3d94c341d6f8aea8f619661054d2f6a49 100644 +index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..85a48f27251756c72db8ed03a673a18e96cf76f9 100644 --- a/layout/style/StyleColor.cpp +++ b/layout/style/StyleColor.cpp @@ -8,6 +8,7 @@ @@ -10,7 +10,19 @@ index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..234a5fc3d94c341d6f8aea8f61966105 namespace mozilla { -@@ -44,13 +45,14 @@ nscolor StyleColor::CalcColor( +@@ -34,23 +35,24 @@ StyleAbsoluteColor StyleColor::ResolveColor( + + template <> + nscolor StyleColor::CalcColor(nscolor aColor) const { +- return ResolveColor(StyleAbsoluteColor::FromColor(aColor)).ToColor(); ++ return ResolveColor(StyleAbsoluteColor::FromColor(aColor)).ToColor(nullptr); + } + + template <> + nscolor StyleColor::CalcColor( + const StyleAbsoluteColor& aForegroundColor) const { +- return ResolveColor(aForegroundColor).ToColor(); ++ return ResolveColor(aForegroundColor).ToColor(nullptr); } template <> diff --git a/src/layout/style/nsStyleStruct-cpp.patch b/src/layout/style/nsStyleStruct-cpp.patch new file mode 100644 index 000000000..b4617b093 --- /dev/null +++ b/src/layout/style/nsStyleStruct-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp +index 80ca0cc08bc675359fbb09100eca43c8e3b9d413..d3ea525f6d84568c4e997a142bbfef6435d21034 100644 +--- a/layout/style/nsStyleStruct.cpp ++++ b/layout/style/nsStyleStruct.cpp +@@ -2208,7 +2208,7 @@ nscolor nsStyleBackground::BackgroundColor(const nsIFrame* aFrame) const { + } + + nscolor nsStyleBackground::BackgroundColor(const ComputedStyle* aStyle) const { +- return mBackgroundColor.CalcColor(*aStyle); ++ return mBackgroundColor.CalcColor(*aStyle, nullptr); + } + + bool nsStyleBackground::IsTransparent(const nsIFrame* aFrame) const { diff --git a/src/layout/svg/SVGContextPaint-cpp.patch b/src/layout/svg/SVGContextPaint-cpp.patch new file mode 100644 index 000000000..38110341c --- /dev/null +++ b/src/layout/svg/SVGContextPaint-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/svg/SVGContextPaint.cpp b/layout/svg/SVGContextPaint.cpp +index 3df8728978c1b48ca326c852feb0553091a99673..9f9096205c3dd3551c41c547a1aee667c0a51238 100644 +--- a/layout/svg/SVGContextPaint.cpp ++++ b/layout/svg/SVGContextPaint.cpp +@@ -143,7 +143,7 @@ static void SetupInheritablePaint(const DrawTarget* aDrawTarget, + } + + nscolor color = SVGUtils::GetFallbackOrPaintColor( +- *aFrame->Style(), aFillOrStroke, aDefaultFallbackColor); ++ *aFrame->Style(), aFillOrStroke, aDefaultFallbackColor, aFrame); + aTargetPaint.SetColor(color); + } + diff --git a/src/layout/svg/SVGGradientFrame-cpp.patch b/src/layout/svg/SVGGradientFrame-cpp.patch new file mode 100644 index 000000000..f79ff277b --- /dev/null +++ b/src/layout/svg/SVGGradientFrame-cpp.patch @@ -0,0 +1,42 @@ +diff --git a/layout/svg/SVGGradientFrame.cpp b/layout/svg/SVGGradientFrame.cpp +index 9c66d90fc0292abcab30c912968d3f84c0e181ff..aec0b2e48965729ccff19d632ac5e8fd04fd09eb 100644 +--- a/layout/svg/SVGGradientFrame.cpp ++++ b/layout/svg/SVGGradientFrame.cpp +@@ -229,8 +229,9 @@ class MOZ_STACK_CLASS SVGColorStopInterpolator + SVGColorStopInterpolator( + gfxPattern* aGradient, const nsTArray& aStops, + const StyleColorInterpolationMethod& aStyleColorInterpolationMethod, +- bool aExtend) +- : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, aExtend), ++ bool aExtend, const nsIFrame* aFrame) ++ : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, aExtend, ++ aFrame), + mGradient(aGradient) {} + + void CreateStop(float aPosition, DeviceColor aColor) { +@@ -270,7 +271,8 @@ already_AddRefed SVGGradientFrame::GetPaintServerPattern( + if (nStops == 1 || GradientVectorLengthIsZero()) { + // The gradient paints a single colour, using the stop-color of the last + // gradient step if there are more than one. +- return do_AddRef(new gfxPattern(ToDeviceColor(stops.LastElement().mColor))); ++ return do_AddRef( ++ new gfxPattern(ToDeviceColor(stops.LastElement().mColor, aSource))); + } + + // Get the transform list (if there is one). We do this after the returns +@@ -313,12 +315,13 @@ already_AddRefed SVGGradientFrame::GetPaintServerPattern( + static constexpr auto interpolationMethod = StyleColorInterpolationMethod{ + StyleColorSpace::SrgbLinear, StyleHueInterpolationMethod::Shorter}; + SVGColorStopInterpolator interpolator(gradient, stops, interpolationMethod, +- false); ++ false, aSource); + interpolator.CreateStops(); + } else { + // setup standard sRGB stops + for (const auto& stop : stops) { +- gradient->AddColorStop(stop.mPosition, ToDeviceColor(stop.mColor)); ++ gradient->AddColorStop(stop.mPosition, ++ ToDeviceColor(stop.mColor, aSource)); + } + } + diff --git a/src/layout/svg/SVGImageContext-cpp.patch b/src/layout/svg/SVGImageContext-cpp.patch new file mode 100644 index 000000000..e14b964cd --- /dev/null +++ b/src/layout/svg/SVGImageContext-cpp.patch @@ -0,0 +1,21 @@ +diff --git a/layout/svg/SVGImageContext.cpp b/layout/svg/SVGImageContext.cpp +index ecbda963b75fb70b62885a0c8f7a517011a8d5dc..1200a51aee7db4ee1a014308581ada1002c0d05f 100644 +--- a/layout/svg/SVGImageContext.cpp ++++ b/layout/svg/SVGImageContext.cpp +@@ -57,12 +57,14 @@ void SVGImageContext::MaybeStoreContextPaint(SVGImageContext& aContext, + if ((style->mMozContextProperties.bits & StyleContextPropertyBits::FILL) && + style->mFill.kind.IsColor()) { + haveContextPaint = true; +- contextPaint->SetFill(style->mFill.kind.AsColor().CalcColor(aStyle)); ++ contextPaint->SetFill( ++ style->mFill.kind.AsColor().CalcColor(aStyle, nullptr)); + } + if ((style->mMozContextProperties.bits & StyleContextPropertyBits::STROKE) && + style->mStroke.kind.IsColor()) { + haveContextPaint = true; +- contextPaint->SetStroke(style->mStroke.kind.AsColor().CalcColor(aStyle)); ++ contextPaint->SetStroke( ++ style->mStroke.kind.AsColor().CalcColor(aStyle, nullptr)); + } + if (style->mMozContextProperties.bits & + StyleContextPropertyBits::FILL_OPACITY) { diff --git a/src/layout/svg/SVGUtils-cpp.patch b/src/layout/svg/SVGUtils-cpp.patch new file mode 100644 index 000000000..577ca64ba --- /dev/null +++ b/src/layout/svg/SVGUtils-cpp.patch @@ -0,0 +1,60 @@ +diff --git a/layout/svg/SVGUtils.cpp b/layout/svg/SVGUtils.cpp +index 93b73e1c665ea8e011af7026810db6cd23c8049b..004d1d0637d62fcde25a924df5392a7dc64f75dc 100644 +--- a/layout/svg/SVGUtils.cpp ++++ b/layout/svg/SVGUtils.cpp +@@ -1154,23 +1154,23 @@ gfxRect SVGUtils::PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents, + /* static */ + nscolor SVGUtils::GetFallbackOrPaintColor( + const ComputedStyle& aStyle, StyleSVGPaint nsStyleSVG::* aFillOrStroke, +- nscolor aDefaultContextFallbackColor) { ++ nscolor aDefaultContextFallbackColor, const nsIFrame* aFrame) { + const auto& paint = aStyle.StyleSVG()->*aFillOrStroke; + nscolor color; + switch (paint.kind.tag) { + case StyleSVGPaintKind::Tag::PaintServer: + color = paint.fallback.IsColor() +- ? paint.fallback.AsColor().CalcColor(aStyle) ++ ? paint.fallback.AsColor().CalcColor(aStyle, aFrame) + : NS_RGBA(0, 0, 0, 0); + break; + case StyleSVGPaintKind::Tag::ContextStroke: + case StyleSVGPaintKind::Tag::ContextFill: + color = paint.fallback.IsColor() +- ? paint.fallback.AsColor().CalcColor(aStyle) ++ ? paint.fallback.AsColor().CalcColor(aStyle, aFrame) + : aDefaultContextFallbackColor; + break; + default: +- color = paint.kind.AsColor().CalcColor(aStyle); ++ color = paint.kind.AsColor().CalcColor(aStyle, aFrame); + break; + } + if (const auto* styleIfVisited = aStyle.GetStyleIfVisited()) { +@@ -1184,7 +1184,8 @@ nscolor SVGUtils::GetFallbackOrPaintColor( + // another simple color. + if (paintIfVisited.kind.IsColor() && paint.kind.IsColor()) { + nscolor colors[2] = { +- color, paintIfVisited.kind.AsColor().CalcColor(*styleIfVisited)}; ++ color, ++ paintIfVisited.kind.AsColor().CalcColor(*styleIfVisited, aFrame)}; + return ComputedStyle::CombineVisitedColors(colors, + aStyle.RelevantLinkVisited()); + } +@@ -1254,7 +1255,7 @@ void SVGUtils::MakeFillPatternFor(nsIFrame* aFrame, gfxContext* aContext, + // objectBoundingBox where the width or height of the object is zero. + // See http://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox + sRGBColor color(sRGBColor::FromABGR(GetFallbackOrPaintColor( +- *aFrame->Style(), &nsStyleSVG::mFill, NS_RGB(0, 0, 0)))); ++ *aFrame->Style(), &nsStyleSVG::mFill, NS_RGB(0, 0, 0), aFrame))); + color.a *= fillOpacity; + aOutPattern->InitColorPattern(ToDeviceColor(color)); + } +@@ -1321,7 +1322,7 @@ void SVGUtils::MakeStrokePatternFor(nsIFrame* aFrame, gfxContext* aContext, + // objectBoundingBox where the width or height of the object is zero. + // See http://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox + sRGBColor color(sRGBColor::FromABGR(GetFallbackOrPaintColor( +- *aFrame->Style(), &nsStyleSVG::mStroke, NS_RGBA(0, 0, 0, 0)))); ++ *aFrame->Style(), &nsStyleSVG::mStroke, NS_RGBA(0, 0, 0, 0), aFrame))); + color.a *= strokeOpacity; + aOutPattern->InitColorPattern(ToDeviceColor(color)); + } diff --git a/src/layout/svg/SVGUtils-h.patch b/src/layout/svg/SVGUtils-h.patch new file mode 100644 index 000000000..6adbbff91 --- /dev/null +++ b/src/layout/svg/SVGUtils-h.patch @@ -0,0 +1,13 @@ +diff --git a/layout/svg/SVGUtils.h b/layout/svg/SVGUtils.h +index 1f1f7ad6b78e5c411651fee30bbbfeb784257e0a..28c7332aae411c4220bd00af08b491d31d2eb090 100644 +--- a/layout/svg/SVGUtils.h ++++ b/layout/svg/SVGUtils.h +@@ -428,7 +428,7 @@ class SVGUtils final { + + static nscolor GetFallbackOrPaintColor( + const ComputedStyle&, StyleSVGPaint nsStyleSVG::* aFillOrStroke, +- nscolor aDefaultContextFallbackColor); ++ nscolor aDefaultContextFallbackColor, const nsIFrame* aFrame); + + static void MakeFillPatternFor(nsIFrame* aFrame, gfxContext* aContext, + GeneralPattern* aOutPattern, diff --git a/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch b/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch index 30fc951a7..2b834bb1d 100644 --- a/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch +++ b/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch @@ -1,5 +1,5 @@ diff --git a/layout/xul/tree/nsTreeBodyFrame.cpp b/layout/xul/tree/nsTreeBodyFrame.cpp -index b6aa10336e7994c830e0326298820c3a534f8094..b3ddb7b9b3ceb8b868e7e48e02fdb70a876c9019 100644 +index b6aa10336e7994c830e0326298820c3a534f8094..7747c52e5c5d227894d8f7fb377c65861dc51c4c 100644 --- a/layout/xul/tree/nsTreeBodyFrame.cpp +++ b/layout/xul/tree/nsTreeBodyFrame.cpp @@ -2865,7 +2865,8 @@ ImgDrawResult nsTreeBodyFrame::PaintCell( @@ -12,6 +12,15 @@ index b6aa10336e7994c830e0326298820c3a534f8094..b3ddb7b9b3ceb8b868e7e48e02fdb70a ColorPattern colorPatt(ToDeviceColor(color)); StyleBorderStyle style = borderStyle->GetBorderStyle(eSideLeft); +@@ -3300,7 +3301,7 @@ ImgDrawResult nsTreeBodyFrame::PaintText( + textRect.Deflate(bp); + + // Set our color. +- ColorPattern color(ToDeviceColor(textContext->StyleText()->mColor)); ++ ColorPattern color(ToDeviceColor(textContext->StyleText()->mColor, this)); + + // Draw decorations. + StyleTextDecorationLine decorations = @@ -3340,7 +3341,7 @@ ImgDrawResult nsTreeBodyFrame::PaintText( } diff --git a/src/servo/ports/geckolib/cbindgen-toml.patch b/src/servo/ports/geckolib/cbindgen-toml.patch index 0bf358476..24433b060 100644 --- a/src/servo/ports/geckolib/cbindgen-toml.patch +++ b/src/servo/ports/geckolib/cbindgen-toml.patch @@ -1,5 +1,5 @@ diff --git a/servo/ports/geckolib/cbindgen.toml b/servo/ports/geckolib/cbindgen.toml -index e9ae0149e80a241b2a32ce445deb923af2fac445..464f4e8b853d26bd2da327de8bf8bb50e5ab8599 100644 +index e9ae0149e80a241b2a32ce445deb923af2fac445..0dc5768ab8bf89f7d6c31ff4c7bd4bb805d64509 100644 --- a/servo/ports/geckolib/cbindgen.toml +++ b/servo/ports/geckolib/cbindgen.toml @@ -679,9 +679,9 @@ renaming_overrides_prefixing = true @@ -10,7 +10,7 @@ index e9ae0149e80a241b2a32ce445deb923af2fac445..464f4e8b853d26bd2da327de8bf8bb50 + * style. The frame, when supplied, is used to resolve Zen boosts. */ - nscolor CalcColor(const ComputedStyle&) const; -+ nscolor CalcColor(const ComputedStyle&, const nsIFrame* = nullptr) const; ++ nscolor CalcColor(const ComputedStyle&, const nsIFrame*) const; /** * Compute the final color, making the argument the foreground color. */ @@ -24,7 +24,7 @@ index e9ae0149e80a241b2a32ce445deb923af2fac445..464f4e8b853d26bd2da327de8bf8bb50 + * document, or null to skip boost resolution. */ - nscolor ToColor() const; -+ nscolor ToColor(const nsIFrame* = nullptr) const; ++ nscolor ToColor(const nsIFrame*) const; """ "OwnedSlice" = """ diff --git a/src/widget/ScrollbarDrawing-cpp.patch b/src/widget/ScrollbarDrawing-cpp.patch new file mode 100644 index 000000000..43e784ca0 --- /dev/null +++ b/src/widget/ScrollbarDrawing-cpp.patch @@ -0,0 +1,23 @@ +diff --git a/widget/ScrollbarDrawing.cpp b/widget/ScrollbarDrawing.cpp +index fec73f8a8cbfbf952f1d14f1a4eb2b20f9b5aad4..375ef5654cf61e4dea102588679d2ac2060d299a 100644 +--- a/widget/ScrollbarDrawing.cpp ++++ b/widget/ScrollbarDrawing.cpp +@@ -121,7 +121,7 @@ sRGBColor ScrollbarDrawing::ComputeScrollbarTrackColor( + const nsStyleUI* ui = aStyle.StyleUI(); + if (ui->mScrollbarColor.IsColors()) { + return sRGBColor::FromABGR( +- ui->mScrollbarColor.AsColors().track.CalcColor(aStyle)); ++ ui->mScrollbarColor.AsColors().track.CalcColor(aStyle, aFrame)); + } + static constexpr sRGBColor sDefaultDarkTrackColor = + sRGBColor::FromU8(20, 20, 25, 77); +@@ -143,7 +143,8 @@ sRGBColor ScrollbarDrawing::ComputeScrollbarThumbColor( + const nsStyleUI* ui = aStyle.StyleUI(); + if (ui->mScrollbarColor.IsColors()) { + return sRGBColor::FromABGR(ThemeColors::AdjustUnthemedScrollbarThumbColor( +- ui->mScrollbarColor.AsColors().thumb.CalcColor(aStyle), aElementState)); ++ ui->mScrollbarColor.AsColors().thumb.CalcColor(aStyle, aFrame), ++ aElementState)); + } + + auto systemColor = [&] { diff --git a/src/widget/ScrollbarDrawingCocoa-cpp.patch b/src/widget/ScrollbarDrawingCocoa-cpp.patch new file mode 100644 index 000000000..a1df0b9a7 --- /dev/null +++ b/src/widget/ScrollbarDrawingCocoa-cpp.patch @@ -0,0 +1,15 @@ +diff --git a/widget/ScrollbarDrawingCocoa.cpp b/widget/ScrollbarDrawingCocoa.cpp +index f0dff9276f9880034c800413c4afc2400136b35a..1dd5b53bfda64e1d3b4c1870680fa1a43de0e6fb 100644 +--- a/widget/ScrollbarDrawingCocoa.cpp ++++ b/widget/ScrollbarDrawingCocoa.cpp +@@ -61,8 +61,8 @@ static ScrollbarParams ComputeScrollbarParams(nsIFrame* aFrame, + if (ui->HasCustomScrollbars()) { + const auto& colors = ui->mScrollbarColor.AsColors(); + params.isCustom = true; +- params.trackColor = colors.track.CalcColor(aStyle); +- params.faceColor = colors.thumb.CalcColor(aStyle); ++ params.trackColor = colors.track.CalcColor(aStyle, aFrame); ++ params.faceColor = colors.thumb.CalcColor(aStyle, aFrame); + } + + return params; diff --git a/src/widget/ScrollbarDrawingWin11-cpp.patch b/src/widget/ScrollbarDrawingWin11-cpp.patch new file mode 100644 index 000000000..aa707014d --- /dev/null +++ b/src/widget/ScrollbarDrawingWin11-cpp.patch @@ -0,0 +1,22 @@ +diff --git a/widget/ScrollbarDrawingWin11.cpp b/widget/ScrollbarDrawingWin11.cpp +index be059ca615d1e0281af64984cfc8121be2f6e305..6326c98b369d948052c3cb1df13c8cfaaa472f5c 100644 +--- a/widget/ScrollbarDrawingWin11.cpp ++++ b/widget/ScrollbarDrawingWin11.cpp +@@ -78,7 +78,7 @@ sRGBColor ScrollbarDrawingWin11::ComputeScrollbarTrackColor( + const nsStyleUI* ui = aStyle.StyleUI(); + if (ui->mScrollbarColor.IsColors()) { + return sRGBColor::FromABGR( +- ui->mScrollbarColor.AsColors().track.CalcColor(aStyle)); ++ ui->mScrollbarColor.AsColors().track.CalcColor(aStyle, aFrame)); + } + return aColors.IsDark() ? sRGBColor::FromU8(23, 23, 23, 255) + : sRGBColor::FromU8(240, 240, 240, 255); +@@ -94,7 +94,7 @@ sRGBColor ScrollbarDrawingWin11::ComputeScrollbarThumbColor( + const nscolor baseColor = [&] { + const nsStyleUI* ui = aStyle.StyleUI(); + if (ui->mScrollbarColor.IsColors()) { +- return ui->mScrollbarColor.AsColors().thumb.CalcColor(aStyle); ++ return ui->mScrollbarColor.AsColors().thumb.CalcColor(aStyle, aFrame); + } + return aColors.IsDark() ? NS_RGBA(149, 149, 149, 255) + : NS_RGBA(133, 133, 133, 255); diff --git a/src/widget/ThemeColors-cpp.patch b/src/widget/ThemeColors-cpp.patch new file mode 100644 index 000000000..c4f7c6167 --- /dev/null +++ b/src/widget/ThemeColors-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/widget/ThemeColors.cpp b/widget/ThemeColors.cpp +index 0ac3a8cbb04258312cba20a89a23700c6fd1b49f..dfd5203c1a795fc14befa88a474f241dd16e9c8f 100644 +--- a/widget/ThemeColors.cpp ++++ b/widget/ThemeColors.cpp +@@ -113,7 +113,7 @@ ThemeAccentColor::ThemeAccentColor(const ComputedStyle& aStyle, + } + MOZ_ASSERT(color.IsColor()); + nscolor accentColor = +- ColorPalette::EnsureOpaque(color.AsColor().CalcColor(aStyle)); ++ ColorPalette::EnsureOpaque(color.AsColor().CalcColor(aStyle, nullptr)); + if (sRGBColor::FromABGR(accentColor) == mDefaultPalette->mAccent) { + return; + } diff --git a/src/zen/boosts/nsZenBoostsBackend.cpp b/src/zen/boosts/nsZenBoostsBackend.cpp index 3c12f3e15..f9eaf6461 100644 --- a/src/zen/boosts/nsZenBoostsBackend.cpp +++ b/src/zen/boosts/nsZenBoostsBackend.cpp @@ -25,6 +25,8 @@ #include "mozilla/dom/Document.h" #include "mozilla/dom/DocumentInlines.h" #include "mozilla/dom/BrowsingContext.h" +#include "mozilla/dom/Element.h" +#include "mozilla/PseudoStyleType.h" #include "mozilla/StaticPrefs_zen.h" @@ -384,6 +386,8 @@ inline static nscolor zenInvertColorChannel(nscolor aColor) { * not touch (devtools highlighters, screenshots, the boosts overlays * themselves, and other native-anonymous UI such as scrollbars). A null frame * gives no document to anchor the boost on, so it is treated the same way. + * CSS generated content (::before/::after/::marker/::backdrop) is + * native-anonymous too but is author content, so it is not exempt. */ ZEN_HOT_FUNCTION inline static bool IsBoostExemptFrame(const nsIFrame* aFrame) { @@ -391,7 +395,24 @@ inline static bool IsBoostExemptFrame(const nsIFrame* aFrame) { return true; } const nsIContent* content = aFrame->GetContent(); - return content && content->IsInNativeAnonymousSubtree(); + if (!content || !content->IsInNativeAnonymousSubtree()) { + return false; + } + if (const nsIContent* root = + content->GetClosestNativeAnonymousSubtreeRoot()) { + if (root->IsElement()) { + switch (root->AsElement()->GetPseudoElementType()) { + case mozilla::PseudoStyleType::Before: + case mozilla::PseudoStyleType::After: + case mozilla::PseudoStyleType::Marker: + case mozilla::PseudoStyleType::Backdrop: + return false; + default: + break; + } + } + } + return true; } /** diff --git a/src/zen/common/styles/zen-popup.css b/src/zen/common/styles/zen-popup.css index 8c29733b0..68c64b713 100644 --- a/src/zen/common/styles/zen-popup.css +++ b/src/zen/common/styles/zen-popup.css @@ -8,7 +8,6 @@ @import url("chrome://browser/content/zen-styles/zen-panels/dialog.css"); :root { - --panel-subview-body-padding: 2px 0; --arrowpanel-menuitem-border-radius: 5px; --arrowpanel-menuitem-margin: var(--uc-arrowpanel-menuitem-margin-block) var(--uc-arrowpanel-menuitem-margin-inline); --arrowpanel-menuitem-padding-block: 8px; @@ -68,8 +67,7 @@ panel { } .widget-overflow-list .toolbarbutton-1:not(.toolbarbutton-combined) > .toolbarbutton-text, -.subviewbutton:not(#appMenu-zoom-controls > .subviewbutton) > .toolbarbutton-icon + .toolbarbutton-text, -#appMenu-fxa-label2 > vbox { +.subviewbutton:not(#appMenu-zoom-controls > .subviewbutton) > .toolbarbutton-icon + .toolbarbutton-text { padding-inline-start: var(--uc-arrowpanel-menuicon-margin-inline); } @@ -88,17 +86,6 @@ panel { white-space: nowrap; } -/* Firefox profile avatar in appmenu */ -#appMenu-fxa-label2::before { - content: ""; - display: -moz-box; - height: var(--size-item-small); - width: var(--size-item-small); - background: var(--avatar-image-url) 0/16px; - scale: 1.25; - border-radius: 99px; -} - /* disable proton account separator */ #appMenu-fxa-separator { border-image: none; @@ -108,10 +95,6 @@ panel { padding-block: 0; } -#appMenu-fxa-status2:not([fxastatus]) > #appMenu-fxa-label2 { - margin-inline-end: calc(var(--arrowpanel-menuitem-padding-inline) * -1); -} - /* zoom controls */ #appMenu-zoom-controls { border-top: 1px solid var(--panel-separator-color); From 1c29206e079e0b94ceeeadbbfd09006b22063e96 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Tue, 26 May 2026 23:14:36 +0200 Subject: [PATCH 26/31] gh-12284: Sync upstream Firefox to version `151.0.2` (gh-13875) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR syncs the upstream Firefox to version 151.0.2. * ⚠️ Some patches did not apply cleanly. Please review them carefully. @mr-cheffy please review and merge this PR. --------- Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com> --- README.md | 4 ++-- build/firefox-cache/l10n-last-commit-hash | 2 +- src/browser/modules/URILoadingHelper-sys-mjs.patch | 12 ++++++------ src/zen/sessionstore/ZenWindowSync.sys.mjs | 9 ++++++++- surfer.json | 6 +++--- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 5e46f4dc9..cb51a0f61 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,8 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne ### Firefox Versions -- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `151.0.1`! 🚀 -- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 151.0.1`! +- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `151.0.2`! 🚀 +- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 151.0.2`! ### Contributing diff --git a/build/firefox-cache/l10n-last-commit-hash b/build/firefox-cache/l10n-last-commit-hash index f6c433445..7bcc95dc3 100644 --- a/build/firefox-cache/l10n-last-commit-hash +++ b/build/firefox-cache/l10n-last-commit-hash @@ -1 +1 @@ -10b4efc5a79c2ab80de3b22771b1d36b9b225920 \ No newline at end of file +05272df13c2e4f435b4e0a706715f302b09ef829 \ No newline at end of file diff --git a/src/browser/modules/URILoadingHelper-sys-mjs.patch b/src/browser/modules/URILoadingHelper-sys-mjs.patch index a804e232a..82ac3592b 100644 --- a/src/browser/modules/URILoadingHelper-sys-mjs.patch +++ b/src/browser/modules/URILoadingHelper-sys-mjs.patch @@ -1,8 +1,8 @@ diff --git a/browser/modules/URILoadingHelper.sys.mjs b/browser/modules/URILoadingHelper.sys.mjs -index ed6b9fda700b2b4b35836a77a4da953377a72f4b..22acedcf1006f994ec8b6bf8991b4202e12a6f39 100644 +index bd2e54e914b171df9b8bcc7dcbc2388e9641f6c6..8b3cb6542bea3fb89e47adc93cb13f94447450e2 100644 --- a/browser/modules/URILoadingHelper.sys.mjs +++ b/browser/modules/URILoadingHelper.sys.mjs -@@ -224,6 +224,7 @@ function openInWindow(url, params, sourceWindow) { +@@ -228,6 +228,7 @@ function openInWindow(url, params, sourceWindow) { features, sa ); @@ -10,7 +10,7 @@ index ed6b9fda700b2b4b35836a77a4da953377a72f4b..22acedcf1006f994ec8b6bf8991b4202 } function openInCurrentTab(targetBrowser, url, uriObj, params) { -@@ -541,7 +542,7 @@ export const URILoadingHelper = { +@@ -545,7 +546,7 @@ export const URILoadingHelper = { // page. If a load request bounces off for the currently selected tab, // we'll open a new tab instead. let tab = w.gBrowser.getTabForBrowser(targetBrowser); @@ -19,7 +19,7 @@ index ed6b9fda700b2b4b35836a77a4da953377a72f4b..22acedcf1006f994ec8b6bf8991b4202 where = "tab"; targetBrowser = null; } else if ( -@@ -974,7 +975,7 @@ export const URILoadingHelper = { +@@ -978,7 +979,7 @@ export const URILoadingHelper = { ignoreQueryString || replaceQueryString, ignoreFragmentWhenComparing ); @@ -28,8 +28,8 @@ index ed6b9fda700b2b4b35836a77a4da953377a72f4b..22acedcf1006f994ec8b6bf8991b4202 for (let i = 0; i < browsers.length; i++) { let browser = browsers[i]; let browserCompare = cleanURL( -@@ -1026,7 +1027,7 @@ export const URILoadingHelper = { - aSplitView.replaceTab(tabToReplace, tabToMove); +@@ -1034,7 +1035,7 @@ export const URILoadingHelper = { + } aSplitView.ownerGlobal.focus(); } else { - aWindow.gBrowser.tabContainer.selectedIndex = i; diff --git a/src/zen/sessionstore/ZenWindowSync.sys.mjs b/src/zen/sessionstore/ZenWindowSync.sys.mjs index ede60adeb..12993d74b 100644 --- a/src/zen/sessionstore/ZenWindowSync.sys.mjs +++ b/src/zen/sessionstore/ZenWindowSync.sys.mjs @@ -1534,7 +1534,14 @@ class nsZenWindowSync { window.removeEventListener(eventName, this); } delete window.gZenWindowSync; - this.#moveAllActiveTabsToOtherWindowsForClose(window); + const { promise, resolve } = Promise.withResolvers(); + this.#docShellSwitchPromise = promise; + try { + this.#moveAllActiveTabsToOtherWindowsForClose(window); + } catch (e) { + console.error(`Error moving active tabs to other windows on close:`, e); + } + resolve(); } on_WindowCloseAndBrowserFlushed(aBrowsers) { diff --git a/surfer.json b/surfer.json index ef7606370..a53e9df9a 100644 --- a/surfer.json +++ b/surfer.json @@ -5,8 +5,8 @@ "binaryName": "zen", "version": { "product": "firefox", - "version": "151.0.1", - "candidate": "151.0.1", + "version": "151.0.2", + "candidate": "151.0.2", "candidateBuild": 1 }, "buildOptions": { @@ -20,7 +20,7 @@ "brandShortName": "Zen", "brandFullName": "Zen Browser", "release": { - "displayVersion": "1.20b", + "displayVersion": "1.20.1b", "github": { "repo": "zen-browser/desktop" }, From 0863d7f4c05f5d0625ce12d82cd1b3ada7515ef9 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Tue, 26 May 2026 23:37:42 +0200 Subject: [PATCH 27/31] no-bug: New Crowdin updates (gh-13866) --- .../browser/preferences/zen-preferences.ftl | 2 + locales/ar/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/bg/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/bs/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/ca/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/cs/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 4 +- locales/cy/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ locales/cy/browser/browser/zen-general.ftl | 2 +- locales/cy/browser/browser/zen-split-view.ftl | 6 +- .../cy/browser/browser/zen-vertical-tabs.ftl | 4 +- .../browser/preferences/zen-preferences.ftl | 2 + locales/da/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/de/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/el/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ locales/el/browser/browser/zen-general.ftl | 4 +- .../browser/preferences/zen-preferences.ftl | 2 + locales/en-GB/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/es-ES/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/et/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/eu/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/fa/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/fi/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/fr/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/ga-IE/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 10 ++-- locales/he/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ locales/he/browser/browser/zen-general.ftl | 6 +- locales/he/browser/browser/zen-menubar.ftl | 2 +- .../he/browser/browser/zen-vertical-tabs.ftl | 4 +- locales/he/browser/browser/zen-workspaces.ftl | 2 +- .../browser/preferences/zen-preferences.ftl | 2 + locales/hu/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/id/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/is/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/it/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/ja/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/ko/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 10 ++-- locales/lt/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ locales/lt/browser/browser/zen-general.ftl | 4 +- .../browser/preferences/zen-preferences.ftl | 2 + locales/nb/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/nl/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/nn-NO/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/pl/browser/browser/zen-boosts.ftl | 59 +++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 24 ++++---- locales/pt-BR/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/pt-PT/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/ro/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/ru/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ locales/ru/browser/browser/zen-general.ftl | 2 +- .../browser/preferences/zen-preferences.ftl | 2 + locales/sk/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/sv-SE/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/th/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/tr/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 2 + locales/uk/browser/browser/zen-boosts.ftl | 59 +++++++++++++++++++ locales/uk/browser/browser/zen-split-view.ftl | 4 +- .../browser/preferences/zen-preferences.ftl | 4 +- locales/vi/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ locales/vi/browser/browser/zen-general.ftl | 6 +- locales/vi/browser/browser/zen-split-view.ftl | 6 +- .../vi/browser/browser/zen-vertical-tabs.ftl | 2 +- .../browser/preferences/zen-preferences.ftl | 2 + locales/zh-CN/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ .../browser/preferences/zen-preferences.ftl | 22 +++---- locales/zh-TW/browser/browser/zen-boosts.ftl | 58 ++++++++++++++++++ locales/zh-TW/browser/browser/zen-general.ftl | 8 +-- 97 files changed, 2524 insertions(+), 62 deletions(-) create mode 100644 locales/ar/browser/browser/zen-boosts.ftl create mode 100644 locales/bg/browser/browser/zen-boosts.ftl create mode 100644 locales/bs/browser/browser/zen-boosts.ftl create mode 100644 locales/ca/browser/browser/zen-boosts.ftl create mode 100644 locales/cs/browser/browser/zen-boosts.ftl create mode 100644 locales/cy/browser/browser/zen-boosts.ftl create mode 100644 locales/da/browser/browser/zen-boosts.ftl create mode 100644 locales/de/browser/browser/zen-boosts.ftl create mode 100644 locales/el/browser/browser/zen-boosts.ftl create mode 100644 locales/en-GB/browser/browser/zen-boosts.ftl create mode 100644 locales/es-ES/browser/browser/zen-boosts.ftl create mode 100644 locales/et/browser/browser/zen-boosts.ftl create mode 100644 locales/eu/browser/browser/zen-boosts.ftl create mode 100644 locales/fa/browser/browser/zen-boosts.ftl create mode 100644 locales/fi/browser/browser/zen-boosts.ftl create mode 100644 locales/fr/browser/browser/zen-boosts.ftl create mode 100644 locales/ga-IE/browser/browser/zen-boosts.ftl create mode 100644 locales/he/browser/browser/zen-boosts.ftl create mode 100644 locales/hu/browser/browser/zen-boosts.ftl create mode 100644 locales/id/browser/browser/zen-boosts.ftl create mode 100644 locales/is/browser/browser/zen-boosts.ftl create mode 100644 locales/it/browser/browser/zen-boosts.ftl create mode 100644 locales/ja/browser/browser/zen-boosts.ftl create mode 100644 locales/ko/browser/browser/zen-boosts.ftl create mode 100644 locales/lt/browser/browser/zen-boosts.ftl create mode 100644 locales/nb/browser/browser/zen-boosts.ftl create mode 100644 locales/nl/browser/browser/zen-boosts.ftl create mode 100644 locales/nn-NO/browser/browser/zen-boosts.ftl create mode 100644 locales/pl/browser/browser/zen-boosts.ftl create mode 100644 locales/pt-BR/browser/browser/zen-boosts.ftl create mode 100644 locales/pt-PT/browser/browser/zen-boosts.ftl create mode 100644 locales/ro/browser/browser/zen-boosts.ftl create mode 100644 locales/ru/browser/browser/zen-boosts.ftl create mode 100644 locales/sk/browser/browser/zen-boosts.ftl create mode 100644 locales/sv-SE/browser/browser/zen-boosts.ftl create mode 100644 locales/th/browser/browser/zen-boosts.ftl create mode 100644 locales/tr/browser/browser/zen-boosts.ftl create mode 100644 locales/uk/browser/browser/zen-boosts.ftl create mode 100644 locales/vi/browser/browser/zen-boosts.ftl create mode 100644 locales/zh-CN/browser/browser/zen-boosts.ftl create mode 100644 locales/zh-TW/browser/browser/zen-boosts.ftl diff --git a/locales/ar/browser/browser/preferences/zen-preferences.ftl b/locales/ar/browser/browser/preferences/zen-preferences.ftl index c8d4332a5..a7b2acc92 100644 --- a/locales/ar/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ar/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = التبديل إلى مساحة العمل 9 zen-workspace-shortcut-switch-10 = التبديل إلى مساحة العمل 10 zen-workspace-shortcut-forward = إلى الأمام فضاء العمل zen-workspace-shortcut-backward = مساحة العمل الخلفية +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = تبديل عرض شريط العرض zen-pinned-tab-shortcut-reset = إعادة تعيين علامة التبويب المثبتة إلى عنوان URL المثبت zen-split-view-shortcut-grid = تبديل عرض تقسيم الشبكة @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = قلب إمكانية الوصول zen-close-all-unpinned-tabs-shortcut = إغلاق جميع علامات التبويب الغير مثبتة zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/ar/browser/browser/zen-boosts.ftl b/locales/ar/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/ar/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/bg/browser/browser/preferences/zen-preferences.ftl b/locales/bg/browser/browser/preferences/zen-preferences.ftl index ed26f72b8..a43ff8124 100644 --- a/locales/bg/browser/browser/preferences/zen-preferences.ftl +++ b/locales/bg/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/bg/browser/browser/zen-boosts.ftl b/locales/bg/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/bg/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/bs/browser/browser/preferences/zen-preferences.ftl b/locales/bs/browser/browser/preferences/zen-preferences.ftl index ed26f72b8..a43ff8124 100644 --- a/locales/bs/browser/browser/preferences/zen-preferences.ftl +++ b/locales/bs/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/bs/browser/browser/zen-boosts.ftl b/locales/bs/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/bs/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ca/browser/browser/preferences/zen-preferences.ftl b/locales/ca/browser/browser/preferences/zen-preferences.ftl index 4b9b2c758..b7477fb97 100644 --- a/locales/ca/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ca/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Canvia a l'espai de treball 9 zen-workspace-shortcut-switch-10 = Canvia a l'espai de treball 10 zen-workspace-shortcut-forward = Espai de treball següent zen-workspace-shortcut-backward = Espai de treball anterior +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Commuta l'amplada de la barra lateral zen-pinned-tab-shortcut-reset = Restableix la pestanya fixada a l'URL fixat zen-split-view-shortcut-grid = Commuta la quadrícula de la vista dividida @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Commuta l'accessibilitat zen-close-all-unpinned-tabs-shortcut = Tanca totes les pestanyes no fixades zen-new-unsynced-window-shortcut = Nova finestra en blanc zen-duplicate-tab-shortcut = Duplica la pestanya +zen-key-find-selection = Find Selection diff --git a/locales/ca/browser/browser/zen-boosts.ftl b/locales/ca/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..877c5afb2 --- /dev/null +++ b/locales/ca/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Reanomena la millora +zen-boost-edit-shuffle = + .label = Barreja les vibracions +zen-boost-edit-reset = + .label = Restableix totes les edicions +zen-boost-edit-delete = + .label = Suprimeix la millora +zen-boost-size = Mida +zen-boost-case = Case +zen-boost-zap = Amaga +zen-boost-code = Codi +zen-boost-back = Enrere +zen-boost-shuffle = + .tooltiptext = Barreja les configuracions de millora +zen-boost-invert = + .tooltiptext = Inversió intel·ligent dels colors +zen-boost-controls = + .tooltiptext = Controls de color avançats +zen-boost-disable = + .tooltiptext = Desactiva els ajustos de color +zen-boost-text-case-toggle = + .tooltiptext = Commuta majúscules/minúscules +zen-boost-css-picker = + .tooltiptext = Trieu el selector +zen-boost-css-inspector = + .tooltiptext = Obre l'inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brillantor +zen-bootst-color-original-saturation = Saturació original +zen-add-zap-helper = Feu clic als elements de la pàgina per amagar-los +zen-remove-zap-helper = ← Feu clic per mostrar +zen-select-this = Insereix un selector per a això +zen-select-related = Insereix un selector per a elements relacionats +zen-select-cancel = Cancel·la +zen-zap-this = Amaga això +zen-zap-related = Amaga tots els elements relacionats +zen-zap-cancel = Cancel·la +zen-zap-done = Fet +zen-unzap-tooltip = + { $elementCount -> + [0] No hi ha elements amagats + [1] { $elementCount } element amagat + *[other] { $elementCount } elements amagats + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = S'ha exportat la millora! +zen-site-data-boosts = Millores +zen-site-data-create-boost = + .tooltiptext = Creu una nova millora +zen-boost-rename-boost-prompt = Voleu reanomenar la millora? diff --git a/locales/cs/browser/browser/preferences/zen-preferences.ftl b/locales/cs/browser/browser/preferences/zen-preferences.ftl index fdacf7348..97baced60 100644 --- a/locales/cs/browser/browser/preferences/zen-preferences.ftl +++ b/locales/cs/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Přepnout na pracovní prostor 9 zen-workspace-shortcut-switch-10 = Přepnout do pracovního prostoru 10 zen-workspace-shortcut-forward = Přeposlat pracovní prostor zen-workspace-shortcut-backward = Zpětný pracovní prostor +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Přepnout šířku postranního panelu zen-pinned-tab-shortcut-reset = Obnovit připnuté záložky na připnuté URL zen-split-view-shortcut-grid = Přepnout rozdělený pohled v mřížce @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Přepnout přístupnost zen-close-all-unpinned-tabs-shortcut = Zavřít všechny nepřipnuté panely zen-new-unsynced-window-shortcut = Nové nesynchronizované okno zen-duplicate-tab-shortcut = Duplikovat panel +zen-key-find-selection = Find Selection diff --git a/locales/cs/browser/browser/zen-boosts.ftl b/locales/cs/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/cs/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/cy/browser/browser/preferences/zen-preferences.ftl b/locales/cy/browser/browser/preferences/zen-preferences.ftl index 080a9aa69..2a24fed35 100644 --- a/locales/cy/browser/browser/preferences/zen-preferences.ftl +++ b/locales/cy/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Symud i Gofod Gwaith 9 zen-workspace-shortcut-switch-10 = Symud i Gofod Gwaith 10 zen-workspace-shortcut-forward = Gofod Gwaith Ymlaen zen-workspace-shortcut-backward = Gofod Gwaith Nôl +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toglo Lled y Bar Ochr zen-pinned-tab-shortcut-reset = Ailosod y Tab wedi'i Binio i URL wedi'i Binio zen-split-view-shortcut-grid = Toglo Grid Golwg Hollt @@ -317,4 +318,5 @@ zen-devtools-toggle-dom-shortcut = Toglo DOM zen-devtools-toggle-accessibility-shortcut = Toglo Hygyrchedd zen-close-all-unpinned-tabs-shortcut = Cau Pob Tab Heb ei Binio zen-new-unsynced-window-shortcut = Ffenestr Wag Newydd -zen-duplicate-tab-shortcut = Duplicate Tab +zen-duplicate-tab-shortcut = Tab Dyblyg +zen-key-find-selection = Find Selection diff --git a/locales/cy/browser/browser/zen-boosts.ftl b/locales/cy/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/cy/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/cy/browser/browser/zen-general.ftl b/locales/cy/browser/browser/zen-general.ftl index aa8a8074e..752f932a3 100644 --- a/locales/cy/browser/browser/zen-general.ftl +++ b/locales/cy/browser/browser/zen-general.ftl @@ -50,7 +50,7 @@ zen-pinned-tab-replaced = Mae URL y tab wedi'i binio wedi'i newid i'r URL gyfred zen-tabs-renamed = Mae'r tab wedi cael ei ailenwi'n llwyddiannus! zen-background-tab-opened-toast = Tab cefndir newydd wedi'i agor! zen-workspace-renamed-toast = Mae'r Man Gwaith wedi cael ei ailenwi'n llwyddiannus! -zen-split-view-limit-toast = Can't add more panels to the split view! +zen-split-view-limit-toast = Methu ychwanegu mwy o baneli at y golwg hollt! zen-toggle-compact-mode-button = .label = Modd Cryno .tooltiptext = Togglo Modd Cryno diff --git a/locales/cy/browser/browser/zen-split-view.ftl b/locales/cy/browser/browser/zen-split-view.ftl index e0aa8889e..34035ddca 100644 --- a/locales/cy/browser/browser/zen-split-view.ftl +++ b/locales/cy/browser/browser/zen-split-view.ftl @@ -5,9 +5,9 @@ tab-zen-split-tabs = .label = { $tabCount -> - [-1] Split out tab - [1] Add split view... - *[other] Join { $tabCount } Tabs + [-1] Rhannu tab + [1] Ychwanegu golwg hollt... + *[other] Uno { $tabCount } Tab } .accesskey = H zen-split-link = diff --git a/locales/cy/browser/browser/zen-vertical-tabs.ftl b/locales/cy/browser/browser/zen-vertical-tabs.ftl index 688e6aa86..b2e15ef5f 100644 --- a/locales/cy/browser/browser/zen-vertical-tabs.ftl +++ b/locales/cy/browser/browser/zen-vertical-tabs.ftl @@ -18,8 +18,8 @@ zen-toolbar-context-compact-mode-hide-both = .label = Cuddio'r ddau .accesskey = C zen-toolbar-context-move-to-folder = - .label = Move to Folder... - .accesskey = M + .label = Symud i Ffolder... + .accesskey = S zen-toolbar-context-new-folder = .label = Ffolder Newydd .accesskey = N diff --git a/locales/da/browser/browser/preferences/zen-preferences.ftl b/locales/da/browser/browser/preferences/zen-preferences.ftl index c710dc69c..9e90de776 100644 --- a/locales/da/browser/browser/preferences/zen-preferences.ftl +++ b/locales/da/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Skift til arbejdsområde 9 zen-workspace-shortcut-switch-10 = Skift til arbejdsområde 10 zen-workspace-shortcut-forward = Fremad Arbejdsområde zen-workspace-shortcut-backward = Bagudrettet Arbejdsrum +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Skift sidepanelets bredde zen-pinned-tab-shortcut-reset = Nulstil fastgjort fane til fastgjort URL zen-split-view-shortcut-grid = Opdelt visning i gitter til/fra @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Vis/skjul Tilgængelighed zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/da/browser/browser/zen-boosts.ftl b/locales/da/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/da/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/de/browser/browser/preferences/zen-preferences.ftl b/locales/de/browser/browser/preferences/zen-preferences.ftl index 86aff9c81..d58554d05 100644 --- a/locales/de/browser/browser/preferences/zen-preferences.ftl +++ b/locales/de/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Zu Arbeitsbereich 9 wechseln zen-workspace-shortcut-switch-10 = Zu Arbeitsbereich 10 wechseln zen-workspace-shortcut-forward = Zum nächsten Arbeitsbereich wechseln zen-workspace-shortcut-backward = Zum vorherigen Arbeitsbereich wechseln +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Seitenleisten-Breite umschalten zen-pinned-tab-shortcut-reset = Angehefteten Tab zurücksetzen zen-split-view-shortcut-grid = Raster-Layout für geteilte Ansicht umschalten @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Barrierefreiheit umschalten zen-close-all-unpinned-tabs-shortcut = Alle nicht angehefteten Tabs schließen zen-new-unsynced-window-shortcut = Neues leeres Fenster zen-duplicate-tab-shortcut = Tab duplizieren +zen-key-find-selection = Find Selection diff --git a/locales/de/browser/browser/zen-boosts.ftl b/locales/de/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..21d9907ab --- /dev/null +++ b/locales/de/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Boost umbenennen +zen-boost-edit-shuffle = + .label = Vibes mischen +zen-boost-edit-reset = + .label = Alle Änderungen zurücksetzen +zen-boost-edit-delete = + .label = Boost löschen +zen-boost-size = Größe +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Zurück +zen-boost-shuffle = + .tooltiptext = Boost-Einstellungen mischen +zen-boost-invert = + .tooltiptext = Farben intelligent invertieren +zen-boost-controls = + .tooltiptext = Erweiterte Farbeinstellungen +zen-boost-disable = + .tooltiptext = Farbanpassungen deaktivieren +zen-boost-text-case-toggle = + .tooltiptext = Schreibweise umschalten +zen-boost-css-picker = + .tooltiptext = Selektor auswählen +zen-boost-css-inspector = + .tooltiptext = Inspektor öffnen +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Helligkeit +zen-bootst-color-original-saturation = Ausgangssättigung +zen-add-zap-helper = Klicke auf Elemente auf der Seite, um sie mit Zap zu markieren +zen-remove-zap-helper = ← Erneut klicken zum Wiederherstellen +zen-select-this = Selektor für dieses Element einfügen +zen-select-related = Selektor für verwandte Elemente einfügen +zen-select-cancel = Abbrechen +zen-zap-this = Dieses entfernen +zen-zap-related = Alle verwandten Elemente entfernen +zen-zap-cancel = Abbrechen +zen-zap-done = Fertig +zen-unzap-tooltip = + { $elementCount -> + [0] Keine Elemente entfernt + [1] { $elementCount } Element entfernt + *[other] { $elementCount } Elemente entfernt + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exportiert! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Neuen Boost erstellen +zen-boost-rename-boost-prompt = Boost umbenennen? diff --git a/locales/el/browser/browser/preferences/zen-preferences.ftl b/locales/el/browser/browser/preferences/zen-preferences.ftl index d46b987d2..61e2f7bdd 100644 --- a/locales/el/browser/browser/preferences/zen-preferences.ftl +++ b/locales/el/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Εναλλαγή στο Χώρο Εργασί zen-workspace-shortcut-switch-10 = Εναλλαγή στο Χώρο Εργασίας 10 zen-workspace-shortcut-forward = Προώθηση Χώρου Εργασίας zen-workspace-shortcut-backward = Πίσω Χώρος Εργασίας +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Εναλλαγή Πλάτους Πλευρικής Μπάρας zen-pinned-tab-shortcut-reset = Επαναφορά Καρφιτσωμένης Καρτέλας στο Καρφιτσωμένο URL zen-split-view-shortcut-grid = Εναλλαγή Πλέγματος Διαιρεμένης Προβολής @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Εναλλαγή Προσβασιμ zen-close-all-unpinned-tabs-shortcut = Κλείσιμο όλων των μη καρφιτσωμένων καρτελών zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Διπλασιασμός Καρτέλας +zen-key-find-selection = Find Selection diff --git a/locales/el/browser/browser/zen-boosts.ftl b/locales/el/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/el/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/el/browser/browser/zen-general.ftl b/locales/el/browser/browser/zen-general.ftl index 2966c4ca8..7e9c8c2ff 100644 --- a/locales/el/browser/browser/zen-general.ftl +++ b/locales/el/browser/browser/zen-general.ftl @@ -7,7 +7,7 @@ unified-extensions-description = Οι επεκτάσεις χρησιμοποι tab-context-zen-reset-pinned-tab = .label = { $isEssential -> - [true] Επαναφορά Απαραίτητης Καρτέλας + [true] Επαναφορά Απαραίτητης Καρτέλας *[false] Επαναφορά Καρφιτσωμένης Καρτέλας } .accesskey = R @@ -21,7 +21,7 @@ tab-context-zen-remove-essential = tab-context-zen-replace-pinned-url-with-current = .label = { $isEssential -> - [true] Αντικατάσταση Απαραίτητης διεύθυνσής με την τωρινή + [true] Αντικατάσταση Απαραίτητης διεύθυνσής με την τωρινή *[false] Αντικατάσταση Καρφιτσωμένης διεύθυνσής με την τωρινή } .accesskey = C diff --git a/locales/en-GB/browser/browser/preferences/zen-preferences.ftl b/locales/en-GB/browser/browser/preferences/zen-preferences.ftl index a7e3f3c3f..295f8542e 100644 --- a/locales/en-GB/browser/browser/preferences/zen-preferences.ftl +++ b/locales/en-GB/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/en-GB/browser/browser/zen-boosts.ftl b/locales/en-GB/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/en-GB/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/es-ES/browser/browser/preferences/zen-preferences.ftl b/locales/es-ES/browser/browser/preferences/zen-preferences.ftl index 7e81a58a4..ac75637f5 100644 --- a/locales/es-ES/browser/browser/preferences/zen-preferences.ftl +++ b/locales/es-ES/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Cambiar a espacio de trabajo 9 zen-workspace-shortcut-switch-10 = Cambiar a espacio de trabajo 10 zen-workspace-shortcut-forward = Espacio de trabajo siguiente zen-workspace-shortcut-backward = Espacio de trabajo anterior +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Cambiar el ancho de la barra lateral zen-pinned-tab-shortcut-reset = Restablecer pestaña fijada a la URL fijada zen-split-view-shortcut-grid = Cambiar a vista dividida en cuadrícula @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Alternar accesibilidad zen-close-all-unpinned-tabs-shortcut = Cerrar todas las pestañas sin fijar zen-new-unsynced-window-shortcut = Nueva ventana no sincronizada zen-duplicate-tab-shortcut = Duplicar pestaña +zen-key-find-selection = Find Selection diff --git a/locales/es-ES/browser/browser/zen-boosts.ftl b/locales/es-ES/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..dfb4cdbd4 --- /dev/null +++ b/locales/es-ES/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Renombrar Boost +zen-boost-edit-shuffle = + .label = Ambiente aleatorio +zen-boost-edit-reset = + .label = Restablecer todas las ediciones +zen-boost-edit-delete = + .label = Borrar Boost +zen-boost-size = Tamaño +zen-boost-case = Case +zen-boost-zap = Borrar +zen-boost-code = Código +zen-boost-back = Atrás +zen-boost-shuffle = + .tooltiptext = Ajustes de Boost aleatorios +zen-boost-invert = + .tooltiptext = Invertir colores +zen-boost-controls = + .tooltiptext = Controles de color avanzados +zen-boost-disable = + .tooltiptext = Desactivar ajustes de color +zen-boost-text-case-toggle = + .tooltiptext = Alternar mayúsculas/minúsculas +zen-boost-css-picker = + .tooltiptext = Escoger selector +zen-boost-css-inspector = + .tooltiptext = Abrir inspector +zen-bootst-color-contrast = Contraste +zen-bootst-color-brightness = Brillo +zen-bootst-color-original-saturation = Saturación original +zen-add-zap-helper = Haga clic en los elementos de la página para borrarlos +zen-remove-zap-helper = ← Clic para deshacer +zen-select-this = Insertar selector para esto +zen-select-related = Insertar selector para relacionados +zen-select-cancel = Cancelar +zen-zap-this = Borrar esto +zen-zap-related = Borrar todos los elementos relacionados +zen-zap-cancel = Cancelar +zen-zap-done = Hecho +zen-unzap-tooltip = + { $elementCount -> + [0] Ningún elemento borrado + [1] { $elementCount } elemento borrado + *[other] { $elementCount } elementos borrados + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = ¡Boost exportado! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Crear nuevo Boost +zen-boost-rename-boost-prompt = ¿Renombrar Boost? diff --git a/locales/et/browser/browser/preferences/zen-preferences.ftl b/locales/et/browser/browser/preferences/zen-preferences.ftl index c15f1b56d..9aa14af82 100644 --- a/locales/et/browser/browser/preferences/zen-preferences.ftl +++ b/locales/et/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Lülitu tööruumi 9 zen-workspace-shortcut-switch-10 = Lülitu tööruumi 10 zen-workspace-shortcut-forward = Järgmine tööruum zen-workspace-shortcut-backward = Eelmine tööruum +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Laienda/ahenda külgriba zen-pinned-tab-shortcut-reset = Lähtesta püsikaart algsele URL-ile zen-split-view-shortcut-grid = Lülita jaotatud vaate ruudustik sisse/välja @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Lülita ligipääsetavuse sektsioon zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/et/browser/browser/zen-boosts.ftl b/locales/et/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/et/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/eu/browser/browser/preferences/zen-preferences.ftl b/locales/eu/browser/browser/preferences/zen-preferences.ftl index 728fc5f2e..cc6082d37 100644 --- a/locales/eu/browser/browser/preferences/zen-preferences.ftl +++ b/locales/eu/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Blank Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/eu/browser/browser/zen-boosts.ftl b/locales/eu/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/eu/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/fa/browser/browser/preferences/zen-preferences.ftl b/locales/fa/browser/browser/preferences/zen-preferences.ftl index 8f63791ca..7ed3131a5 100644 --- a/locales/fa/browser/browser/preferences/zen-preferences.ftl +++ b/locales/fa/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/fa/browser/browser/zen-boosts.ftl b/locales/fa/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/fa/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/fi/browser/browser/preferences/zen-preferences.ftl b/locales/fi/browser/browser/preferences/zen-preferences.ftl index 7f518ecc6..08f86534f 100644 --- a/locales/fi/browser/browser/preferences/zen-preferences.ftl +++ b/locales/fi/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Vaihda työtilaan 9 zen-workspace-shortcut-switch-10 = Vaihda työtilaan 10 zen-workspace-shortcut-forward = Eteenpäin Työtila zen-workspace-shortcut-backward = Taaksepäin Työtila +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Vaihda Sivupalkin Leveys zen-pinned-tab-shortcut-reset = Nollaa kiinnitetty välilehti kiinnitettyyn URL-osoitteeseen zen-split-view-shortcut-grid = Vaihda Jaettu Näkymä ruudukkoon @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Vaihda Esteettömyystilaan zen-close-all-unpinned-tabs-shortcut = Sulje kaikki kiinnittämättömät välilehdet zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/fi/browser/browser/zen-boosts.ftl b/locales/fi/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/fi/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/fr/browser/browser/preferences/zen-preferences.ftl b/locales/fr/browser/browser/preferences/zen-preferences.ftl index f2deb00b8..d5828a59c 100644 --- a/locales/fr/browser/browser/preferences/zen-preferences.ftl +++ b/locales/fr/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Basculer vers l’espace de travail 9 zen-workspace-shortcut-switch-10 = Basculer vers l’espace de travail 10 zen-workspace-shortcut-forward = Espace de travail suivant zen-workspace-shortcut-backward = Espace de travail précédent +zen-workspace-shortcut-create = Créer un nouvel espace de travail zen-sidebar-shortcut-toggle = Afficher/Masquer la largeur de la barre latérale zen-pinned-tab-shortcut-reset = Réinitialiser l’onglet épinglé à l’URL d’origine zen-split-view-shortcut-grid = Activer/désactiver la vue fractionnée en grille @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Afficher l’onglet Accessibilité zen-close-all-unpinned-tabs-shortcut = Fermer tous les onglets non épinglés zen-new-unsynced-window-shortcut = Nouvelle fenêtre vierge zen-duplicate-tab-shortcut = Dupliquer l'onglet +zen-key-find-selection = Rechercher dans la sélection diff --git a/locales/fr/browser/browser/zen-boosts.ftl b/locales/fr/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..d06ad7610 --- /dev/null +++ b/locales/fr/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Renommer le Boost +zen-boost-edit-shuffle = + .label = Ambiances aléatoires +zen-boost-edit-reset = + .label = Réinitialiser toutes les modifications +zen-boost-edit-delete = + .label = Supprimer le Boost +zen-boost-size = Taille +zen-boost-case = Casse +zen-boost-zap = Masquer +zen-boost-code = Code +zen-boost-back = Retour +zen-boost-shuffle = + .tooltiptext = Mélanger les paramètres du Boost +zen-boost-invert = + .tooltiptext = Inversion intelligente des couleurs +zen-boost-controls = + .tooltiptext = Contrôles de couleurs avancés +zen-boost-disable = + .tooltiptext = Désactiver les ajustements de couleur +zen-boost-text-case-toggle = + .tooltiptext = Activer/désactiver la casse +zen-boost-css-picker = + .tooltiptext = Choisir le sélecteur +zen-boost-css-inspector = + .tooltiptext = Ouvrir l'inspecteur +zen-bootst-color-contrast = Contraste +zen-bootst-color-brightness = Luminosité +zen-bootst-color-original-saturation = Saturation originale +zen-add-zap-helper = Cliquez sur des éléments de la page pour les zapper +zen-remove-zap-helper = ← Cliquez pour démasquer +zen-select-this = Insérer un sélecteur pour ceci +zen-select-related = Insérer un sélecteur pour les correspondances +zen-select-cancel = Annuler +zen-zap-this = Masquer ceci +zen-zap-related = Masquer tous les éléments liés +zen-zap-cancel = Annuler +zen-zap-done = Terminé +zen-unzap-tooltip = + { $elementCount -> + [0] Aucun élément masqué + [1] { $elementCount } élément masqué + *[other] { $elementCount } éléments masqués + } +zen-boost-save = + .label = Exporter le Boost +zen-boost-load = + .label = Importer un Boost +zen-panel-ui-boosts-exported-message = Boost exporté ! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Créer un nouveau Boost +zen-boost-rename-boost-prompt = Renommer le Boost ? diff --git a/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl b/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl index 10f96fedd..45215b2fa 100644 --- a/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Athraigh go Spás Oibre 9 zen-workspace-shortcut-switch-10 = Athraigh go Spás Oibre 10 zen-workspace-shortcut-forward = Spás Oibre Ar Aghaidh zen-workspace-shortcut-backward = Spás Oibre Ar Ais +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Leithead an Bharra Taoibh a Scoránaigh zen-pinned-tab-shortcut-reset = Athshocraigh an Cluaisín Prionáilte go dtí an URL Prionáilte zen-split-view-shortcut-grid = Eangach Radharc Scoilte a Athsholáthar @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Scoránaigh Inrochtaineacht zen-close-all-unpinned-tabs-shortcut = Dún Gach Cluaisín Gan Phionáil zen-new-unsynced-window-shortcut = Fuinneog Nua Neamhshioncrónaithe zen-duplicate-tab-shortcut = Cluaisín Dúblach +zen-key-find-selection = Find Selection diff --git a/locales/ga-IE/browser/browser/zen-boosts.ftl b/locales/ga-IE/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..ecf56e102 --- /dev/null +++ b/locales/ga-IE/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Athainmnigh an Treisiú +zen-boost-edit-shuffle = + .label = Vibes Measctha +zen-boost-edit-reset = + .label = Athshocraigh Gach Eagarthóireacht +zen-boost-edit-delete = + .label = Scrios an Treisiú +zen-boost-size = Méid +zen-boost-case = Case +zen-boost-zap = Zapáil +zen-boost-code = Cód +zen-boost-back = Ar ais +zen-boost-shuffle = + .tooltiptext = Socruithe Treisithe Measctha +zen-boost-invert = + .tooltiptext = Dathanna Inbhéartaithe Cliste +zen-boost-controls = + .tooltiptext = Rialuithe Dath Ardleibhéil +zen-boost-disable = + .tooltiptext = Díchumasaigh Coigeartuithe Datha +zen-boost-text-case-toggle = + .tooltiptext = Cás Téacs a Athrú +zen-boost-css-picker = + .tooltiptext = Roghnóir Roghnaigh +zen-boost-css-inspector = + .tooltiptext = Oscail an Cigire +zen-bootst-color-contrast = Codarsnacht +zen-bootst-color-brightness = Gile +zen-bootst-color-original-saturation = Sáithiú Bunaidh +zen-add-zap-helper = Cliceáil ar eilimintí ar an leathanach chun iad a Zapáil +zen-remove-zap-helper = ← Cliceáil chun Dízipáil +zen-select-this = Cuir roghnóir isteach don seo +zen-select-related = Cuir isteach roghnóir le haghaidh gaolmhar +zen-select-cancel = Cealaigh +zen-zap-this = Zapáil seo +zen-zap-related = Zapáil gach eilimint ghaolmhar +zen-zap-cancel = Cealaigh +zen-zap-done = Déanta +zen-unzap-tooltip = + { $elementCount -> + [0] Gan aon eilimintí Zapáilte + [1] { $elementCount } eilimint Zapáilte + *[other] { $elementCount } eilimintí Zapáilte + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Borradh easpórtáilte! +zen-site-data-boosts = Borradh +zen-site-data-create-boost = + .tooltiptext = Cruthaigh borradh nua +zen-boost-rename-boost-prompt = Athainmnigh Borradh? diff --git a/locales/he/browser/browser/preferences/zen-preferences.ftl b/locales/he/browser/browser/preferences/zen-preferences.ftl index fc21b7eb8..974be8fd7 100644 --- a/locales/he/browser/browser/preferences/zen-preferences.ftl +++ b/locales/he/browser/browser/preferences/zen-preferences.ftl @@ -47,7 +47,7 @@ zen-tabs-select-recently-used-on-close = zen-tabs-close-on-back-with-no-history = .label = סגירת הלשונית ומעבר ללשונית האם שלה (או ללשונית שהכי נמצאת בשימוש) בעת לחיצה על כפתור החזרה כשאין היסטוריית גלישה zen-settings-workspaces-sync-unpinned-tabs = - .label = Sync only pinned tabs in workspaces + .label = סנכרון הלשוניות המוצמדות של מרחבי העבודה בלבד zen-tabs-cycle-by-attribute = .label = הקיצור Ctrl+Tab מחליף בין לשוניות חיוניות ולשוניות במרחב העבודה בלבד zen-tabs-cycle-ignore-pending-tabs = @@ -139,7 +139,7 @@ zen-themes-auto-update = zen-settings-workspaces-force-container-tabs-to-workspace = .label = העברה למרחב עבודה שבו מוגדרת מגירת ברירת מחדל לפתיחת לשוניות במגירה zen-theme-marketplace-link = כניסה לחנות -zen-dark-theme-styles-header = עיצובים כהים +zen-dark-theme-styles-header = ערכות נושא בסגנון כ zen-dark-theme-styles-description = אפשר לשנות את העיצוב הכהה לטעמך zen-dark-theme-styles-amoled = עיצוב לילה zen-dark-theme-styles-default = עיצוב לילה ברירת מחדל @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = מעבר למרחב עבודה 9 zen-workspace-shortcut-switch-10 = מעבר למרחב עבודה 10 zen-workspace-shortcut-forward = העברת מרחב העבודה קדימה zen-workspace-shortcut-backward = העברת מרחב העבודה אחורה +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = הפעל/כבה עובי של סרגל צד zen-pinned-tab-shortcut-reset = איפוס הלשונית המוצמדת לכתובת המוצמדת zen-split-view-shortcut-grid = הפעל/כבה תצוגה מפוצלת רשת @@ -304,7 +305,7 @@ zen-bookmark-show-sidebar-shortcut = הצג סרגל צד סימניות zen-bookmark-show-toolbar-shortcut = הצג סרגל סימניות zen-devtools-toggle-shortcut = הפעל/כבה DevTools zen-devtools-toggle-browser-toolbox-shortcut = הפעל/כבה את ארגז הכלים של הדפדפן -zen-devtools-toggle-browser-console-shortcut = הפעל/כבה קונסולת דפדפן +zen-devtools-toggle-browser-console-shortcut = הפעלת/כיבוי מסוף דפדפן zen-devtools-toggle-responsive-design-mode-shortcut = הפעלת/כיבוי מצב עיצוב מסתגל zen-devtools-toggle-inspector-shortcut = הפעל/כבה בודק zen-devtools-toggle-web-console-shortcut = הפעל/כבה קונסולת אתר @@ -317,4 +318,5 @@ zen-devtools-toggle-dom-shortcut = הפעל/כבה DOM zen-devtools-toggle-accessibility-shortcut = הפעל/כבה נגישות zen-close-all-unpinned-tabs-shortcut = סגירת כל הלשוניות שאינן מוצמדות zen-new-unsynced-window-shortcut = חלון לא מסונכרן חדש -zen-duplicate-tab-shortcut = Duplicate Tab +zen-duplicate-tab-shortcut = שכפול לשונית +zen-key-find-selection = Find Selection diff --git a/locales/he/browser/browser/zen-boosts.ftl b/locales/he/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..3f9d31f62 --- /dev/null +++ b/locales/he/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = צבעים הפוכים חכמים +zen-boost-controls = + .tooltiptext = בקרת צבע מתקדמת +zen-boost-disable = + .tooltiptext = השבתת התאמות צבע +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = ניגודיות +zen-bootst-color-brightness = בהירות +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = ביטול +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = ביטול +zen-zap-done = סיום +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/he/browser/browser/zen-general.ftl b/locales/he/browser/browser/zen-general.ftl index 0cf72f91c..dd85f9dc0 100644 --- a/locales/he/browser/browser/zen-general.ftl +++ b/locales/he/browser/browser/zen-general.ftl @@ -39,7 +39,7 @@ pictureinpicture-minimize-btn = .tooltip = מזעור zen-panel-ui-gradient-generator-custom-color = צבע מותאם אישית zen-copy-current-url-confirmation = הכתובת הנוכחית הועתקה! -zen-copy-current-url-as-markdown-confirmation = Copied current URL as Markdown! +zen-copy-current-url-as-markdown-confirmation = הכתובת הנוכחית הועתקה בתור Markdown! zen-general-cancel-label = .label = ביטול zen-general-confirm = @@ -48,7 +48,7 @@ zen-pinned-tab-replaced = כתובת הלשונית המוצמדת הוחלפה zen-tabs-renamed = שם הלשונית השתנה בהצלחה! zen-background-tab-opened-toast = לשונית נפתחה ברקע! zen-workspace-renamed-toast = שם מרחב העבודה השתנה בהצלחה! -zen-split-view-limit-toast = Can't add more panels to the split view! +zen-split-view-limit-toast = אי אפשר להוסיף עוד לוחיות לתצוגה המפוצלת! zen-toggle-compact-mode-button = .label = מצב חסכוני .tooltiptext = הפעלת/כיבוי מצב חסכוני @@ -122,4 +122,4 @@ zen-window-sync-migration-dialog-message = Zen עכשיו מסנכרן חלונ zen-window-sync-migration-dialog-learn-more = מידע נוסף zen-window-sync-migration-dialog-accept = הבנתי zen-appmenu-new-blank-window = - .label = New blank window + .label = חלון ריק חדש diff --git a/locales/he/browser/browser/zen-menubar.ftl b/locales/he/browser/browser/zen-menubar.ftl index fbf94053c..298dec51b 100644 --- a/locales/he/browser/browser/zen-menubar.ftl +++ b/locales/he/browser/browser/zen-menubar.ftl @@ -19,4 +19,4 @@ zen-menubar-appearance-light = zen-menubar-appearance-dark = .label = כהה zen-menubar-new-blank-window = - .label = New Blank Window + .label = חלון ריק חדש diff --git a/locales/he/browser/browser/zen-vertical-tabs.ftl b/locales/he/browser/browser/zen-vertical-tabs.ftl index 28121137b..2ee834f31 100644 --- a/locales/he/browser/browser/zen-vertical-tabs.ftl +++ b/locales/he/browser/browser/zen-vertical-tabs.ftl @@ -18,8 +18,8 @@ zen-toolbar-context-compact-mode-hide-both = .label = הסתרת שני הסרגלים .accesskey = י zen-toolbar-context-move-to-folder = - .label = Move to Folder... - .accesskey = M + .label = העברה לתיקייה... + .accesskey = צ zen-toolbar-context-new-folder = .label = תיקייה חדשה .accesskey = מ diff --git a/locales/he/browser/browser/zen-workspaces.ftl b/locales/he/browser/browser/zen-workspaces.ftl index 57e9ce821..e35618442 100644 --- a/locales/he/browser/browser/zen-workspaces.ftl +++ b/locales/he/browser/browser/zen-workspaces.ftl @@ -10,7 +10,7 @@ zen-panel-ui-workspaces-create = zen-panel-ui-folder-create = .label = יצירת תיקייה zen-panel-ui-live-folder-create = - .label = Live Folder + .label = תיקייה חיה zen-panel-ui-new-empty-split = .label = פיצול חדש zen-workspaces-panel-context-delete = diff --git a/locales/hu/browser/browser/preferences/zen-preferences.ftl b/locales/hu/browser/browser/preferences/zen-preferences.ftl index 02da4b7a0..d0cc5bbce 100644 --- a/locales/hu/browser/browser/preferences/zen-preferences.ftl +++ b/locales/hu/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Kilencedik munkakörnyezetre váltás zen-workspace-shortcut-switch-10 = Tizedik munkakörnyezetre váltás zen-workspace-shortcut-forward = Következő munkakörnyezet zen-workspace-shortcut-backward = Előző munkakörnyezet +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Oldalsáv szélességének váltása zen-pinned-tab-shortcut-reset = Rögzített lap visszaállítása rögzítéskori URL-re zen-split-view-shortcut-grid = Osztott nézet grid ki-/bekapcsolása @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Hozzáférhetőség kapcsolása zen-close-all-unpinned-tabs-shortcut = Összes rögzítetlen lap bezárása zen-new-unsynced-window-shortcut = Új szinkronizálatlan ablak zen-duplicate-tab-shortcut = Lap duplikálása +zen-key-find-selection = Find Selection diff --git a/locales/hu/browser/browser/zen-boosts.ftl b/locales/hu/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..2cdbb4a75 --- /dev/null +++ b/locales/hu/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Boost átnevezése +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Minden módosítás visszaállítása +zen-boost-edit-delete = + .label = Boost törlése +zen-boost-size = Méret +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Kód +zen-boost-back = Vissza +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Színek intelligens invertálása +zen-boost-controls = + .tooltiptext = Speciális színbeállítások +zen-boost-disable = + .tooltiptext = Színbeállítások letiltása +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Vizsgáló megnyitása +zen-bootst-color-contrast = Kontraszt +zen-bootst-color-brightness = Fényerő +zen-bootst-color-original-saturation = Eredeti szaturáció +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Mégse +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Mégse +zen-zap-done = Kész +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boostok exportálva! +zen-site-data-boosts = Boostok +zen-site-data-create-boost = + .tooltiptext = Új boost létrehozása +zen-boost-rename-boost-prompt = Boost átnevezése? diff --git a/locales/id/browser/browser/preferences/zen-preferences.ftl b/locales/id/browser/browser/preferences/zen-preferences.ftl index 7f5e29879..61fb563cf 100644 --- a/locales/id/browser/browser/preferences/zen-preferences.ftl +++ b/locales/id/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Beralih ke Ruang Kerja 9 zen-workspace-shortcut-switch-10 = Beralih ke Ruang Kerja 10 zen-workspace-shortcut-forward = Ruang Kerja setelahnya zen-workspace-shortcut-backward = Ruang Kerja sebelumnya +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Peralihan lebar Bilah sisi zen-pinned-tab-shortcut-reset = Setel ulang Tab yang Disematkan ke URL awal zen-split-view-shortcut-grid = Beralih ke Panel terbagi @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Ubah Aksesibilitas zen-close-all-unpinned-tabs-shortcut = Tutup Semua Tab yang Tidak Disematkan zen-new-unsynced-window-shortcut = Jendela Kosong Baru zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/id/browser/browser/zen-boosts.ftl b/locales/id/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/id/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/is/browser/browser/preferences/zen-preferences.ftl b/locales/is/browser/browser/preferences/zen-preferences.ftl index db2e11183..11ac037c8 100644 --- a/locales/is/browser/browser/preferences/zen-preferences.ftl +++ b/locales/is/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Skipta yfir á vinnusvæði 9 zen-workspace-shortcut-switch-10 = Skipta yfir á vinnusvæði 10 zen-workspace-shortcut-forward = Vinnusvæði áfram zen-workspace-shortcut-backward = Vinnusvæði afturábak +zen-workspace-shortcut-create = Búa til nýtt vinnusvæði zen-sidebar-shortcut-toggle = Víxla breidd hliðarspjalds zen-pinned-tab-shortcut-reset = Endursetja festan flipa á festa slóð zen-split-view-shortcut-grid = Víxla reitaskiptu klofnu yfirliti @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Víxla auðvelduðu aðgengi af/á zen-close-all-unpinned-tabs-shortcut = Loka öllum ófestum flipum zen-new-unsynced-window-shortcut = Nýr auður gluggi zen-duplicate-tab-shortcut = Tvítaka flipa +zen-key-find-selection = Finna valið diff --git a/locales/is/browser/browser/zen-boosts.ftl b/locales/is/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..52a18cd59 --- /dev/null +++ b/locales/is/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Endurnefna endurhönnun +zen-boost-edit-shuffle = + .label = Stokka áhrif +zen-boost-edit-reset = + .label = Frumstilla allar breytingar +zen-boost-edit-delete = + .label = Eyða endurhönnun +zen-boost-size = Stærð +zen-boost-case = Stafstaða +zen-boost-zap = Einangra (zap) +zen-boost-code = Kóði +zen-boost-back = Til baka +zen-boost-shuffle = + .tooltiptext = Stokka endurhönnunarstillingum +zen-boost-invert = + .tooltiptext = Snjall umsnúningur lita +zen-boost-controls = + .tooltiptext = Ítarlegar litastýringar +zen-boost-disable = + .tooltiptext = Gera litabreytingar óvirkar +zen-boost-text-case-toggle = + .tooltiptext = Víxla stafstöðu texta +zen-boost-css-picker = + .tooltiptext = Veljari +zen-boost-css-inspector = + .tooltiptext = Opna rýni +zen-bootst-color-contrast = Birtuskil +zen-bootst-color-brightness = Birtustig +zen-bootst-color-original-saturation = Upprunaleg litmettun +zen-add-zap-helper = Smelltu á atriði á síðunni til að einangra þau (zap) +zen-remove-zap-helper = ← Smelltu til að taka úr einangrun +zen-select-this = Setja inn veljara fyrir þetta +zen-select-related = Setja inn veljara fyrir skyld atriði +zen-select-cancel = Hætta við +zen-zap-this = Einangra þetta +zen-zap-related = Einangra öll skyld atriði +zen-zap-cancel = Hætta við +zen-zap-done = Lokið +zen-unzap-tooltip = + { $elementCount -> + [0] Engin einindi einangruð + [1] { $elementCount } einindi einangrað + *[other] { $elementCount } einindi einangruð + } +zen-boost-save = + .label = Flytja út endurhönnun +zen-boost-load = + .label = Flytja inn endurhönnun +zen-panel-ui-boosts-exported-message = Endurhönnun flutt út! +zen-site-data-boosts = Endurhannanir (boosts) +zen-site-data-create-boost = + .tooltiptext = Búa til nýja endurhönnun (boost) +zen-boost-rename-boost-prompt = Endurnefna endurhönnun? diff --git a/locales/it/browser/browser/preferences/zen-preferences.ftl b/locales/it/browser/browser/preferences/zen-preferences.ftl index 91ddbba1b..36a85b054 100644 --- a/locales/it/browser/browser/preferences/zen-preferences.ftl +++ b/locales/it/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Passa allo spazio di lavoro 9 zen-workspace-shortcut-switch-10 = Passa allo spazio di lavoro 10 zen-workspace-shortcut-forward = Spazio Successivo zen-workspace-shortcut-backward = Spazio Precedente +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Attiva/Disattiva Larghezza Barra Laterale zen-pinned-tab-shortcut-reset = Reimposta la scheda bloccata all'URL bloccata zen-split-view-shortcut-grid = Attiva/Disattiva Griglia Visualizzazione Dividi @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Attiva/Disattiva Accessibilità zen-close-all-unpinned-tabs-shortcut = Chiudi Tutte Le Schede Non Bloccate zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/it/browser/browser/zen-boosts.ftl b/locales/it/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/it/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ja/browser/browser/preferences/zen-preferences.ftl b/locales/ja/browser/browser/preferences/zen-preferences.ftl index feab7607a..63a8186a9 100644 --- a/locales/ja/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ja/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = ワークスペース9に切り替える zen-workspace-shortcut-switch-10 = ワークスペース10に切り替える zen-workspace-shortcut-forward = 次のワークスペースに移動 zen-workspace-shortcut-backward = 前のワークスペースへ移動 +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = サイドバーの幅を切り替える zen-pinned-tab-shortcut-reset = ピン留めされたタブをピン留めしたURLにリセット zen-split-view-shortcut-grid = 分割表示グリッドの切り替え @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = アクセシビリティの切り zen-close-all-unpinned-tabs-shortcut = ピン留めされていないすべてのタブを閉じる zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = タブを複製 +zen-key-find-selection = Find Selection diff --git a/locales/ja/browser/browser/zen-boosts.ftl b/locales/ja/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..5a5586994 --- /dev/null +++ b/locales/ja/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = ブーストの名前を変更 +zen-boost-edit-shuffle = + .label = バイブをシャッフル +zen-boost-edit-reset = + .label = すべての編集をリセット +zen-boost-edit-delete = + .label = ブーストを削除 +zen-boost-size = サイズ +zen-boost-case = Case +zen-boost-zap = ザップ +zen-boost-code = コード +zen-boost-back = 戻る +zen-boost-shuffle = + .tooltiptext = ブースト設定をシャッフル +zen-boost-invert = + .tooltiptext = スマートな色の反転 +zen-boost-controls = + .tooltiptext = 高度なカラーコントロール +zen-boost-disable = + .tooltiptext = 色の調整を無効にする +zen-boost-text-case-toggle = + .tooltiptext = テキストケースの切り替え +zen-boost-css-picker = + .tooltiptext = セレクターを選択 +zen-boost-css-inspector = + .tooltiptext = インスペクタを開く +zen-bootst-color-contrast = コントラスト +zen-bootst-color-brightness = 明るさ +zen-bootst-color-original-saturation = 元の彩度 +zen-add-zap-helper = Zap にページ上の要素をクリックします +zen-remove-zap-helper = ←クリックして解除 +zen-select-this = このセレクターを挿入 +zen-select-related = 関連するセレクターを挿入 +zen-select-cancel = キャンセル +zen-zap-this = これをZap +zen-zap-related = 関連するすべての要素をZap +zen-zap-cancel = キャンセル +zen-zap-done = 完了 +zen-unzap-tooltip = + { $elementCount -> + [0] 要素なし zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = ブーストがエクスポートされました! +zen-site-data-boosts = ブースト +zen-site-data-create-boost = + .tooltiptext = 新しいブーストを作成 +zen-boost-rename-boost-prompt = ブーストの名前を変更しますか? diff --git a/locales/ko/browser/browser/preferences/zen-preferences.ftl b/locales/ko/browser/browser/preferences/zen-preferences.ftl index a1f34396e..1a5b6544a 100644 --- a/locales/ko/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ko/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = 워크스페이스 9로 전환 zen-workspace-shortcut-switch-10 = 워크스페이스 10으로 전환 zen-workspace-shortcut-forward = 다음 워크스페이스로 zen-workspace-shortcut-backward = 이전 워크스페이스로 +zen-workspace-shortcut-create = 새 워크스페이스 생성 zen-sidebar-shortcut-toggle = 사이드바 넓이 켜기/끄기 zen-pinned-tab-shortcut-reset = 고정된 탭 URL 초기화 zen-split-view-shortcut-grid = 그리드 스플릿 뷰 전환 @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = 접근성 탭 전환 zen-close-all-unpinned-tabs-shortcut = 모든 고정되지 않은 탭 닫기 zen-new-unsynced-window-shortcut = 새 비동기화 창 zen-duplicate-tab-shortcut = 탭 복제 +zen-key-find-selection = 선택된 부분 찾기 diff --git a/locales/ko/browser/browser/zen-boosts.ftl b/locales/ko/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..1b49b35d9 --- /dev/null +++ b/locales/ko/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = 부스트 이름 변경 +zen-boost-edit-shuffle = + .label = 느낌 바꾸기 +zen-boost-edit-reset = + .label = 모든 수정 초기화 +zen-boost-edit-delete = + .label = 부스트 삭제 +zen-boost-size = 크기 +zen-boost-case = 케이스 +zen-boost-zap = 날리기 +zen-boost-code = 코드 +zen-boost-back = 뒤로 +zen-boost-shuffle = + .tooltiptext = 부스트 무작위 설정 +zen-boost-invert = + .tooltiptext = 자동 색 반전 +zen-boost-controls = + .tooltiptext = 고급 색 설정 +zen-boost-disable = + .tooltiptext = 색 변경 비활성화 +zen-boost-text-case-toggle = + .tooltiptext = 대문자 설정 전환 +zen-boost-css-picker = + .tooltiptext = 선택자 선택 +zen-boost-css-inspector = + .tooltiptext = 검사기 열기 +zen-bootst-color-contrast = 대비 +zen-bootst-color-brightness = 밝기 +zen-bootst-color-original-saturation = 원본 채도 +zen-add-zap-helper = 페이지 내의 요소를 클릭해서 날려버리세요 +zen-remove-zap-helper = ← 클릭하여 되살리기 +zen-select-this = 이 요소의 선택자 삽입 +zen-select-related = 연관된 요소의 선택자 삽입 +zen-select-cancel = 취소 +zen-zap-this = 이 요소 날리기 +zen-zap-related = 모든 관련된 요소 날리기 +zen-zap-cancel = 취소 +zen-zap-done = 완료 +zen-unzap-tooltip = + { $elementCount -> + [0] 요소가 날려지지 않았습니다 + [1] { $elementCount }개의 요소가 날아갔습니다 + *[other] { $elementCount }개의 요소가 날아갔습니다 + } +zen-boost-save = + .label = 부스트 내보내기 +zen-boost-load = + .label = 부스트 불러오기 +zen-panel-ui-boosts-exported-message = 부스트를 내보냈습니다! +zen-site-data-boosts = 부스트 +zen-site-data-create-boost = + .tooltiptext = 새 부스트 생성 +zen-boost-rename-boost-prompt = 부스트 이름을 수정하시겠습니까? diff --git a/locales/lt/browser/browser/preferences/zen-preferences.ftl b/locales/lt/browser/browser/preferences/zen-preferences.ftl index 47df9d551..e156f4da5 100644 --- a/locales/lt/browser/browser/preferences/zen-preferences.ftl +++ b/locales/lt/browser/browser/preferences/zen-preferences.ftl @@ -16,12 +16,12 @@ sync-engine-workspaces = .label = Darbo sritys .tooltiptext = Sinchronizuokite savo darbo sritis tarp įrenginių .accesskey = W -zen-glance-title = Spartusis pažiūrėjimas -zen-glance-header = Bendrieji sparčiojo pažiūrėjimo nustatymai +zen-glance-title = „Glance“ +zen-glance-header = Bendrieji „Glance“ nustatymai zen-glance-description = Gaukite sparčią savo nuorodų apžvalgą neatverdami jų naujoje kortelėje. zen-glance-trigger-label = Paleidimo būdas zen-glance-enabled = - .label = Įjungti spartų pažiūrėjimą + .label = Įjungti „Glance“ zen-glance-trigger-ctrl-click = .label = Vald + spausti zen-glance-trigger-alt-click = @@ -268,7 +268,7 @@ zen-close-tab-shortcut = Užverti kortelę zen-compact-mode-shortcut-show-sidebar = Perjungti slankančią šoninę juostą zen-compact-mode-shortcut-show-toolbar = Perjungti slankančią įrankių juostą zen-compact-mode-shortcut-toggle = Perjungti kompaktinį režimą -zen-glance-expand = Išskleisti spartų pažiūrėjimą +zen-glance-expand = Išskleisti „Glance“ zen-workspace-shortcut-switch-1 = Perjungti į 1 darbo sritį zen-workspace-shortcut-switch-2 = Perjungti į 2 darbo sritį zen-workspace-shortcut-switch-3 = Perjungti į 3 darbo sritį @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Perjungti į 9 darbo sritį zen-workspace-shortcut-switch-10 = Perjungti į 10 darbo sritį zen-workspace-shortcut-forward = Pirmyn darbo sritį zen-workspace-shortcut-backward = Atgal darbo sritį +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Perjungti šoninės juostos plotį zen-pinned-tab-shortcut-reset = Atkurti prisegtą kortelę į prisegtą URL zen-split-view-shortcut-grid = Perjungti skaidymo rodinį tinkleliu @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Perjungti prieinamumą zen-close-all-unpinned-tabs-shortcut = Užverti visas neprisegtas korteles zen-new-unsynced-window-shortcut = Naujas tuščias langas zen-duplicate-tab-shortcut = Dubliuoti kortelę +zen-key-find-selection = Find Selection diff --git a/locales/lt/browser/browser/zen-boosts.ftl b/locales/lt/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..8a1c758ec --- /dev/null +++ b/locales/lt/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Atkurti visus redagavimus +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Dydis +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Kodas +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Kontrastas +zen-bootst-color-brightness = Šviesumas +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Atsisakyti +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/lt/browser/browser/zen-general.ftl b/locales/lt/browser/browser/zen-general.ftl index 17f8c20b2..5f91e697b 100644 --- a/locales/lt/browser/browser/zen-general.ftl +++ b/locales/lt/browser/browser/zen-general.ftl @@ -107,7 +107,7 @@ zen-site-data-setting-site-protection = Stebėjimo apsauga zen-site-data-panel-feature-callout-title = Nauji namai priedams, leidimams ir daugiau zen-site-data-panel-feature-callout-subtitle = Spustelėkite piktogramą, kad tvarkytumėte svetainės nustatymus, peržiūrėtumėte saugumo informaciją, pasiektumėte plėtinius ir atliktumėte įprastus veiksmus. zen-open-link-in-glance = - .label = Atverti nuorodą spartiuojame pažiūrėjime + .label = Atverti nuorodą rodinyje „Glance“ .accesskey = G zen-sidebar-notification-updated-heading = Naujinimas baigtas. @@ -116,7 +116,7 @@ zen-sidebar-notification-updated-heading = Naujinimas baigtas. zen-sidebar-notification-updated-label = Kas naujo naršyklėje „{ -brand-short-name }“ zen-sidebar-notification-updated-tooltip = .title = Peržiūrėti leidimo pastabas -zen-sidebar-notification-restart-safe-mode-label = Kažkas sugedo? +zen-sidebar-notification-restart-safe-mode-label = Kažkas neveikia? zen-sidebar-notification-restart-safe-mode-tooltip = .title = Paleisti iš naujo saugioje režime zen-window-sync-migration-dialog-title = Išlaikykite savo langus sinchronizuotus diff --git a/locales/nb/browser/browser/preferences/zen-preferences.ftl b/locales/nb/browser/browser/preferences/zen-preferences.ftl index 0feb70cca..38868994a 100644 --- a/locales/nb/browser/browser/preferences/zen-preferences.ftl +++ b/locales/nb/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Bytt til arbeidsområde 9 zen-workspace-shortcut-switch-10 = Bytt til arbeidsområde 10 zen-workspace-shortcut-forward = Fremover arbeidsområde zen-workspace-shortcut-backward = Bakover arbeidsområde +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Veksle sidepanelets bredde zen-pinned-tab-shortcut-reset = Tilbakestill festet fane til festet nettadresse zen-split-view-shortcut-grid = Veksle splittet visnings-nett @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Veksle Tilgjengelighet zen-close-all-unpinned-tabs-shortcut = Lukk alle ufestede faner zen-new-unsynced-window-shortcut = Nytt tomt vindu zen-duplicate-tab-shortcut = Dupliser fane +zen-key-find-selection = Find Selection diff --git a/locales/nb/browser/browser/zen-boosts.ftl b/locales/nb/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..658411d08 --- /dev/null +++ b/locales/nb/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Endre navnet på Boost +zen-boost-edit-shuffle = + .label = Bland Vibes +zen-boost-edit-reset = + .label = Tilbakestill redigeringer +zen-boost-edit-delete = + .label = Slett Boost +zen-boost-size = Størrelse +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Kode +zen-boost-back = Tilbake +zen-boost-shuffle = + .tooltiptext = Bland Boost-innstillinger +zen-boost-invert = + .tooltiptext = Smart-inverter farger +zen-boost-controls = + .tooltiptext = Avanserte fargeinnstillinger +zen-boost-disable = + .tooltiptext = Deaktiver fargejusteringer +zen-boost-text-case-toggle = + .tooltiptext = Veksle stor/liten bokstav i skrift +zen-boost-css-picker = + .tooltiptext = Velgselektor +zen-boost-css-inspector = + .tooltiptext = Åpne inspektør +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Lysstyrke +zen-bootst-color-original-saturation = Opprinnelig fargemetning +zen-add-zap-helper = Klikk elementer på siden for å Zappe dem +zen-remove-zap-helper = ← Klikk for å avzappe +zen-select-this = Sett inn slektor for dette +zen-select-related = Sett inn selektor for relaterte +zen-select-cancel = Avbryt +zen-zap-this = Zap dette +zen-zap-related = Zap alle relaterte elementer +zen-zap-cancel = Avbryt +zen-zap-done = Ferdig +zen-unzap-tooltip = + { $elementCount -> + [0] Ingen elementer zappet + [1] { $elementCount } elementer zappet + *[other] { $elementCount } elementer zappet + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Booster eksportert! +zen-site-data-boosts = Booster +zen-site-data-create-boost = + .tooltiptext = Lag ny Boost +zen-boost-rename-boost-prompt = Endre navn på Boost? diff --git a/locales/nl/browser/browser/preferences/zen-preferences.ftl b/locales/nl/browser/browser/preferences/zen-preferences.ftl index 1db60e73f..ac7e8ac4b 100644 --- a/locales/nl/browser/browser/preferences/zen-preferences.ftl +++ b/locales/nl/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Schakelen naar werkruimte 9 zen-workspace-shortcut-switch-10 = Schakelen naar werkruimte 10 zen-workspace-shortcut-forward = Volgende werkruimte zen-workspace-shortcut-backward = Vorige werkruimte +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Zijbalk breedte togglen zen-pinned-tab-shortcut-reset = Vastgezette tab resetten naar vastgezette URL zen-split-view-shortcut-grid = Gesplitste weergave raster togglen @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toegankelijkheid togglen zen-close-all-unpinned-tabs-shortcut = Alle niet-vastgezette tabbladen sluiten zen-new-unsynced-window-shortcut = Nieuw leeg venster zen-duplicate-tab-shortcut = Tabblad dupliceren +zen-key-find-selection = Find Selection diff --git a/locales/nl/browser/browser/zen-boosts.ftl b/locales/nl/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/nl/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/nn-NO/browser/browser/preferences/zen-preferences.ftl b/locales/nn-NO/browser/browser/preferences/zen-preferences.ftl index 61552982c..3b6670d6d 100644 --- a/locales/nn-NO/browser/browser/preferences/zen-preferences.ftl +++ b/locales/nn-NO/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/nn-NO/browser/browser/zen-boosts.ftl b/locales/nn-NO/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/nn-NO/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/pl/browser/browser/preferences/zen-preferences.ftl b/locales/pl/browser/browser/preferences/zen-preferences.ftl index 32fb99b1b..bb0b0f05e 100644 --- a/locales/pl/browser/browser/preferences/zen-preferences.ftl +++ b/locales/pl/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Przełącz na obszar roboczy 9 zen-workspace-shortcut-switch-10 = Przełącz na obszar roboczy 10 zen-workspace-shortcut-forward = Następny obszar roboczy zen-workspace-shortcut-backward = Poprzedni obszar roboczy +zen-workspace-shortcut-create = Stwórz nową przestrzeń roboczą zen-sidebar-shortcut-toggle = Przełącz szerokość panelu bocznego zen-pinned-tab-shortcut-reset = Przywróć przypiętą kartę do przypiętego adresu URL zen-split-view-shortcut-grid = Przełącz widok podziału na siatkę @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Włącz Dostępność zen-close-all-unpinned-tabs-shortcut = Zamknij wszystkie nieprzypięte karty zen-new-unsynced-window-shortcut = Nowe niesynchronizowane okno zen-duplicate-tab-shortcut = Duplikuj kartę +zen-key-find-selection = Znajdź zaznaczenie diff --git a/locales/pl/browser/browser/zen-boosts.ftl b/locales/pl/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7d1e3f33a --- /dev/null +++ b/locales/pl/browser/browser/zen-boosts.ftl @@ -0,0 +1,59 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Zmień nazwę Boosta +zen-boost-edit-shuffle = + .label = Losuj styl +zen-boost-edit-reset = + .label = Zresetuj wszystkie zmiany +zen-boost-edit-delete = + .label = Usuń Boost +zen-boost-size = Rozmiar +zen-boost-case = Wielkość liter +zen-boost-zap = Ukryj +zen-boost-code = Kod +zen-boost-back = Cofnij +zen-boost-shuffle = + .tooltiptext = Losuj ustawienia Boosta +zen-boost-invert = + .tooltiptext = Inteligentne odwrócenie kolorów +zen-boost-controls = + .tooltiptext = Zaawansowane ustawienia kolorów +zen-boost-disable = + .tooltiptext = Wyłącz dostosowanie kolorów +zen-boost-text-case-toggle = + .tooltiptext = Przełącz wielkość liter +zen-boost-css-picker = + .tooltiptext = Wybierz selektor +zen-boost-css-inspector = + .tooltiptext = Otwórz Inspektor +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Jasność +zen-bootst-color-original-saturation = Oryginalne nasycenie +zen-add-zap-helper = Kliknij elementy na stronie, aby je ukryć +zen-remove-zap-helper = ← Kliknij, aby cofnąć ukrycie +zen-select-this = Wstaw selektor dla tego elementu +zen-select-related = Wstaw selektor dla powiązanych elementów +zen-select-cancel = Anuluj +zen-zap-this = Ukryj to +zen-zap-related = Ukryj wszystkie powiązane elementy +zen-zap-cancel = Anuluj +zen-zap-done = Gotowe +zen-unzap-tooltip = + { $elementCount -> + [0] Nie ukryto żadnych elementów + [1] Ukryto {$elementCount} element + [few] Ukryto {$elementCount} elementy + *[other] Ukryto {$elementCount} elementów + } +zen-boost-save = + .label = Eksportuj Boosta +zen-boost-load = + .label = Importuj Boosta +zen-panel-ui-boosts-exported-message = Boost został wyeksportowany! +zen-site-data-boosts = Boosty +zen-site-data-create-boost = + .tooltiptext = Utwórz nowy Boost +zen-boost-rename-boost-prompt = Zmienić nazwę Boosta? diff --git a/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl b/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl index 8bc0fee98..63e8299c6 100644 --- a/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl +++ b/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl @@ -33,7 +33,7 @@ zen-glance-trigger-meta-click = zen-look-and-feel-compact-view-header = Exibir em modo compacto zen-look-and-feel-compact-view-description = Apenas mostre as barras de ferramentas que você usa! zen-look-and-feel-compact-view-enabled = - .label = Ativar modo compacto de { -brand-short-name }'s + .label = Ativar modo compacto de { -brand-short-name }s zen-look-and-feel-compact-view-top-toolbar = .label = Ocultar também a barra de ferramentas superior no modo compacto zen-look-and-feel-compact-toolbar-flash-popup = @@ -98,17 +98,17 @@ zen-vertical-tabs-newtab-top-button-up = .label = Mover o botão de nova aba para o topo zen-vertical-tabs-expand-tabs-by-default = Expandir abas por padrão zen-vertical-tabs-dont-expand-tabs-by-default = Não expandir abas por padrão -zen-vertical-tabs-expand-tabs-on-hover = Expandir Abas no Aerobarco (não funciona no modo compacto) +zen-vertical-tabs-expand-tabs-on-hover = Expandir abas ao passar o mouse (não vai funcionar no modo compacto) zen-vertical-tabs-expand-tabs-header = Como expandir abas zen-vertical-tabs-expand-tabs-description = Escolha como expandir abas na barra lateral zen-theme-marketplace-header = Zen Mods zen-theme-disable-all-enabled = - .title = Desativar todos os temas + .title = Desativar todos os mods zen-theme-disable-all-disabled = - .title = Ativar todos os temas -zen-theme-marketplace-description = Encontre e instale temas da loja. + .title = Ativar todos os mods +zen-theme-marketplace-description = Encontre e instale mods da loja. zen-theme-marketplace-remove-button = - .label = Remover tema + .label = Remover mod zen-theme-marketplace-check-for-updates-button = .label = Procurar por atualizações zen-theme-marketplace-import-button = @@ -119,14 +119,14 @@ zen-theme-marketplace-import-success = Mods importados com sucesso zen-theme-marketplace-import-failure = Ocorreu um erro ao importar os mods zen-theme-marketplace-export-success = Mods exportados com sucesso zen-theme-marketplace-export-failure = Ocorreu um erro ao exportar os mods -zen-theme-marketplace-updates-success = Tema atualizado com sucesso +zen-theme-marketplace-updates-success = Mods atualizados com sucesso zen-theme-marketplace-updates-failure = Nenhuma atualização encontrada! zen-theme-marketplace-toggle-enabled-button = - .title = Desativar tema + .title = Desabilitar mod zen-theme-marketplace-toggle-disabled-button = - .title = Ativar tema + .title = Habilitar mod zen-theme-marketplace-remove-confirmation = Tem certeza que deseja remover este mod? -zen-theme-marketplace-close-modal = FECHAR +zen-theme-marketplace-close-modal = Fechar zen-theme-marketplace-theme-header-title = .title = Seletor CSS: { $name } zen-theme-marketplace-dropdown-default-label = @@ -162,7 +162,7 @@ category-zen-CKS = .tooltiptext = { pane-zen-CKS-title } pane-settings-CKS-title = Atalhos { -brand-short-name } category-zen-marketplace = - .tooltiptext = Mods do Zen + .tooltiptext = Zen Mods zen-settings-CKS-header = Personalize seus atalhos de teclado zen-settings-CKS-description = Altere os atalhos de teclado padrão ao seu gosto e melhore a sua experiência de navegação zen-settings-CKS-disable-firefox = @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Mudar para Área de Trabalho 9 zen-workspace-shortcut-switch-10 = Mudar para Área de Trabalho 10 zen-workspace-shortcut-forward = Encaminhar espaço de trabalho zen-workspace-shortcut-backward = Workspace Anterior +zen-workspace-shortcut-create = Criar novo Espaço zen-sidebar-shortcut-toggle = Alternar Largura do painel zen-pinned-tab-shortcut-reset = Restaurar a Guia Fixado para a URL fixada zen-split-view-shortcut-grid = Alternar grade de visualização dividida @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Ativar/Desativar Acessibilidade zen-close-all-unpinned-tabs-shortcut = Fechar Todas as Abas Não Fixadas zen-new-unsynced-window-shortcut = Nova Janela Dessincronizada zen-duplicate-tab-shortcut = Duplicar Aba +zen-key-find-selection = Encontrar Selecionado diff --git a/locales/pt-BR/browser/browser/zen-boosts.ftl b/locales/pt-BR/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..6ae7e53e6 --- /dev/null +++ b/locales/pt-BR/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Renomear Boost +zen-boost-edit-shuffle = + .label = Misturar Vibes +zen-boost-edit-reset = + .label = Redefinir Todas as Edições +zen-boost-edit-delete = + .label = Excluir Boost +zen-boost-size = Tamanho +zen-boost-case = Caixa +zen-boost-zap = Zap +zen-boost-code = Código +zen-boost-back = Voltar +zen-boost-shuffle = + .tooltiptext = Misturar Configurações do Boost +zen-boost-invert = + .tooltiptext = Inversão Inteligente de Cores +zen-boost-controls = + .tooltiptext = Controles Avançados de Cores +zen-boost-disable = + .tooltiptext = Desativar Ajusta de Cores +zen-boost-text-case-toggle = + .tooltiptext = Ativar Caixa de Texto +zen-boost-css-picker = + .tooltiptext = Ferramenta de Seleção +zen-boost-css-inspector = + .tooltiptext = Abrir Inspetor +zen-bootst-color-contrast = Contraste +zen-bootst-color-brightness = Brilho +zen-bootst-color-original-saturation = Saturação Original +zen-add-zap-helper = Clique em elementos da página para dar um Zap neles +zen-remove-zap-helper = Clique para Deszapar +zen-select-this = Inserir seletor para isto +zen-select-related = Inserir seletor para relacionados +zen-select-cancel = Cancelar +zen-zap-this = Zap isso +zen-zap-related = Zap em todos os elementos relacionados +zen-zap-cancel = Cancelar +zen-zap-done = Pronto +zen-unzap-tooltip = + { $elementCount -> + [0] Nenhum elemento zapeado + [1] { $elementCount } elemento zapeado + *[other] { $elementCount } elementos zapeados + } +zen-boost-save = + .label = Exportar Boost +zen-boost-load = + .label = Importar Boost +zen-panel-ui-boosts-exported-message = Boost exportado! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Criar novo boost +zen-boost-rename-boost-prompt = Renomear Boost? diff --git a/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl b/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl index 8ed17f431..a501737b7 100644 --- a/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl +++ b/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Mudar para o Espaço de Trabalho 9 zen-workspace-shortcut-switch-10 = Mudar para o Espaço de Trabalho 10 zen-workspace-shortcut-forward = Espaço de Trabalho Seguinte zen-workspace-shortcut-backward = Espaço de Trabalho Anterior +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Alternar largura da Barra Lateral zen-pinned-tab-shortcut-reset = Repor o Separador Fixado para a URL Fixada zen-split-view-shortcut-grid = Ativar Vista Dividida em Grelha @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Alternar Acessibilidade zen-close-all-unpinned-tabs-shortcut = Fechar Todos os Separadores Não Fixados zen-new-unsynced-window-shortcut = Nova janela sem sincronização zen-duplicate-tab-shortcut = Duplicar Separador +zen-key-find-selection = Find Selection diff --git a/locales/pt-PT/browser/browser/zen-boosts.ftl b/locales/pt-PT/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/pt-PT/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ro/browser/browser/preferences/zen-preferences.ftl b/locales/ro/browser/browser/preferences/zen-preferences.ftl index ed26f72b8..a43ff8124 100644 --- a/locales/ro/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ro/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/ro/browser/browser/zen-boosts.ftl b/locales/ro/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/ro/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ru/browser/browser/preferences/zen-preferences.ftl b/locales/ru/browser/browser/preferences/zen-preferences.ftl index 4942900e9..bd2d72876 100644 --- a/locales/ru/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ru/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Переключиться на простра zen-workspace-shortcut-switch-10 = Переключиться на пространство 10 zen-workspace-shortcut-forward = Следующее пространство zen-workspace-shortcut-backward = Предыдущее пространство +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Ширина боковой панели zen-pinned-tab-shortcut-reset = Восстановить адрес закрепленной вкладки zen-split-view-shortcut-grid = Переключить разделение сетки вида @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Включить/выключить zen-close-all-unpinned-tabs-shortcut = Закрыть все не закреплённые вкладки zen-new-unsynced-window-shortcut = Новое пустое окно zen-duplicate-tab-shortcut = Дублировать вкладку +zen-key-find-selection = Find Selection diff --git a/locales/ru/browser/browser/zen-boosts.ftl b/locales/ru/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/ru/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ru/browser/browser/zen-general.ftl b/locales/ru/browser/browser/zen-general.ftl index af51df15e..d5d80ae37 100644 --- a/locales/ru/browser/browser/zen-general.ftl +++ b/locales/ru/browser/browser/zen-general.ftl @@ -50,7 +50,7 @@ zen-pinned-tab-replaced = Адрес закреплённой вкладки з zen-tabs-renamed = Вкладка успешно переименована! zen-background-tab-opened-toast = Открыта новая фоновая вкладка! zen-workspace-renamed-toast = Пространство успешно переименовано! -zen-split-view-limit-toast = Can't add more panels to the split view! +zen-split-view-limit-toast = Невозможно добавить больше панелей в раздельный вид! zen-toggle-compact-mode-button = .label = Компактный режим .tooltiptext = Переключить компактный режим diff --git a/locales/sk/browser/browser/preferences/zen-preferences.ftl b/locales/sk/browser/browser/preferences/zen-preferences.ftl index 91d5cd501..ba3976eb2 100644 --- a/locales/sk/browser/browser/preferences/zen-preferences.ftl +++ b/locales/sk/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Prepnúť na pracovnú plochu 9 zen-workspace-shortcut-switch-10 = Prepnúť na pracovnú plochu 10 zen-workspace-shortcut-forward = Nasledujúca pracovná plocha zen-workspace-shortcut-backward = Predchádzajúca pracovná plocha +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Prepnúť šírku bočného panela zen-pinned-tab-shortcut-reset = Obnoviť pripnutú kartu na pôvodnú URL zen-split-view-shortcut-grid = Prepnúť mriežku rozdeleného zobrazenia @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Prepnúť prístupnosť zen-close-all-unpinned-tabs-shortcut = Zatvoriť všetky nepripnuté karty zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/sk/browser/browser/zen-boosts.ftl b/locales/sk/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/sk/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl b/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl index 5734cbcc6..9a144f5b0 100644 --- a/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl +++ b/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Växla till arbetsyta 9 zen-workspace-shortcut-switch-10 = Växla till arbetsyta 10 zen-workspace-shortcut-forward = Vidarebefordra arbetsyta zen-workspace-shortcut-backward = Bakåt arbetsyta +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Växla sidofältets bredd zen-pinned-tab-shortcut-reset = Återställ Fäst flik till Pinned URL zen-split-view-shortcut-grid = Växla delad vy rutnät @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Växla tillgänglighetsinställning zen-close-all-unpinned-tabs-shortcut = Stäng alla flikar som inte är fästa zen-new-unsynced-window-shortcut = Nytt tomt fönster zen-duplicate-tab-shortcut = Duplicera flik +zen-key-find-selection = Find Selection diff --git a/locales/sv-SE/browser/browser/zen-boosts.ftl b/locales/sv-SE/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..e784c0f25 --- /dev/null +++ b/locales/sv-SE/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Byt namn på förändring +zen-boost-edit-shuffle = + .label = Blanda vibbar +zen-boost-edit-reset = + .label = Återställ alla redigeringar +zen-boost-edit-delete = + .label = Ta bort förändring +zen-boost-size = Storlek +zen-boost-case = Case +zen-boost-zap = Zappa +zen-boost-code = Kod +zen-boost-back = Tillbaka +zen-boost-shuffle = + .tooltiptext = Inställningar för blandningsförändring +zen-boost-invert = + .tooltiptext = Smart invertera färger +zen-boost-controls = + .tooltiptext = Avancerade färgkontroller +zen-boost-disable = + .tooltiptext = Inaktivera färgjusteringar +zen-boost-text-case-toggle = + .tooltiptext = Växla textfall +zen-boost-css-picker = + .tooltiptext = Välj väljare +zen-boost-css-inspector = + .tooltiptext = Öppna inspektör +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Ljusstyrka +zen-bootst-color-original-saturation = Ursprunglig mättnad +zen-add-zap-helper = Klicka på element på sidan för att zappa dem +zen-remove-zap-helper = ← Klicka för att avzappa +zen-select-this = Infoga väljare för detta +zen-select-related = Infoga väljare för relaterade +zen-select-cancel = Avbryt +zen-zap-this = Zappa detta +zen-zap-related = Zappa alla relaterade element +zen-zap-cancel = Avbryt +zen-zap-done = Klart +zen-unzap-tooltip = + { $elementCount -> + [0] Inga element zappade + [1] { $elementCount } element zappade + *[other] { $elementCount } flera element zappade + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Förändring exporterad! +zen-site-data-boosts = Förändringar +zen-site-data-create-boost = + .tooltiptext = Skapa ny förändring +zen-boost-rename-boost-prompt = Byt namn på förändring? diff --git a/locales/th/browser/browser/preferences/zen-preferences.ftl b/locales/th/browser/browser/preferences/zen-preferences.ftl index 809b5601a..4a8417a09 100644 --- a/locales/th/browser/browser/preferences/zen-preferences.ftl +++ b/locales/th/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = สลับไปใช้พื้นที zen-workspace-shortcut-switch-10 = สลับไปใช้พื้นที่ทำงานที่ 10 zen-workspace-shortcut-forward = ไปยังพื้นที่ทำงานก่อนหน้า zen-workspace-shortcut-backward = ไปยังพื้นที่ทำงานด้านหลัง +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/th/browser/browser/zen-boosts.ftl b/locales/th/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/th/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/tr/browser/browser/preferences/zen-preferences.ftl b/locales/tr/browser/browser/preferences/zen-preferences.ftl index 9fe0debf3..44f39df3c 100644 --- a/locales/tr/browser/browser/preferences/zen-preferences.ftl +++ b/locales/tr/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = 9. çalışma alanına geç zen-workspace-shortcut-switch-10 = 10. çalışma alanına geç zen-workspace-shortcut-forward = Sonraki çalışma alanı zen-workspace-shortcut-backward = Önceki çalışma alanı +zen-workspace-shortcut-create = Yeni çalışma alanı oluştur zen-sidebar-shortcut-toggle = Kenar çubuğu genişliğini değiştir zen-pinned-tab-shortcut-reset = Sabitlenen sekmeyi sabitlenen URL'ye sıfırla zen-split-view-shortcut-grid = Izgaralı bölünmüş görünümü aç/kapat @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Erişilebilirliği aç/kapat zen-close-all-unpinned-tabs-shortcut = Sabitlenmemiş tüm sekmeleri kapat zen-new-unsynced-window-shortcut = Yeni boş pencere zen-duplicate-tab-shortcut = Sekmeyi çoğalt +zen-key-find-selection = Seçimi bul diff --git a/locales/tr/browser/browser/zen-boosts.ftl b/locales/tr/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7c78e7c03 --- /dev/null +++ b/locales/tr/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Boost’u yeniden adlandır +zen-boost-edit-shuffle = + .label = Vibe'ları karıştır +zen-boost-edit-reset = + .label = Tüm düzenlemeleri sıfırla +zen-boost-edit-delete = + .label = Boost’u sil +zen-boost-size = Boyut +zen-boost-case = Büyük/küçük harf +zen-boost-zap = Zap +zen-boost-code = Kod +zen-boost-back = Geri +zen-boost-shuffle = + .tooltiptext = Boost ayarlarını karıştır +zen-boost-invert = + .tooltiptext = Renkleri ters çevir +zen-boost-controls = + .tooltiptext = Gelişmiş renk kontrolleri +zen-boost-disable = + .tooltiptext = Renk ayarlarını devre dışı bırak +zen-boost-text-case-toggle = + .tooltiptext = Metin büyük/küçük harf değişimini aç/kapat +zen-boost-css-picker = + .tooltiptext = Seçici seç +zen-boost-css-inspector = + .tooltiptext = Denetleyiciyi aç +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Parlaklık +zen-bootst-color-original-saturation = Orijinal doygunluk +zen-add-zap-helper = Sayfadaki ögelere tıklayarak onları Zap ile kaldırın +zen-remove-zap-helper = ← Unzap için tıklayın +zen-select-this = Bu öge için seçici ekle +zen-select-related = İlgili ögeler için seçici ekle +zen-select-cancel = İptal +zen-zap-this = Bunu Zap ile kaldır +zen-zap-related = İlgili tüm ögeleri Zap ile kaldır +zen-zap-cancel = İptal +zen-zap-done = Bitti +zen-unzap-tooltip = + { $elementCount -> + [0] Hiç öge Zap’lenmedi + [1] { $elementCount } öge Zap’lenmiş + *[other] { $elementCount } öge Zap’lenmiş + } +zen-boost-save = + .label = Boost’u dışa aktar +zen-boost-load = + .label = Boost’u içe aktar +zen-panel-ui-boosts-exported-message = Boost dışa aktarıldı! +zen-site-data-boosts = Boost'lar +zen-site-data-create-boost = + .tooltiptext = Yeni Boost oluştur +zen-boost-rename-boost-prompt = Boost yeniden adlandırılsın mı? diff --git a/locales/uk/browser/browser/preferences/zen-preferences.ftl b/locales/uk/browser/browser/preferences/zen-preferences.ftl index 3dcce31ba..c2860504c 100644 --- a/locales/uk/browser/browser/preferences/zen-preferences.ftl +++ b/locales/uk/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Перейти на робочу област zen-workspace-shortcut-switch-10 = Перейти на робочу область 10 zen-workspace-shortcut-forward = Наступний робочий простір zen-workspace-shortcut-backward = Попередній робочий простір +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Перемкнути ширину бічної панелі zen-pinned-tab-shortcut-reset = Скинути прикріплену вкладку до закріпленої URL-адреси zen-split-view-shortcut-grid = Перемкнути розділену сітку @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Увімк. / Вимк. досту zen-close-all-unpinned-tabs-shortcut = Закрити всі відкріплені вкладки zen-new-unsynced-window-shortcut = Нове несинхронізоване вікно zen-duplicate-tab-shortcut = Дублювати вкладку +zen-key-find-selection = Find Selection diff --git a/locales/uk/browser/browser/zen-boosts.ftl b/locales/uk/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..3e5c35c98 --- /dev/null +++ b/locales/uk/browser/browser/zen-boosts.ftl @@ -0,0 +1,59 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Перейменувати підсилення +zen-boost-edit-shuffle = + .label = Змінити стиль +zen-boost-edit-reset = + .label = Скинути всі зміни +zen-boost-edit-delete = + .label = Видалити підсилення +zen-boost-size = Розмір +zen-boost-case = Case +zen-boost-zap = Сховати +zen-boost-code = Код +zen-boost-back = Назад +zen-boost-shuffle = + .tooltiptext = Налаштування зміни стилю +zen-boost-invert = + .tooltiptext = Розумна інверсія кольорів +zen-boost-controls = + .tooltiptext = Розширені налаштування кольору +zen-boost-disable = + .tooltiptext = Вимкнути налаштування кольору +zen-boost-text-case-toggle = + .tooltiptext = Змінити регістр тексту +zen-boost-css-picker = + .tooltiptext = Вибір селектора +zen-boost-css-inspector = + .tooltiptext = Відкрити інспектора +zen-bootst-color-contrast = Контраст +zen-bootst-color-brightness = Яскравість +zen-bootst-color-original-saturation = Оригінальна насиченість +zen-add-zap-helper = Клацніть на елементи на сторінці, щоби сховати їх +zen-remove-zap-helper = ← Клацніть, аби знову показати +zen-select-this = Вставити селектор для цього +zen-select-related = Вставити селектор для пов’язаних елементів +zen-select-cancel = Скасувати +zen-zap-this = Сховати їх +zen-zap-related = Сховати всі пов’язані елементи +zen-zap-cancel = Скасувати +zen-zap-done = Готово +zen-unzap-tooltip = + { $elementCount -> + [0] Жоден елемент не сховано + [1] Сховано {$elementCount} елемент + [few] Сховано {$elementCount} елементи + *[other] Сховано {$elementCount} елементів + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Підсилення експортовано! +zen-site-data-boosts = Підсилення +zen-site-data-create-boost = + .tooltiptext = Створити нове підсилення +zen-boost-rename-boost-prompt = Перейменувати підсилення? diff --git a/locales/uk/browser/browser/zen-split-view.ftl b/locales/uk/browser/browser/zen-split-view.ftl index 77ea3247f..4a6b7ca9b 100644 --- a/locales/uk/browser/browser/zen-split-view.ftl +++ b/locales/uk/browser/browser/zen-split-view.ftl @@ -7,8 +7,8 @@ tab-zen-split-tabs = { $tabCount -> [-1] Відокремити вкладку [1] Додати розділений перегляд... - [few] Об’єднати { $tabCount } вкладки - *[other] Об’єднати { $tabCount } вкладок + [few] Об’єднати { $tabCount } вкладки + *[other] Об’єднати { $tabCount } вкладок } .accesskey = S zen-split-link = diff --git a/locales/vi/browser/browser/preferences/zen-preferences.ftl b/locales/vi/browser/browser/preferences/zen-preferences.ftl index cc89ed45d..1158ff2aa 100644 --- a/locales/vi/browser/browser/preferences/zen-preferences.ftl +++ b/locales/vi/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Chuyển sang không gian làm việc 9 zen-workspace-shortcut-switch-10 = Chuyển sang không gian làm việc 10 zen-workspace-shortcut-forward = Không gian làm việc tiếp theo zen-workspace-shortcut-backward = Không gian làm việc trước +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Điều chỉnh độ rộng thanh bên zen-pinned-tab-shortcut-reset = Đặt lại thẻ đã ghim về địa chỉ gốc zen-split-view-shortcut-grid = Bật/Tắt chia lưới @@ -317,4 +318,5 @@ zen-devtools-toggle-dom-shortcut = Bật/Tắt DOM zen-devtools-toggle-accessibility-shortcut = Bật/Tắt trợ năng zen-close-all-unpinned-tabs-shortcut = Đóng tất cả thẻ chưa ghim zen-new-unsynced-window-shortcut = Cửa sổ trống mới -zen-duplicate-tab-shortcut = Duplicate Tab +zen-duplicate-tab-shortcut = Nhân đôi tab +zen-key-find-selection = Find Selection diff --git a/locales/vi/browser/browser/zen-boosts.ftl b/locales/vi/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..734f49741 --- /dev/null +++ b/locales/vi/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = Đổi tên cải tiến +zen-boost-edit-shuffle = + .label = Trộn Vibe +zen-boost-edit-reset = + .label = Đặt lại tất cả chỉnh sửa +zen-boost-edit-delete = + .label = Xóa cải tiến +zen-boost-size = Kích thước +zen-boost-case = Case +zen-boost-zap = Khử +zen-boost-code = Code +zen-boost-back = Quay lại +zen-boost-shuffle = + .tooltiptext = Xáo trộn cài đặt cải tiến +zen-boost-invert = + .tooltiptext = Đảo ngược màu thông minh +zen-boost-controls = + .tooltiptext = Chỉnh màu nâng cao +zen-boost-disable = + .tooltiptext = Tắt điều chỉnh màu +zen-boost-text-case-toggle = + .tooltiptext = Chuyển đổi kiểu chữ +zen-boost-css-picker = + .tooltiptext = Chọn phần tử +zen-boost-css-inspector = + .tooltiptext = Mở trình kiểm tra +zen-bootst-color-contrast = Độ tương phản +zen-bootst-color-brightness = Độ sáng +zen-bootst-color-original-saturation = Độ bão hòa gốc +zen-add-zap-helper = Nhấp vào các phần tử trên trang để Khử chúng +zen-remove-zap-helper = ← Nhấp để khôi phục +zen-select-this = Nhập bộ chọn cho phần tử này +zen-select-related = Nhập bộ chọn cho các phần tử liên quan +zen-select-cancel = Hủy +zen-zap-this = Khử phần tử này +zen-zap-related = Khử tất cả phần tử liên quan +zen-zap-cancel = Hủy +zen-zap-done = Xong +zen-unzap-tooltip = + { $elementCount -> + [0] Chưa khử phần tử nào + [1] Đã khử { $elementCount } phần tử + *[other] Đã khử { $elementCount } phần tử + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Đã xuất cải tiến! +zen-site-data-boosts = Cải tiến +zen-site-data-create-boost = + .tooltiptext = Tạo cải tiến mới +zen-boost-rename-boost-prompt = Đổi tên cải tiến? diff --git a/locales/vi/browser/browser/zen-general.ftl b/locales/vi/browser/browser/zen-general.ftl index 71e6413c8..405d42a21 100644 --- a/locales/vi/browser/browser/zen-general.ftl +++ b/locales/vi/browser/browser/zen-general.ftl @@ -2,7 +2,7 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -zen-panel-ui-current-profile-text = Hồ sơ hiện tại +zen-panel-ui-current-profile-text = hồ sơ hiện tại unified-extensions-description = Các tiện ích mở rộng được sử dụng để mang thêm tính năng vào { -brand-short-name }. tab-context-zen-reset-pinned-tab = .label = @@ -14,7 +14,7 @@ tab-context-zen-reset-pinned-tab = tab-context-zen-add-essential = .label = Thêm vào thẻ chính .accesskey = E -tab-context-zen-add-essential-badge = Đã dùng { $num } / { $max } vị trí +tab-context-zen-add-essential-badge = { $num } / { $max } tab-context-zen-remove-essential = .label = Gỡ khỏi thẻ chính .accesskey = R @@ -48,7 +48,7 @@ zen-pinned-tab-replaced = URL của thẻ đã ghim đã được thay thế b zen-tabs-renamed = Thẻ đã được đổi tên! zen-background-tab-opened-toast = Một thẻ mới đã được mở dưới nền! zen-workspace-renamed-toast = Không gian làm việc đã được đổi tên! -zen-split-view-limit-toast = Can't add more panels to the split view! +zen-split-view-limit-toast = Không thể chia thêm màn hình! zen-toggle-compact-mode-button = .label = Chế độ thu gọn .tooltiptext = Bật Chế độ thu gọn diff --git a/locales/vi/browser/browser/zen-split-view.ftl b/locales/vi/browser/browser/zen-split-view.ftl index ec563698d..8487bb03e 100644 --- a/locales/vi/browser/browser/zen-split-view.ftl +++ b/locales/vi/browser/browser/zen-split-view.ftl @@ -5,9 +5,9 @@ tab-zen-split-tabs = .label = { $tabCount -> - [-1] Split out tab - [1] Add split view... - *[other] Join { $tabCount } Tabs + [-1] Tách thẻ + [1] Chia đôi màn hình... + *[other] Gộp { $tabCount } thẻ } .accesskey = S zen-split-link = diff --git a/locales/vi/browser/browser/zen-vertical-tabs.ftl b/locales/vi/browser/browser/zen-vertical-tabs.ftl index ae63b8b3b..6d07a6796 100644 --- a/locales/vi/browser/browser/zen-vertical-tabs.ftl +++ b/locales/vi/browser/browser/zen-vertical-tabs.ftl @@ -18,7 +18,7 @@ zen-toolbar-context-compact-mode-hide-both = .label = Ẩn cả hai .accesskey = H zen-toolbar-context-move-to-folder = - .label = Move to Folder... + .label = Chuyển vào thư mục... .accesskey = M zen-toolbar-context-new-folder = .label = Thư mục mới diff --git a/locales/zh-CN/browser/browser/preferences/zen-preferences.ftl b/locales/zh-CN/browser/browser/preferences/zen-preferences.ftl index da82d2771..cc5014b4f 100644 --- a/locales/zh-CN/browser/browser/preferences/zen-preferences.ftl +++ b/locales/zh-CN/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = 切换到工作区 9 zen-workspace-shortcut-switch-10 = 切换到工作区 10 zen-workspace-shortcut-forward = 下一个工作区 zen-workspace-shortcut-backward = 上一个工作区 +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = 折叠/展开侧边栏 zen-pinned-tab-shortcut-reset = 重置固定标签页至其固定的 URL zen-split-view-shortcut-grid = 切换网格分屏视图 @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = 切换无障碍环境 zen-close-all-unpinned-tabs-shortcut = 关闭所有未固定的标签页 zen-new-unsynced-window-shortcut = 新建空白窗口 zen-duplicate-tab-shortcut = 克隆标签页 +zen-key-find-selection = Find Selection diff --git a/locales/zh-CN/browser/browser/zen-boosts.ftl b/locales/zh-CN/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..be617b8c7 --- /dev/null +++ b/locales/zh-CN/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = 重命名 Boost +zen-boost-edit-shuffle = + .label = 随机氛围 +zen-boost-edit-reset = + .label = 重置所有编辑 +zen-boost-edit-delete = + .label = 删除 Boost +zen-boost-size = 尺寸 +zen-boost-case = Case +zen-boost-zap = 屏蔽 +zen-boost-code = 代码 +zen-boost-back = 返回 +zen-boost-shuffle = + .tooltiptext = 随机 Boost 设置 +zen-boost-invert = + .tooltiptext = 智能反转颜色 +zen-boost-controls = + .tooltiptext = 高级颜色控制 +zen-boost-disable = + .tooltiptext = 禁用颜色调整 +zen-boost-text-case-toggle = + .tooltiptext = 切换文本大小写 +zen-boost-css-picker = + .tooltiptext = 选取选择器 +zen-boost-css-inspector = + .tooltiptext = 打开查看器 +zen-bootst-color-contrast = 对比度 +zen-bootst-color-brightness = 亮度 +zen-bootst-color-original-saturation = 初始饱和度 +zen-add-zap-helper = 点击页面上的元素以将其屏蔽 +zen-remove-zap-helper = ← 点击以取消屏蔽 +zen-select-this = 插入此元素的选择器 +zen-select-related = 插入相关元素的选择器 +zen-select-cancel = 取消 +zen-zap-this = 屏蔽此元素 +zen-zap-related = 屏蔽所有相关元素 +zen-zap-cancel = 取消 +zen-zap-done = 完成 +zen-unzap-tooltip = + { $elementCount -> + [0] 没有已屏蔽的元素 + [1] 已屏蔽 { $elementCount } 个元素 + *[other] 已屏蔽 { $elementCount } 个元素 + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost 已导出! +zen-site-data-boosts = Boost +zen-site-data-create-boost = + .tooltiptext = 新建 Boost +zen-boost-rename-boost-prompt = 重命名 Boost 吗? diff --git a/locales/zh-TW/browser/browser/preferences/zen-preferences.ftl b/locales/zh-TW/browser/browser/preferences/zen-preferences.ftl index 0b7a4eb24..e47b873db 100644 --- a/locales/zh-TW/browser/browser/preferences/zen-preferences.ftl +++ b/locales/zh-TW/browser/browser/preferences/zen-preferences.ftl @@ -52,11 +52,11 @@ zen-tabs-cycle-by-attribute = .label = Ctrl+Tab 僅會在 Essential 分頁或是 Workspace 分頁之間切換 zen-tabs-cycle-ignore-pending-tabs = .label = 使用 Ctrl+Tab 切換分頁時,忽略卸載的分頁 -zen-tabs-cycle-by-attribute-warning = Ctrl+Tab 將按最近使用順序循環,因為該設定已啟用 +zen-tabs-cycle-by-attribute-warning = 依當前設定,Ctrl+Tab 將按最近使用順序循環 zen-look-and-feel-compact-toolbar-themed = - .label = 將主題顏色套用至緊湊模式時的工具欄 + .label = 將主題顏色套用至緊湊模式下的工具欄 zen-workspace-continue-where-left-off = - .label = 從上次最後造訪的分頁繼續開始 + .label = 從上次離開時的分頁繼續開始 pane-zen-pinned-tab-manager-title = 釘選分頁 zen-pinned-tab-manager-header = 釘選分頁的一般設定 zen-pinned-tab-manager-description = 釘選分頁的額外行為 @@ -89,7 +89,7 @@ zen-key-conflict = 與 { $group } -> { $shortcut } 衝突 pane-zen-theme-title = 主題設定 zen-vertical-tabs-title = 側邊欄與分頁排版 zen-vertical-tabs-header = 垂直分頁 -zen-vertical-tabs-description = 用垂直的排版來管理你的分頁 +zen-vertical-tabs-description = 用垂直列表來管理你的分頁 zen-vertical-tabs-show-expand-button = .label = 顯示擴展按鈕 zen-vertical-tabs-newtab-on-tab-list = @@ -122,9 +122,9 @@ zen-theme-marketplace-export-failure = 匯出模組時發生錯誤 zen-theme-marketplace-updates-success = 主題更新成功 zen-theme-marketplace-updates-failure = 找不到任何更新! zen-theme-marketplace-toggle-enabled-button = - .title = 關閉佈景主題 + .title = 關閉模組 zen-theme-marketplace-toggle-disabled-button = - .title = 啟用佈景主題 + .title = 啟用模組 zen-theme-marketplace-remove-confirmation = 您確定要移除此模組? zen-theme-marketplace-close-modal = 關閉 zen-theme-marketplace-theme-header-title = @@ -145,9 +145,9 @@ zen-dark-theme-styles-amoled = 夜間主題 zen-dark-theme-styles-default = 預設深色主題 zen-dark-theme-styles-colorful = 有趣的深色主題 zen-compact-mode-styles-left = 隱藏分頁欄 -zen-compact-mode-styles-top = 隱藏功能列 +zen-compact-mode-styles-top = 隱藏頂端列 zen-compact-mode-styles-both = 隱藏兩者 -zen-urlbar-title = Zen 網址欄 +zen-urlbar-title = Zen 網址列 zen-urlbar-header = 網址列一般設定 zen-urlbar-description = 自訂義您喜歡的網址列 zen-urlbar-behavior-label = 行為 @@ -164,7 +164,7 @@ pane-settings-CKS-title = { -brand-short-name } 快捷鍵 category-zen-marketplace = .tooltiptext = Zen 模組 zen-settings-CKS-header = 自定義您的快捷鍵 -zen-settings-CKS-description = 依據您的愛好來更改預設的快捷鍵以進一步改善瀏覽體驗 +zen-settings-CKS-description = 依您喜好來更改預設的快捷鍵以進一步改善瀏覽體驗 zen-settings-CKS-disable-firefox = .label = 停用 { -brand-short-name } 的預設快捷鍵 zen-settings-CKS-duplicate-shortcut = @@ -281,9 +281,10 @@ zen-workspace-shortcut-switch-9 = 切換至工作區 9 zen-workspace-shortcut-switch-10 = 切換至工作區 10 zen-workspace-shortcut-forward = 下一個工作區 zen-workspace-shortcut-backward = 上一個工作區 +zen-workspace-shortcut-create = 新增工作區 zen-sidebar-shortcut-toggle = 切換側邊欄寬度 zen-pinned-tab-shortcut-reset = 重置釘選分頁至其初始的網址 -zen-split-view-shortcut-grid = 切換分割畫面 +zen-split-view-shortcut-grid = 切換分割畫面排列 zen-split-view-shortcut-vertical = 切換垂直分割畫面 zen-split-view-shortcut-horizontal = 切換水平分割畫面 zen-split-view-shortcut-unsplit = 關閉分割畫面 @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = 開啟輔助功能 zen-close-all-unpinned-tabs-shortcut = 關閉所有未釘選的分頁 zen-new-unsynced-window-shortcut = 開新簡白視窗 zen-duplicate-tab-shortcut = 複製分頁 +zen-key-find-selection = 尋找選取文字 diff --git a/locales/zh-TW/browser/browser/zen-boosts.ftl b/locales/zh-TW/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..d9fefbb04 --- /dev/null +++ b/locales/zh-TW/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +zen-boost-edit-rename = + .label = 重新命名 +zen-boost-edit-shuffle = + .label = 換個感覺 +zen-boost-edit-reset = + .label = 回復原狀 +zen-boost-edit-delete = + .label = 刪除樣式 +zen-boost-size = 縮放 +zen-boost-case = 大小寫 +zen-boost-zap = Zap +zen-boost-code = 樣式表 +zen-boost-back = 返回 +zen-boost-shuffle = + .tooltiptext = 重骰設定 +zen-boost-invert = + .tooltiptext = 反轉色調 +zen-boost-controls = + .tooltiptext = 色調進階調整 +zen-boost-disable = + .tooltiptext = 禁用色調變動 +zen-boost-text-case-toggle = + .tooltiptext = 切換文字大小寫 +zen-boost-css-picker = + .tooltiptext = 汲取選擇器 +zen-boost-css-inspector = + .tooltiptext = 開啟檢測器 +zen-bootst-color-contrast = 對比 +zen-bootst-color-brightness = 亮度 +zen-bootst-color-original-saturation = 飽和度 +zen-add-zap-helper = 選擇要 Zap的元素 +zen-remove-zap-helper = ← 按此取消zap +zen-select-this = 加入此元素的選擇器 +zen-select-related = 加入關連元素的選擇器 +zen-select-cancel = 取消 +zen-zap-this = Zap +zen-zap-related = Zap關連元素 +zen-zap-cancel = 取消 +zen-zap-done = 完成 +zen-unzap-tooltip = + { $elementCount -> + [0] 沒有被Zap的元素 + [1] { $elementCount } 個元素已Zap + *[other] { $elementCount } 個元素已Zap + } +zen-boost-save = + .label = 匯出 Boost +zen-boost-load = + .label = 匯入 Boost +zen-panel-ui-boosts-exported-message = Boost已匯出! +zen-site-data-boosts = Boost +zen-site-data-create-boost = + .tooltiptext = 建立新Boost +zen-boost-rename-boost-prompt = 重新命名為? diff --git a/locales/zh-TW/browser/browser/zen-general.ftl b/locales/zh-TW/browser/browser/zen-general.ftl index 2f32fe5eb..99476e47b 100644 --- a/locales/zh-TW/browser/browser/zen-general.ftl +++ b/locales/zh-TW/browser/browser/zen-general.ftl @@ -45,9 +45,9 @@ zen-general-cancel-label = zen-general-confirm = .label = 確認 zen-pinned-tab-replaced = 釘選分頁網址已替換為當前網址! -zen-tabs-renamed = 已成功重新命名分頁! -zen-background-tab-opened-toast = 已在背景開啟新分頁! -zen-workspace-renamed-toast = 已成功重新命名工作區! +zen-tabs-renamed = 成功重新命名分頁! +zen-background-tab-opened-toast = 新分頁已在背景開啟! +zen-workspace-renamed-toast = 成功重新命名工作區! zen-split-view-limit-toast = 無法加入更多分頁至分割畫面! zen-toggle-compact-mode-button = .label = 緊湊模式 @@ -122,4 +122,4 @@ zen-window-sync-migration-dialog-message = Zen現在能同步同裝置上的各 zen-window-sync-migration-dialog-learn-more = 了解更多 zen-window-sync-migration-dialog-accept = 明白了 zen-appmenu-new-blank-window = - .label = 新簡白視窗 + .label = 開新簡白視窗 From 89267dfea01466a78aa4d2229f0f2d1d3e57eaa5 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 27 May 2026 08:45:30 +0200 Subject: [PATCH 28/31] no-bug: Add a `New Boost` urlbar action (gh-13884) Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com> --- src/zen/urlbar/ZenUBGlobalActions.sys.mjs | 43 +++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/zen/urlbar/ZenUBGlobalActions.sys.mjs b/src/zen/urlbar/ZenUBGlobalActions.sys.mjs index 607b05ada..bfc789bb5 100644 --- a/src/zen/urlbar/ZenUBGlobalActions.sys.mjs +++ b/src/zen/urlbar/ZenUBGlobalActions.sys.mjs @@ -81,6 +81,49 @@ const globalActionsTemplate = [ return !tab.hasAttribute("zen-empty-tab") && tab.pinned; }, }, + { + label: "New Boost", + icon: "chrome://browser/skin/zen-icons/boost.svg", + isAvailable: window => { + if (!isNotEmptyTab(window)) { + return false; + } + + // Keep this action consistent with the rest of the Boosts UI. + if (!Services.prefs.getBoolPref("zen.boosts.enabled", false)) { + return false; + } + + const uri = window.gBrowser.currentURI; + return !!uri?.schemeIs && (uri.schemeIs("http") || uri.schemeIs("https")); + }, + command: window => { + const uri = window.gBrowser.currentURI; + if (!uri?.schemeIs || !(uri.schemeIs("http") || uri.schemeIs("https"))) { + return; + } + + let domain = ""; + try { + domain = uri.host; + } catch { + return; + } + + if (!domain) { + return; + } + + const { gZenBoostsManager } = ChromeUtils.importESModule( + "resource:///modules/zen/boosts/ZenBoostsManager.sys.mjs" + ); + const boost = gZenBoostsManager.createNewBoost(domain); + if (!boost) { + return; + } + gZenBoostsManager.openBoostWindow(window, boost, uri); + }, + }, { label: "Next Space", command: "cmd_zenWorkspaceForward", From 2fb59e2c824a7024d73612e5555da0cf70f71dee Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 27 May 2026 11:28:17 +0200 Subject: [PATCH 29/31] no-bug: New Crowdin updates (gh-13886) --- locales/ca/browser/browser/preferences/zen-preferences.ftl | 4 ++-- locales/ca/browser/browser/zen-boosts.ftl | 6 +++--- locales/cs/browser/browser/preferences/zen-preferences.ftl | 4 ++-- .../es-ES/browser/browser/preferences/zen-preferences.ftl | 4 ++-- locales/es-ES/browser/browser/zen-boosts.ftl | 6 +++--- .../ga-IE/browser/browser/preferences/zen-preferences.ftl | 4 ++-- locales/ga-IE/browser/browser/zen-boosts.ftl | 6 +++--- locales/hu/browser/browser/zen-boosts.ftl | 4 ++-- .../sv-SE/browser/browser/preferences/zen-preferences.ftl | 4 ++-- locales/sv-SE/browser/browser/zen-boosts.ftl | 6 +++--- 10 files changed, 24 insertions(+), 24 deletions(-) diff --git a/locales/ca/browser/browser/preferences/zen-preferences.ftl b/locales/ca/browser/browser/preferences/zen-preferences.ftl index b7477fb97..853f16287 100644 --- a/locales/ca/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ca/browser/browser/preferences/zen-preferences.ftl @@ -281,7 +281,7 @@ zen-workspace-shortcut-switch-9 = Canvia a l'espai de treball 9 zen-workspace-shortcut-switch-10 = Canvia a l'espai de treball 10 zen-workspace-shortcut-forward = Espai de treball següent zen-workspace-shortcut-backward = Espai de treball anterior -zen-workspace-shortcut-create = Create New Workspace +zen-workspace-shortcut-create = Crea un nou espai de treball zen-sidebar-shortcut-toggle = Commuta l'amplada de la barra lateral zen-pinned-tab-shortcut-reset = Restableix la pestanya fixada a l'URL fixat zen-split-view-shortcut-grid = Commuta la quadrícula de la vista dividida @@ -319,4 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Commuta l'accessibilitat zen-close-all-unpinned-tabs-shortcut = Tanca totes les pestanyes no fixades zen-new-unsynced-window-shortcut = Nova finestra en blanc zen-duplicate-tab-shortcut = Duplica la pestanya -zen-key-find-selection = Find Selection +zen-key-find-selection = Cerca la selecció diff --git a/locales/ca/browser/browser/zen-boosts.ftl b/locales/ca/browser/browser/zen-boosts.ftl index 877c5afb2..588c417b0 100644 --- a/locales/ca/browser/browser/zen-boosts.ftl +++ b/locales/ca/browser/browser/zen-boosts.ftl @@ -11,7 +11,7 @@ zen-boost-edit-reset = zen-boost-edit-delete = .label = Suprimeix la millora zen-boost-size = Mida -zen-boost-case = Case +zen-boost-case = Cas zen-boost-zap = Amaga zen-boost-code = Codi zen-boost-back = Enrere @@ -48,9 +48,9 @@ zen-unzap-tooltip = *[other] { $elementCount } elements amagats } zen-boost-save = - .label = Export Boost + .label = Exporta la millora zen-boost-load = - .label = Import Boost + .label = Importa la millora zen-panel-ui-boosts-exported-message = S'ha exportat la millora! zen-site-data-boosts = Millores zen-site-data-create-boost = diff --git a/locales/cs/browser/browser/preferences/zen-preferences.ftl b/locales/cs/browser/browser/preferences/zen-preferences.ftl index 97baced60..b0194f747 100644 --- a/locales/cs/browser/browser/preferences/zen-preferences.ftl +++ b/locales/cs/browser/browser/preferences/zen-preferences.ftl @@ -281,7 +281,7 @@ zen-workspace-shortcut-switch-9 = Přepnout na pracovní prostor 9 zen-workspace-shortcut-switch-10 = Přepnout do pracovního prostoru 10 zen-workspace-shortcut-forward = Přeposlat pracovní prostor zen-workspace-shortcut-backward = Zpětný pracovní prostor -zen-workspace-shortcut-create = Create New Workspace +zen-workspace-shortcut-create = Nový Workspace zen-sidebar-shortcut-toggle = Přepnout šířku postranního panelu zen-pinned-tab-shortcut-reset = Obnovit připnuté záložky na připnuté URL zen-split-view-shortcut-grid = Přepnout rozdělený pohled v mřížce @@ -319,4 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Přepnout přístupnost zen-close-all-unpinned-tabs-shortcut = Zavřít všechny nepřipnuté panely zen-new-unsynced-window-shortcut = Nové nesynchronizované okno zen-duplicate-tab-shortcut = Duplikovat panel -zen-key-find-selection = Find Selection +zen-key-find-selection = Najít Část diff --git a/locales/es-ES/browser/browser/preferences/zen-preferences.ftl b/locales/es-ES/browser/browser/preferences/zen-preferences.ftl index ac75637f5..305e2f0b6 100644 --- a/locales/es-ES/browser/browser/preferences/zen-preferences.ftl +++ b/locales/es-ES/browser/browser/preferences/zen-preferences.ftl @@ -281,7 +281,7 @@ zen-workspace-shortcut-switch-9 = Cambiar a espacio de trabajo 9 zen-workspace-shortcut-switch-10 = Cambiar a espacio de trabajo 10 zen-workspace-shortcut-forward = Espacio de trabajo siguiente zen-workspace-shortcut-backward = Espacio de trabajo anterior -zen-workspace-shortcut-create = Create New Workspace +zen-workspace-shortcut-create = Crear nuevo espacio de trabajo zen-sidebar-shortcut-toggle = Cambiar el ancho de la barra lateral zen-pinned-tab-shortcut-reset = Restablecer pestaña fijada a la URL fijada zen-split-view-shortcut-grid = Cambiar a vista dividida en cuadrícula @@ -319,4 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Alternar accesibilidad zen-close-all-unpinned-tabs-shortcut = Cerrar todas las pestañas sin fijar zen-new-unsynced-window-shortcut = Nueva ventana no sincronizada zen-duplicate-tab-shortcut = Duplicar pestaña -zen-key-find-selection = Find Selection +zen-key-find-selection = Encontrar selección diff --git a/locales/es-ES/browser/browser/zen-boosts.ftl b/locales/es-ES/browser/browser/zen-boosts.ftl index dfb4cdbd4..3af79691b 100644 --- a/locales/es-ES/browser/browser/zen-boosts.ftl +++ b/locales/es-ES/browser/browser/zen-boosts.ftl @@ -11,7 +11,7 @@ zen-boost-edit-reset = zen-boost-edit-delete = .label = Borrar Boost zen-boost-size = Tamaño -zen-boost-case = Case +zen-boost-case = Formato zen-boost-zap = Borrar zen-boost-code = Código zen-boost-back = Atrás @@ -48,9 +48,9 @@ zen-unzap-tooltip = *[other] { $elementCount } elementos borrados } zen-boost-save = - .label = Export Boost + .label = Exportar Boost zen-boost-load = - .label = Import Boost + .label = Importar Boost zen-panel-ui-boosts-exported-message = ¡Boost exportado! zen-site-data-boosts = Boosts zen-site-data-create-boost = diff --git a/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl b/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl index 45215b2fa..e370988ce 100644 --- a/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl @@ -281,7 +281,7 @@ zen-workspace-shortcut-switch-9 = Athraigh go Spás Oibre 9 zen-workspace-shortcut-switch-10 = Athraigh go Spás Oibre 10 zen-workspace-shortcut-forward = Spás Oibre Ar Aghaidh zen-workspace-shortcut-backward = Spás Oibre Ar Ais -zen-workspace-shortcut-create = Create New Workspace +zen-workspace-shortcut-create = Cruthaigh Spás Oibre Nua zen-sidebar-shortcut-toggle = Leithead an Bharra Taoibh a Scoránaigh zen-pinned-tab-shortcut-reset = Athshocraigh an Cluaisín Prionáilte go dtí an URL Prionáilte zen-split-view-shortcut-grid = Eangach Radharc Scoilte a Athsholáthar @@ -319,4 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Scoránaigh Inrochtaineacht zen-close-all-unpinned-tabs-shortcut = Dún Gach Cluaisín Gan Phionáil zen-new-unsynced-window-shortcut = Fuinneog Nua Neamhshioncrónaithe zen-duplicate-tab-shortcut = Cluaisín Dúblach -zen-key-find-selection = Find Selection +zen-key-find-selection = Aimsigh Rogha diff --git a/locales/ga-IE/browser/browser/zen-boosts.ftl b/locales/ga-IE/browser/browser/zen-boosts.ftl index ecf56e102..2491bae48 100644 --- a/locales/ga-IE/browser/browser/zen-boosts.ftl +++ b/locales/ga-IE/browser/browser/zen-boosts.ftl @@ -11,7 +11,7 @@ zen-boost-edit-reset = zen-boost-edit-delete = .label = Scrios an Treisiú zen-boost-size = Méid -zen-boost-case = Case +zen-boost-case = Cás zen-boost-zap = Zapáil zen-boost-code = Cód zen-boost-back = Ar ais @@ -48,9 +48,9 @@ zen-unzap-tooltip = *[other] { $elementCount } eilimintí Zapáilte } zen-boost-save = - .label = Export Boost + .label = Borradh Easpórtála zen-boost-load = - .label = Import Boost + .label = Borradh Iompórtála zen-panel-ui-boosts-exported-message = Borradh easpórtáilte! zen-site-data-boosts = Borradh zen-site-data-create-boost = diff --git a/locales/hu/browser/browser/zen-boosts.ftl b/locales/hu/browser/browser/zen-boosts.ftl index 2cdbb4a75..0437ff86a 100644 --- a/locales/hu/browser/browser/zen-boosts.ftl +++ b/locales/hu/browser/browser/zen-boosts.ftl @@ -48,9 +48,9 @@ zen-unzap-tooltip = *[other] { $elementCount } elements zapped } zen-boost-save = - .label = Export Boost + .label = Boost exportálása zen-boost-load = - .label = Import Boost + .label = Boost importálása zen-panel-ui-boosts-exported-message = Boostok exportálva! zen-site-data-boosts = Boostok zen-site-data-create-boost = diff --git a/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl b/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl index 9a144f5b0..fca5ef3b3 100644 --- a/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl +++ b/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl @@ -281,7 +281,7 @@ zen-workspace-shortcut-switch-9 = Växla till arbetsyta 9 zen-workspace-shortcut-switch-10 = Växla till arbetsyta 10 zen-workspace-shortcut-forward = Vidarebefordra arbetsyta zen-workspace-shortcut-backward = Bakåt arbetsyta -zen-workspace-shortcut-create = Create New Workspace +zen-workspace-shortcut-create = Skapa ny arbetsyta zen-sidebar-shortcut-toggle = Växla sidofältets bredd zen-pinned-tab-shortcut-reset = Återställ Fäst flik till Pinned URL zen-split-view-shortcut-grid = Växla delad vy rutnät @@ -319,4 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Växla tillgänglighetsinställning zen-close-all-unpinned-tabs-shortcut = Stäng alla flikar som inte är fästa zen-new-unsynced-window-shortcut = Nytt tomt fönster zen-duplicate-tab-shortcut = Duplicera flik -zen-key-find-selection = Find Selection +zen-key-find-selection = Hitta val diff --git a/locales/sv-SE/browser/browser/zen-boosts.ftl b/locales/sv-SE/browser/browser/zen-boosts.ftl index e784c0f25..c010d0a98 100644 --- a/locales/sv-SE/browser/browser/zen-boosts.ftl +++ b/locales/sv-SE/browser/browser/zen-boosts.ftl @@ -11,7 +11,7 @@ zen-boost-edit-reset = zen-boost-edit-delete = .label = Ta bort förändring zen-boost-size = Storlek -zen-boost-case = Case +zen-boost-case = Fall zen-boost-zap = Zappa zen-boost-code = Kod zen-boost-back = Tillbaka @@ -48,9 +48,9 @@ zen-unzap-tooltip = *[other] { $elementCount } flera element zappade } zen-boost-save = - .label = Export Boost + .label = Exportera förändring zen-boost-load = - .label = Import Boost + .label = Importera förändring zen-panel-ui-boosts-exported-message = Förändring exporterad! zen-site-data-boosts = Förändringar zen-site-data-create-boost = From 8a0a6cbede134bd54aa809441c96817fd360c9dc Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 27 May 2026 13:39:22 +0200 Subject: [PATCH 30/31] gh-13844: Part 3 - Fixed text inputs not being filtered through boosts (gh-13893) --- src/image/AutoRestoreSVGState-h.patch | 14 ++++ src/layout/base/nsPresContext-h.patch | 39 +++++++++ src/layout/painting/nsImageRenderer-cpp.patch | 13 ++- src/layout/svg/SVGImageContext-cpp.patch | 41 +++++++++- src/layout/svg/SVGImageContext-h.patch | 80 +++++++++++++++++++ src/widget/Theme-cpp.patch | 56 +++++++++++++ src/widget/Theme-h.patch | 19 +++++ src/zen/boosts/nsZenBoostsBackend.cpp | 38 +++++---- 8 files changed, 280 insertions(+), 20 deletions(-) create mode 100644 src/image/AutoRestoreSVGState-h.patch create mode 100644 src/layout/base/nsPresContext-h.patch create mode 100644 src/layout/svg/SVGImageContext-h.patch create mode 100644 src/widget/Theme-cpp.patch create mode 100644 src/widget/Theme-h.patch diff --git a/src/image/AutoRestoreSVGState-h.patch b/src/image/AutoRestoreSVGState-h.patch new file mode 100644 index 000000000..bd6502135 --- /dev/null +++ b/src/image/AutoRestoreSVGState-h.patch @@ -0,0 +1,14 @@ +diff --git a/image/AutoRestoreSVGState.h b/image/AutoRestoreSVGState.h +index be639a7b78c13c2d56be49a9690bf711ccaf0a8f..28bea58034ead1206d77521934e92d3a69bfd84b 100644 +--- a/image/AutoRestoreSVGState.h ++++ b/image/AutoRestoreSVGState.h +@@ -47,6 +47,9 @@ class MOZ_STACK_CLASS AutoRestoreSVGState final { + } + return dom::PrefersColorSchemeOverride::None; + }()); ++ pc->SetZenBoostsOverride(aSVGContext.GetZenBoostsAccent(), ++ aSVGContext.GetZenBoostsComplementaryRotation(), ++ aSVGContext.GetZenBoostsInverted()); + } + + aSVGDocumentWrapper->mIsDrawing = true; diff --git a/src/layout/base/nsPresContext-h.patch b/src/layout/base/nsPresContext-h.patch new file mode 100644 index 000000000..f408114e4 --- /dev/null +++ b/src/layout/base/nsPresContext-h.patch @@ -0,0 +1,39 @@ +diff --git a/layout/base/nsPresContext.h b/layout/base/nsPresContext.h +index 13aa7141c8e5297d0dd6aa9bd78fd32f050e8123..149a89e928d354f116c54f71605830f5ec6b7f8a 100644 +--- a/layout/base/nsPresContext.h ++++ b/layout/base/nsPresContext.h +@@ -594,6 +594,22 @@ class nsPresContext : public nsISupports, + */ + void SetColorSchemeOverride(mozilla::dom::PrefersColorSchemeOverride); + ++ // Zen boosts override. SVG images render in their own document, which has no ++ // BrowsingContext to carry the page's boost, so the host propagates it here. ++ void SetZenBoostsOverride(nscolor aAccent, float aComplementaryRotation, ++ bool aInverted) { ++ mZenBoostsOverrideAccent = aAccent; ++ mZenBoostsOverrideComplementaryRotation = aComplementaryRotation; ++ mZenBoostsOverrideInverted = aInverted; ++ mHasZenBoostsOverride = true; ++ } ++ bool HasZenBoostsOverride() const { return mHasZenBoostsOverride; } ++ nscolor ZenBoostsOverrideAccent() const { return mZenBoostsOverrideAccent; } ++ float ZenBoostsOverrideComplementaryRotation() const { ++ return mZenBoostsOverrideComplementaryRotation; ++ } ++ bool ZenBoostsOverrideInverted() const { return mZenBoostsOverrideInverted; } ++ + /** + * Return the device's screen size in inches, for font size + * inflation. +@@ -1441,6 +1457,11 @@ class nsPresContext : public nsISupports, + mozilla::dom::PrefersColorSchemeOverride mOverriddenOrEmbedderColorScheme; + mozilla::StyleForcedColors mForcedColors; + ++ nscolor mZenBoostsOverrideAccent = 0; ++ float mZenBoostsOverrideComplementaryRotation = 0.0f; ++ bool mZenBoostsOverrideInverted = false; ++ bool mHasZenBoostsOverride = false; ++ + protected: + virtual ~nsPresContext(); + diff --git a/src/layout/painting/nsImageRenderer-cpp.patch b/src/layout/painting/nsImageRenderer-cpp.patch index 574f1c0f6..6323f3471 100644 --- a/src/layout/painting/nsImageRenderer-cpp.patch +++ b/src/layout/painting/nsImageRenderer-cpp.patch @@ -1,5 +1,5 @@ diff --git a/layout/painting/nsImageRenderer.cpp b/layout/painting/nsImageRenderer.cpp -index 4acb7670e971024f9c63e48ff711bbdd1dc02301..9ac1ae1b66eb6fb10195cd3709e0e29d8d53b574 100644 +index 4acb7670e971024f9c63e48ff711bbdd1dc02301..518543f29f396d819a71edb984879de22f8434a8 100644 --- a/layout/painting/nsImageRenderer.cpp +++ b/layout/painting/nsImageRenderer.cpp @@ -90,7 +90,7 @@ static already_AddRefed GetSymbolicIconImage(nsAtom* aName, @@ -29,7 +29,16 @@ index 4acb7670e971024f9c63e48ff711bbdd1dc02301..9ac1ae1b66eb6fb10195cd3709e0e29d renderer.BuildWebRenderDisplayItems(aBuilder, aSc, aDest, aFill, aRepeatSize, aSrc, -@@ -1076,7 +1076,7 @@ ImgDrawResult nsImageRenderer::DrawShapeImage(nsPresContext* aPresContext, +@@ -670,6 +670,8 @@ ImgDrawResult nsImageRenderer::BuildWebRenderDisplayItems( + nsPresContext::AppUnitsToIntCSSPixels(aDest.height)}; + + SVGImageContext svgContext(Some(destCSSSize)); ++ SVGImageContext::MaybeStoreZenBoosts(svgContext, ++ *mForFrame->PresContext()); + Maybe region; + + const int32_t appUnitsPerDevPixel = +@@ -1076,7 +1078,7 @@ ImgDrawResult nsImageRenderer::DrawShapeImage(nsPresContext* aPresContext, if (mImage->IsGradient()) { nsCSSGradientRenderer renderer = nsCSSGradientRenderer::Create( diff --git a/src/layout/svg/SVGImageContext-cpp.patch b/src/layout/svg/SVGImageContext-cpp.patch index e14b964cd..4e8258689 100644 --- a/src/layout/svg/SVGImageContext-cpp.patch +++ b/src/layout/svg/SVGImageContext-cpp.patch @@ -1,8 +1,45 @@ diff --git a/layout/svg/SVGImageContext.cpp b/layout/svg/SVGImageContext.cpp -index ecbda963b75fb70b62885a0c8f7a517011a8d5dc..1200a51aee7db4ee1a014308581ada1002c0d05f 100644 +index ecbda963b75fb70b62885a0c8f7a517011a8d5dc..5f55f0a4174db830656d434b5295835ab18e6619 100644 --- a/layout/svg/SVGImageContext.cpp +++ b/layout/svg/SVGImageContext.cpp -@@ -57,12 +57,14 @@ void SVGImageContext::MaybeStoreContextPaint(SVGImageContext& aContext, +@@ -10,6 +10,7 @@ + #include "mozilla/LookAndFeel.h" + #include "mozilla/ServoCSSParser.h" + #include "mozilla/StaticPrefs_svg.h" ++#include "mozilla/dom/BrowsingContext.h" + #include "mozilla/dom/Document.h" + #include "nsIFrame.h" + #include "nsISVGPaintContext.h" +@@ -18,6 +19,19 @@ + + namespace mozilla { + ++/* static */ ++void SVGImageContext::MaybeStoreZenBoosts(SVGImageContext& aContext, ++ const nsPresContext& aPresContext) { ++ if (dom::Document* doc = aPresContext.Document()) { ++ if (dom::BrowsingContext* bc = doc->GetBrowsingContext()) { ++ bc = bc->Top(); ++ aContext.SetZenBoosts(bc->ZenBoostsData(), ++ bc->ZenBoostsComplementaryRotation(), ++ bc->IsZenBoostsInverted()); ++ } ++ } ++} ++ + /* static */ + void SVGImageContext::MaybeStoreContextPaint(SVGImageContext& aContext, + nsIFrame* aFromFrame, +@@ -43,6 +57,8 @@ void SVGImageContext::MaybeStoreContextPaint(SVGImageContext& aContext, + aContext.SetColorScheme(Some(scheme)); + } + ++ MaybeStoreZenBoosts(aContext, aPresContext); ++ + const nsStyleSVG* style = aStyle.StyleSVG(); + if (!style->ExposesContextProperties()) { + // Content must have '-moz-context-properties' set to the names of the +@@ -57,12 +73,14 @@ void SVGImageContext::MaybeStoreContextPaint(SVGImageContext& aContext, if ((style->mMozContextProperties.bits & StyleContextPropertyBits::FILL) && style->mFill.kind.IsColor()) { haveContextPaint = true; diff --git a/src/layout/svg/SVGImageContext-h.patch b/src/layout/svg/SVGImageContext-h.patch new file mode 100644 index 000000000..c0cff0a5d --- /dev/null +++ b/src/layout/svg/SVGImageContext-h.patch @@ -0,0 +1,80 @@ +diff --git a/layout/svg/SVGImageContext.h b/layout/svg/SVGImageContext.h +index 159d9cbbd0711076ee6c2a71a3da04bd92a0102c..daefc40590c4d7d7fac9db25c6ec4ba2424dded5 100644 +--- a/layout/svg/SVGImageContext.h ++++ b/layout/svg/SVGImageContext.h +@@ -6,6 +6,7 @@ + #define LAYOUT_SVG_SVGIMAGECONTEXT_H_ + + #include "Units.h" ++#include "nsColor.h" + #include "mozilla/Maybe.h" + #include "mozilla/SVGContextPaint.h" + #include "mozilla/SVGPreserveAspectRatio.h" +@@ -63,6 +64,11 @@ class SVGImageContext { + nsISVGPaintContext* aPaintContext, + imgIContainer* aImgContainer); + ++ // Carry the host document's Zen boost into the image context so the image ++ // renders with the same accent/inversion as the page. ++ static void MaybeStoreZenBoosts(SVGImageContext& aContext, ++ const nsPresContext& aPresContext); ++ + const Maybe& GetViewportSize() const { return mViewportSize; } + + void SetViewportSize(const Maybe& aSize) { +@@ -75,6 +81,21 @@ class SVGImageContext { + mColorScheme = aScheme; + } + ++ // Zen boosts state carried from the host document so the image renders with ++ // the same boost. Part of the cache key below so boosted and unboosted ++ // renderings don't collide. ++ void SetZenBoosts(nscolor aAccent, float aComplementaryRotation, ++ bool aInverted) { ++ mZenBoostsAccent = aAccent; ++ mZenBoostsComplementaryRotation = aComplementaryRotation; ++ mZenBoostsInverted = aInverted; ++ } ++ nscolor GetZenBoostsAccent() const { return mZenBoostsAccent; } ++ float GetZenBoostsComplementaryRotation() const { ++ return mZenBoostsComplementaryRotation; ++ } ++ bool GetZenBoostsInverted() const { return mZenBoostsInverted; } ++ + const Maybe& GetPreserveAspectRatio() const { + return mPreserveAspectRatio; + } +@@ -107,7 +128,11 @@ class SVGImageContext { + + return contextPaintIsEqual && mViewportSize == aOther.mViewportSize && + mPreserveAspectRatio == aOther.mPreserveAspectRatio && +- mColorScheme == aOther.mColorScheme; ++ mColorScheme == aOther.mColorScheme && ++ mZenBoostsAccent == aOther.mZenBoostsAccent && ++ mZenBoostsComplementaryRotation == ++ aOther.mZenBoostsComplementaryRotation && ++ mZenBoostsInverted == aOther.mZenBoostsInverted; + } + + bool operator!=(const SVGImageContext&) const = default; +@@ -119,7 +144,9 @@ class SVGImageContext { + } + return HashGeneric(hash, mViewportSize.map(HashSize).valueOr(0), + mPreserveAspectRatio.map(HashPAR).valueOr(0), +- mColorScheme.map(HashColorScheme).valueOr(0)); ++ mColorScheme.map(HashColorScheme).valueOr(0), ++ mZenBoostsAccent, mZenBoostsComplementaryRotation, ++ mZenBoostsInverted); + } + + private: +@@ -138,6 +165,9 @@ class SVGImageContext { + Maybe mViewportSize; + Maybe mPreserveAspectRatio; + Maybe mColorScheme; ++ nscolor mZenBoostsAccent = 0; ++ float mZenBoostsComplementaryRotation = 0.0f; ++ bool mZenBoostsInverted = false; + }; + + } // namespace mozilla diff --git a/src/widget/Theme-cpp.patch b/src/widget/Theme-cpp.patch new file mode 100644 index 000000000..1b88b2c75 --- /dev/null +++ b/src/widget/Theme-cpp.patch @@ -0,0 +1,56 @@ +diff --git a/widget/Theme.cpp b/widget/Theme.cpp +index 766a8ca4bc6fcc98f719ad4f472b20bc1d198ac9..be4419cfafb55e5cac8f5de741185ee3cabc4722 100644 +--- a/widget/Theme.cpp ++++ b/widget/Theme.cpp +@@ -18,6 +18,7 @@ + #include "mozilla/RelativeLuminanceUtils.h" + #include "mozilla/ScrollContainerFrame.h" + #include "mozilla/StaticPrefs_widget.h" ++#include "mozilla/nsZenBoostsBackend.h" + #include "mozilla/webrender/WebRenderAPI.h" + #include "nsCSSColorUtils.h" + #include "nsCSSRendering.h" +@@ -670,10 +671,15 @@ template + void Theme::PaintTextField(PaintBackendData& aPaintData, + const LayoutDeviceRect& aRect, + const ElementState& aState, const Colors& aColors, +- DPIRatio aDpiRatio) { ++ DPIRatio aDpiRatio, const nsIFrame* aFrame) { + auto [backgroundColor, borderColor] = + ComputeTextfieldColors(aState, aColors, OutlineCoversBorder::Yes); + ++ // The default field background comes from a theme/system color rather than a ++ // resolved style color, so apply Zen boosts here to match boosted content. ++ backgroundColor = sRGBColor::FromABGR(zen::nsZenBoostsBackend::ResolveStyleColor( ++ backgroundColor.ToABGR(), aFrame)); ++ + const CSSCoord radius = 2.0f; + + ThemeDrawing::PaintRoundedRectWithRadius(aPaintData, aRect, backgroundColor, +@@ -690,9 +696,9 @@ template + void Theme::PaintListbox(PaintBackendData& aPaintData, + const LayoutDeviceRect& aRect, + const ElementState& aState, const Colors& aColors, +- DPIRatio aDpiRatio) { ++ DPIRatio aDpiRatio, const nsIFrame* aFrame) { + // We happen to share style between text fields and list boxes. +- return PaintTextField(aPaintData, aRect, aState, aColors, aDpiRatio); ++ return PaintTextField(aPaintData, aRect, aState, aColors, aDpiRatio, aFrame); + } + + template +@@ -1158,10 +1164,12 @@ bool Theme::DoDrawWidgetBackground(PaintBackendData& aPaintData, + case StyleAppearance::Textfield: + case StyleAppearance::NumberInput: + case StyleAppearance::PasswordInput: +- PaintTextField(aPaintData, devPxRect, elementState, colors, dpiRatio); ++ PaintTextField(aPaintData, devPxRect, elementState, colors, dpiRatio, ++ aFrame); + break; + case StyleAppearance::Listbox: +- PaintListbox(aPaintData, devPxRect, elementState, colors, dpiRatio); ++ PaintListbox(aPaintData, devPxRect, elementState, colors, dpiRatio, ++ aFrame); + break; + case StyleAppearance::Menulist: + PaintMenulist(aPaintData, devPxRect, elementState, colors, dpiRatio); diff --git a/src/widget/Theme-h.patch b/src/widget/Theme-h.patch new file mode 100644 index 000000000..e7aad5d42 --- /dev/null +++ b/src/widget/Theme-h.patch @@ -0,0 +1,19 @@ +diff --git a/widget/Theme.h b/widget/Theme.h +index 4e0acbb25b9e39b712a2d96d8dee366dfdce4a01..9aa377ca9f0d7f96d938339d198b797ceebbc602 100644 +--- a/widget/Theme.h ++++ b/widget/Theme.h +@@ -161,10 +161,12 @@ class Theme : protected nsNativeTheme, public nsITheme { + const ElementState&, DPIRatio); + template + void PaintTextField(PaintBackendData&, const LayoutDeviceRect&, +- const ElementState&, const Colors&, DPIRatio); ++ const ElementState&, const Colors&, DPIRatio, ++ const nsIFrame*); + template + void PaintListbox(PaintBackendData&, const LayoutDeviceRect&, +- const ElementState&, const Colors&, DPIRatio); ++ const ElementState&, const Colors&, DPIRatio, ++ const nsIFrame*); + template + void PaintMenulist(PaintBackendData&, const LayoutDeviceRect&, + const ElementState&, const Colors&, DPIRatio); diff --git a/src/zen/boosts/nsZenBoostsBackend.cpp b/src/zen/boosts/nsZenBoostsBackend.cpp index f9eaf6461..6a64cd724 100644 --- a/src/zen/boosts/nsZenBoostsBackend.cpp +++ b/src/zen/boosts/nsZenBoostsBackend.cpp @@ -386,8 +386,9 @@ inline static nscolor zenInvertColorChannel(nscolor aColor) { * not touch (devtools highlighters, screenshots, the boosts overlays * themselves, and other native-anonymous UI such as scrollbars). A null frame * gives no document to anchor the boost on, so it is treated the same way. - * CSS generated content (::before/::after/::marker/::backdrop) is - * native-anonymous too but is author content, so it is not exempt. + * Author-facing content that happens to be native-anonymous is not exempt: + * UA-widget form-control internals (including the text the user types into an + * input), and pseudo-elements such as ::before/::after/::marker/::placeholder. */ ZEN_HOT_FUNCTION inline static bool IsBoostExemptFrame(const nsIFrame* aFrame) { @@ -398,21 +399,17 @@ inline static bool IsBoostExemptFrame(const nsIFrame* aFrame) { if (!content || !content->IsInNativeAnonymousSubtree()) { return false; } - if (const nsIContent* root = - content->GetClosestNativeAnonymousSubtreeRoot()) { - if (root->IsElement()) { - switch (root->AsElement()->GetPseudoElementType()) { - case mozilla::PseudoStyleType::Before: - case mozilla::PseudoStyleType::After: - case mozilla::PseudoStyleType::Marker: - case mozilla::PseudoStyleType::Backdrop: - return false; - default: - break; - } - } + // Form-control internals (and media controls) live in UA-widget shadow + // trees; the text typed into an input is author content and should be + // boosted. Classic native-anonymous UI (scrollbars, devtools) has no + // containing shadow and falls through to the pseudo-element check below. + if (content->GetContainingShadow()) { + return false; } - return true; + const nsIContent* root = content->GetClosestNativeAnonymousSubtreeRoot(); + return !root || !root->IsElement() || + !mozilla::PseudoStyle::IsPseudoElement( + root->AsElement()->GetPseudoElementType()); } /** @@ -429,6 +426,15 @@ inline static void GetZenBoostsDataForFrame(const nsIFrame* aFrame, if (!presContext) { return; } + // SVG images render in their own document with no BrowsingContext; the host + // propagates its boost onto the image document's PresContext instead. + if (presContext->HasZenBoostsOverride()) { + *aData = presContext->ZenBoostsOverrideAccent(); + *aComplementaryRotation = + presContext->ZenBoostsOverrideComplementaryRotation(); + *aIsInverted = presContext->ZenBoostsOverrideInverted(); + return; + } const mozilla::dom::BrowsingContext* browsingContext = nullptr; if (auto document = presContext->Document()) { browsingContext = document->GetBrowsingContext(); From 5bbbadd77be956deaf91633cd4f0611403b0ba53 Mon Sep 17 00:00:00 2001 From: arieleli01212 Date: Wed, 27 May 2026 17:24:28 +0300 Subject: [PATCH 31/31] gh-13857: Use Zen icon for share toolbar button (gh-13896) Fixes #13857. This updates the toolbar share button to use Zen's shared icon set instead of the upstream Firefox asset. The downloads button already points at the Zen icon set, so this keeps the two toolbar icons visually consistent. Validation: - Checked that `share-tab-button` is the Firefox toolbar share button id. - Confirmed the repo lint script requires the generated `engine` checkout, which is not present in this clone. Co-authored-by: arieleli01212 <207917221+arieleli01212@users.noreply.github.com> --- src/browser/themes/shared/zen-icons/icons.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/browser/themes/shared/zen-icons/icons.css b/src/browser/themes/shared/zen-icons/icons.css index cb1b6f892..ed143a42b 100644 --- a/src/browser/themes/shared/zen-icons/icons.css +++ b/src/browser/themes/shared/zen-icons/icons.css @@ -435,6 +435,7 @@ } #zen-copy-current-url-button, +#share-tab-button, #zen-site-data-header-share { list-style-image: url("share.svg"); }