From df68cb5804904a37094f670e3464f432b5e30b82 Mon Sep 17 00:00:00 2001 From: Kazuki Yamada <114228021+baton-noir@users.noreply.github.com> Date: Sun, 22 Mar 2026 15:38:51 +0100 Subject: [PATCH] fix: add preference gate for macOS dock progress indicator Adds browser.taskbar.dockProgress.enabled (default: true) to allow disabling the macOS dock download progress indicator. When disabled, the dock icon is not replaced with a custom NSView during downloads, preserving the macOS Tahoe Clear/Dark/Tinted icon styling. Root cause: Firefox's nsMacDockSupport sets NSDockTile.contentView to a static bitmap + progress bar overlay, replacing the OS-managed icon that macOS applies Clear styling to. After download completes, macOS does not re-apply the styling. Upstream: https://bugzilla.mozilla.org/show_bug.cgi?id=1997246 Closes #12676 --- .../downloads/DownloadsTaskbar-sys-mjs.patch | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/browser/components/downloads/DownloadsTaskbar-sys-mjs.patch diff --git a/src/browser/components/downloads/DownloadsTaskbar-sys-mjs.patch b/src/browser/components/downloads/DownloadsTaskbar-sys-mjs.patch new file mode 100644 index 0000000000..5fc44849fb --- /dev/null +++ b/src/browser/components/downloads/DownloadsTaskbar-sys-mjs.patch @@ -0,0 +1,20 @@ +diff --git a/browser/components/downloads/DownloadsTaskbar.sys.mjs b/browser/components/downloads/DownloadsTaskbar.sys.mjs +--- a/browser/components/downloads/DownloadsTaskbar.sys.mjs ++++ b/browser/components/downloads/DownloadsTaskbar.sys.mjs +@@ -140,6 +140,16 @@ + (!aForcedBackend && gInterfaces.macTaskbarProgress) + ) { + // On Mac OS X, we have to register the global indicator only once. ++ // Skip if dock progress is disabled (workaround for macOS Tahoe ++ // Clear icon style reverting to coloured). See Bug 1997246. ++ if ( ++ !Services.prefs.getBoolPref( ++ "browser.taskbar.dockProgress.enabled", ++ true ++ ) ++ ) { ++ return; ++ } + this.#taskbarProgresses.add(gInterfaces.macTaskbarProgress); + // Free the XPCOM reference on shutdown, to prevent detecting a leak. + Services.obs.addObserver(() => {