From 733061fbe3dcc3131fb45693649efa58783cb5bc Mon Sep 17 00:00:00 2001 From: Connor Griffin Date: Sun, 21 Jun 2026 02:20:37 -0700 Subject: [PATCH 01/21] gh-11766: Fixed video fullscreen not working while in glance (gh-14272) Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com> Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com> --- src/zen/glance/ZenGlanceManager.mjs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/zen/glance/ZenGlanceManager.mjs b/src/zen/glance/ZenGlanceManager.mjs index affc555c2..9bb4d6e20 100644 --- a/src/zen/glance/ZenGlanceManager.mjs +++ b/src/zen/glance/ZenGlanceManager.mjs @@ -53,6 +53,10 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { #setupEventListeners() { window.addEventListener("TabClose", this.onTabClose.bind(this)); window.addEventListener("TabSelect", this.onLocationChange.bind(this)); + window.addEventListener( + "MozDOMFullscreen:Entered", + this.onFullscreenEntered.bind(this) + ); document .getElementById("tabbrowser-tabpanels") @@ -1414,6 +1418,23 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { } } + /** + * Handle DOM Fullscreen request while inside glance + * + * @param {Event} event - The MozDOMFullscreen:Entered event + */ + onFullscreenEntered(event) { + const browser = this.#currentBrowser; + + if (!browser) { + return; + } + + if (event.target === browser) { + this.fullyOpenGlance(); + } + } + /** * Manage tab close for glance tabs * From 40080a25dc876eabd87bc8cf1dd5e38e475ce20c Mon Sep 17 00:00:00 2001 From: fen4flo <75260616+FlorianButz@users.noreply.github.com> Date: Sun, 21 Jun 2026 15:18:02 +0200 Subject: [PATCH 02/21] gh-11245: Fix tab placement with Move Tab / Space Routing (gh-14324) Fixes #11245 --- src/zen/spaces/ZenSpaceManager.mjs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/zen/spaces/ZenSpaceManager.mjs b/src/zen/spaces/ZenSpaceManager.mjs index 3ba066179..52f692bbe 100644 --- a/src/zen/spaces/ZenSpaceManager.mjs +++ b/src/zen/spaces/ZenSpaceManager.mjs @@ -1506,19 +1506,27 @@ class nsZenWorkspaces { continue; } + const newtabPlacement = Services.prefs.getBoolPref( + "zen.view.show-newtab-button-top", + false + ); + const insertElement = newtabPlacement + ? container.firstChild + : container.lastChild; + if (container) { if (tab.group?.hasAttribute("split-view-group")) { gBrowser.zenHandleTabMove(tab.group, () => { for (const subTab of tab.group.tabs) { subTab.setAttribute("zen-workspace-id", workspaceID); } - container.insertBefore(tab.group, container.lastChild); + container.insertBefore(tab.group, insertElement); }); continue; } gBrowser.zenHandleTabMove(tab, () => { tab.setAttribute("zen-workspace-id", workspaceID); - container.insertBefore(tab, container.lastChild); + container.insertBefore(tab, insertElement); }); } // also change glance tab if it's the same tab From 183c58384142b3da09f8fb6273adefa095794da7 Mon Sep 17 00:00:00 2001 From: Bernhard Date: Sun, 21 Jun 2026 21:43:44 +0200 Subject: [PATCH 03/21] gh-14320: fix workspace change icon picker state when opening (gh-14321) The picker reset its page with a smooth scrollIntoView while the popup was hiding, and positioned the page before the popup was laid out, so it could animate/jump on open. Reset instantly on popupshown (after layout) instead, and drop the on-hide scroll so there's no visible animation. --- src/zen/common/emojis/ZenEmojiPicker.mjs | 87 ++++++++++++++---------- 1 file changed, 50 insertions(+), 37 deletions(-) diff --git a/src/zen/common/emojis/ZenEmojiPicker.mjs b/src/zen/common/emojis/ZenEmojiPicker.mjs index cf651e23c..97b2c1cce 100644 --- a/src/zen/common/emojis/ZenEmojiPicker.mjs +++ b/src/zen/common/emojis/ZenEmojiPicker.mjs @@ -6,29 +6,29 @@ import { nsZenDOMOperatedFeature } from "chrome://browser/content/zen-components // prettier-ignore const SVG_ICONS = [ - "airplane.svg", "american-football.svg", "baseball.svg", "basket.svg", - "bed.svg", "bell.svg", "bookmark.svg", "book.svg", - "briefcase.svg", "brush.svg", "bug.svg", "build.svg", - "cafe.svg", "call.svg", "card.svg", "chat.svg", - "checkbox.svg", "circle.svg", "cloud.svg", "code.svg", - "coins.svg", "construct.svg", "cutlery.svg", "egg.svg", - "extension-puzzle.svg", "eye.svg", "fast-food.svg", "fish.svg", - "flag.svg", "flame.svg", "flask.svg", "folder.svg", - "game-controller.svg", "globe-1.svg", "globe.svg", "grid-2x2.svg", - "grid-3x3.svg", "heart.svg", "ice-cream.svg", "image.svg", - "inbox.svg", "key.svg", "layers.svg", "leaf.svg", - "lightning.svg", "location.svg", "lock-closed.svg", "logo-rss.svg", - "logo-usd.svg", "mail.svg", "map.svg", "megaphone.svg", - "moon.svg", "music.svg", "navigate.svg", "nuclear.svg", - "page.svg", "palette.svg", "paw.svg", "people.svg", - "pizza.svg", "planet.svg", "present.svg", "rocket.svg", - "school.svg", "shapes.svg", "shirt.svg", "skull.svg", - "squares.svg", "square.svg", "star-1.svg", "star.svg", - "stats-chart.svg", "sun.svg", "tada.svg", "terminal.svg", - "ticket.svg", "time.svg", "trash.svg", "triangle.svg", - "video.svg", "volume-high.svg", "wallet.svg", "warning.svg", - "water.svg", "weight.svg", - ]; + "airplane.svg", "american-football.svg", "baseball.svg", "basket.svg", + "bed.svg", "bell.svg", "bookmark.svg", "book.svg", + "briefcase.svg", "brush.svg", "bug.svg", "build.svg", + "cafe.svg", "call.svg", "card.svg", "chat.svg", + "checkbox.svg", "circle.svg", "cloud.svg", "code.svg", + "coins.svg", "construct.svg", "cutlery.svg", "egg.svg", + "extension-puzzle.svg", "eye.svg", "fast-food.svg", "fish.svg", + "flag.svg", "flame.svg", "flask.svg", "folder.svg", + "game-controller.svg", "globe-1.svg", "globe.svg", "grid-2x2.svg", + "grid-3x3.svg", "heart.svg", "ice-cream.svg", "image.svg", + "inbox.svg", "key.svg", "layers.svg", "leaf.svg", + "lightning.svg", "location.svg", "lock-closed.svg", "logo-rss.svg", + "logo-usd.svg", "mail.svg", "map.svg", "megaphone.svg", + "moon.svg", "music.svg", "navigate.svg", "nuclear.svg", + "page.svg", "palette.svg", "paw.svg", "people.svg", + "pizza.svg", "planet.svg", "present.svg", "rocket.svg", + "school.svg", "shapes.svg", "shirt.svg", "skull.svg", + "squares.svg", "square.svg", "star-1.svg", "star.svg", + "stats-chart.svg", "sun.svg", "tada.svg", "terminal.svg", + "ticket.svg", "time.svg", "trash.svg", "triangle.svg", + "video.svg", "volume-high.svg", "wallet.svg", "warning.svg", + "water.svg", "weight.svg", +]; class nsZenEmojiPicker extends nsZenDOMOperatedFeature { #panel; @@ -47,6 +47,7 @@ class nsZenEmojiPicker extends nsZenDOMOperatedFeature { init() { this.#panel = document.getElementById("PanelUI-zen-emojis-picker"); this.#panel.addEventListener("popupshowing", this); + this.#panel.addEventListener("popupshown", this); this.#panel.addEventListener("popuphidden", this); this.#panel.addEventListener("command", this); this.searchInput.addEventListener("input", this); @@ -57,6 +58,9 @@ class nsZenEmojiPicker extends nsZenDOMOperatedFeature { case "popupshowing": this.#onPopupShowing(event); break; + case "popupshown": + this.#onPopupShown(event); + break; case "popuphidden": this.#onPopupHidden(event); break; @@ -103,17 +107,20 @@ class nsZenEmojiPicker extends nsZenDOMOperatedFeature { return document.getElementById("PanelUI-zen-emojis-picker-search"); } - #changePage(toSvg = false) { + #changePage(toSvg = false, { animate = true } = {}) { + const pages = document.getElementById("PanelUI-zen-emojis-picker-pages"); const itemToScroll = toSvg ? this.svgList - : document - .getElementById("PanelUI-zen-emojis-picker-pages") - .querySelector('[emojis="true"]'); - itemToScroll.scrollIntoView({ - behavior: "smooth", - block: "nearest", - inline: "start", - }); + : pages.querySelector('[emojis="true"]'); + if (animate) { + itemToScroll.scrollIntoView({ + behavior: "smooth", + block: "nearest", + inline: "start", + }); + } else { + pages.scrollLeft = toSvg ? itemToScroll.offsetLeft : 0; + } const button = document.getElementById( `PanelUI-zen-emojis-picker-change-${toSvg ? "svg" : "emojis"}` ); @@ -180,9 +187,6 @@ class nsZenEmojiPicker extends nsZenDOMOperatedFeature { }); emojiList.appendChild(item); } - setTimeout(() => { - this.searchInput.focus(); - }, 500); } const svgList = this.svgList; for (const icon of SVG_ICONS) { @@ -199,14 +203,23 @@ class nsZenEmojiPicker extends nsZenDOMOperatedFeature { } } + #onPopupShown(event) { + if (event.target !== this.#panel) { + return; + } + const allowEmojis = !this.#panel.hasAttribute("only-svg-icons"); + if (allowEmojis) { + this.searchInput.focus({ preventScroll: true }); + } + this.#changePage(false, { animate: false }); + } + #onPopupHidden(event) { if (event.target !== this.#panel) { return; } this.#clearEmojis(); - this.#changePage(false); - const emojiList = this.emojiList; emojiList.innerHTML = ""; From b6cb8338e30901b4dfc04efc0c302b3a2ba7837c Mon Sep 17 00:00:00 2001 From: moshyfawn Date: Tue, 23 Jun 2026 09:39:29 -0400 Subject: [PATCH 04/21] gh-14341: Fix about dialog footer alignment and restore legal links (gh-14342) --- src/browser/base/content/aboutDialog-css.patch | 18 ++++++++++++++++++ .../base/content/aboutDialog-xhtml.patch | 6 +++--- 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 src/browser/base/content/aboutDialog-css.patch diff --git a/src/browser/base/content/aboutDialog-css.patch b/src/browser/base/content/aboutDialog-css.patch new file mode 100644 index 000000000..af9814c85 --- /dev/null +++ b/src/browser/base/content/aboutDialog-css.patch @@ -0,0 +1,18 @@ +diff --git a/browser/base/content/aboutDialog.css b/browser/base/content/aboutDialog.css +index 017125bc2510e5f5e317a5e78c40d6aa9ded76ca..d343d8c62a2251e3c3a33ae8f2ab9c4c68218c22 100644 +--- a/browser/base/content/aboutDialog.css ++++ b/browser/base/content/aboutDialog.css +@@ -135,6 +135,13 @@ + margin: 0 40px; + } + ++#trademark { ++ font-size: xx-small; ++ text-align: center; ++ margin-block: 10px; ++ color: var(--text-color-deemphasized); ++} ++ + #currentChannel { + margin: 0; + padding: 0; diff --git a/src/browser/base/content/aboutDialog-xhtml.patch b/src/browser/base/content/aboutDialog-xhtml.patch index 333a28ed3..3665d002a 100644 --- a/src/browser/base/content/aboutDialog-xhtml.patch +++ b/src/browser/base/content/aboutDialog-xhtml.patch @@ -1,5 +1,5 @@ diff --git a/browser/base/content/aboutDialog.xhtml b/browser/base/content/aboutDialog.xhtml -index 3ffd464b960a4299a7dd0cd87e4fc2f781b9d593..ef9f42d1f0196902b4af31f4496891fcd6319831 100644 +index 3ffd464b960a4299a7dd0cd87e4fc2f781b9d593..7a831c8ee2b73bb89bf8a82ac24958b55c16a5aa 100644 --- a/browser/base/content/aboutDialog.xhtml +++ b/browser/base/content/aboutDialog.xhtml @@ -102,10 +102,6 @@ @@ -39,8 +39,8 @@ index 3ffd464b960a4299a7dd0cd87e4fc2f781b9d593..ef9f42d1f0196902b4af31f4496891fc