Compare commits

...

83 Commits

Author SHA1 Message Date
mr. m
cd1616d1c0 gh-13761: Fixed closing a split view selecting it on other windows (gh-13790) 2026-05-21 18:18:18 +02:00
mr. m
0b9f0bbe91 no-bug: Lower boosts radius for macos (gh-13784) 2026-05-21 09:21:19 +02:00
Ashvin Jangid
b726dc8052 gh-13612: display "Space" key name correctly in keyboard shortcuts page (gh-13774) 2026-05-21 09:14:33 +02:00
Ashvin Jangid
81d30b906a gh-13776: fix shortcut conflict detection failing with special keys (gh-13777) 2026-05-21 09:14:18 +02:00
mr. m
ae14d05290 no-bug: Update to Firefox 151.0 (gh-13775) 2026-05-20 16:51:06 +02:00
mr. m
8840bd77ae no-bug: Let overflowable webexts toolbar ride the train (gh-13772) 2026-05-20 13:39:12 +02:00
mr. m
1c3b74c508 no-bug: Increase toolbar overflow threshold (gh-13771) 2026-05-20 13:35:55 +02:00
Ashvin Jangid
f9c4575c78 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
2026-05-20 12:46:11 +02:00
mr. m
035e5931fc gh-10594: Video controls going under the screen when in fullscreen (gh-13769) 2026-05-20 11:53:23 +02:00
mr. m
d5d86dbfa5 no-bug: Fixed continue where you left off not working anymore (gh-13764) 2026-05-20 00:29:25 +02:00
mr. m
1b9408ecb0 no-bug: Add polish to finished boosts implementation (gh-13762)
Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-05-19 23:58:00 +02:00
Andrey Bochkarev
ef259f58aa no-bug: Fix cyclic workspace switching (gh-13743) 2026-05-18 22:26:49 +02:00
mr. m
149fc12366 no-bug: Remove panel padding reset from patch (gh-13736) 2026-05-18 00:10:30 +02:00
mr. m
77c513511b gh-12949: Fixed reset url indicator showing for sub documents (gh-13735) 2026-05-17 22:51:20 +02:00
Ashvin Jangid
99e647a7a8 gh-13653: fix copy url button/shortcut to respect decodeURLsOnCopy spec (gh-13659)
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-05-17 22:35:20 +02:00
mr. m
41893aa6f3 gh-13716: Fixed greyed out urlbar text color (gh-13727) 2026-05-17 20:35:25 +02:00
fen4flo
62a91aefd2 no-bug: Move boost import/export buttons (gh-13724) 2026-05-17 20:35:10 +02:00
mr. m
644c75e3e8 gh-13719: Correctly set scroll left to the urlbar input (gh-13726) 2026-05-17 15:38:36 +02:00
mr. m
8752bf089e gh-13703: Fixed space swiping ocassionally being stuck (gh-13725) 2026-05-17 15:38:15 +02:00
mr. m
c6c3b89a45 no-bug: Fixed clang-tidy forming invalid syntax on boosts manager (gh-13711) 2026-05-16 04:12:57 +02:00
mr. m
8cd244fee4 no-bug: Update MacOS SDK version (gh-13710) 2026-05-16 03:39:57 +02:00
fen4flo
ba348e04f0 no-bug: Add secondary color dot, Rearrange buttons & Editor UI Updates (gh-13708)
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-05-16 02:53:35 +02:00
mr. m
90a6ebe948 no-bug: Sync upstream Firefox to version 151.0 (gh-13706) 2026-05-16 00:29:01 +02:00
mr. m
1659838194 no-bug: Prevent active attribute from being set when a popup opens (gh-13695) 2026-05-14 09:41:20 +02:00
mr. m
a82e145b1d no-bug: Fixed opening new private windows removing initial tabs (gh-13687) 2026-05-13 23:10:54 +02:00
mr. m
3dd0ec9b65 no-bug: Fixed startup hang when release notes open (gh-13683) 2026-05-13 16:37:16 +02:00
mr. m
f0a63fa7c5 no-bug: Fixed overflowable addons clipping button badges (gh-13679) 2026-05-13 12:38:31 +02:00
mr. m
ad52054113 no-bug: Sync upstream Firefox to version 150.0.3 (gh-13670) 2026-05-12 23:20:00 +02:00
Guilherme Luiz Cella
0a7ee3fcf0 no-bug: Refactor _oppositeSide method using OPPOSITE_SIDES (gh-13613)
Signed-off-by: Guilherme Luiz Cella <151692400+guilherme-luiz-cella@users.noreply.github.com>
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-05-12 11:57:56 +02:00
mr. m
c406e79c5d no-bug: Remove fullscreen prefs (gh-13648) 2026-05-10 23:28:52 +02:00
jakubiakdev
78c37a122e no-bug: Improve flaky URLBar scrolling (gh-13645)
Co-authored-by: mr. m <mr.m@tuta.com>
2026-05-10 23:26:52 +02:00
AbdullahMRiad
8f0edbd91a no-bug: Fix capitalization of 'GitHub' in README (gh-13635) 2026-05-09 23:44:46 +02:00
mr. m
d9c6dcdca4 no-bug: Improve space swipe performance (gh-13631) 2026-05-09 18:20:05 +02:00
mr. m
4983c0a877 no-bug: Lint project (gh-13632) 2026-05-09 17:53:52 +02:00
sporocyst
4e6521a713 gh-13629: fix tab renaming input field too narrow (gh-13630) 2026-05-09 16:50:29 +02:00
mr. m
da9838e478 gh-13620: Fixed unresponsive tabs when opening external links (gh-13628) 2026-05-09 12:17:13 +02:00
mr. m
639bf29de3 gh-13623: Fixed native popovers not working after using dropdowns (gh-13627) 2026-05-09 12:17:00 +02:00
mr. m
cfd1e7a6aa no-bug: Make extensions list hidden for double toolbar (gh-13610) 2026-05-08 13:08:17 +02:00
mr. m
17f61152b9 Revert "no-bug: A few quality-of-life tweaks (build tooling)" (gh-13605) 2026-05-07 21:27:37 +02:00
mr. m
9c88e3a84f no-bug: Sync upstream Firefox to version 150.0.2 (gh-13601) 2026-05-07 18:28:25 +02:00
mr. m
b999a932ac no-bug: Improve swipe feel and avoid big jumps while swiping (gh-13603) 2026-05-07 17:08:50 +02:00
dependabot[bot]
e9a0beae20 no-bug: bump axios from 1.15.0 to 1.16.0 (gh-13590)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-06 23:12:02 +02:00
Daniel Richard G.
b93c2054c4 no-bug: A few quality-of-life tweaks (build tooling) (gh-13565) 2026-05-06 21:38:16 +02:00
mr. m
dcf272f620 gh-13516: Show the loading indicator ontop of the webview for toolbar mode (gh-13588) 2026-05-06 16:23:05 +02:00
mr. m
3ffdf6b299 gh-13583: Fixed Previous Space in menu bar not working (gh-13587) 2026-05-06 16:10:02 +02:00
mr. m
b052c1d804 gh-13584: Add click tab to split config (gh-13586) 2026-05-06 16:02:41 +02:00
mr. m
818c448dfc gh-10649: Update upstream patchs for session store (gh-13581) 2026-05-06 12:26:53 +02:00
mr. m
5b16bb36d9 no-bug: Dont recalculate urlbar overflow if its opened (gh-13571) 2026-05-05 11:59:50 +02:00
mr. m
5b790a431a gh-12699: Fixed switching windoww focus causing blinks (gh-13568) 2026-05-05 11:37:46 +02:00
Zander Otavka
149419d1fd no-bug: Add shortcut to create a new Space (gh-13552)
Co-authored-by: Zander Otavka <AlexanderOtavka@users.noreply.github.com>
2026-05-05 00:14:24 +02:00
mr. m
60a77413df no-bug: Use a different blur for the urlbar, depending on the theme (gh-13562) 2026-05-05 00:13:14 +02:00
mr. m
ce1ee9228b Merge commit from fork 2026-05-04 20:20:47 +02:00
sporocyst
1bea3d401c gh-13545: Fix regression from gh-13483 (gh-13554)
Co-authored-by: mr. m <mr.m@tuta.com>
2026-05-04 12:15:19 +02:00
Zander Otavka
b6624612cd no-bug: Submit workspace creation form on Enter and cancel on Escape (gh-13549)
Co-authored-by: Zander Otavka <AlexanderOtavka@users.noreply.github.com>
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-05-04 10:21:43 +02:00
mr. m
aa463e2cb0 no-bug: Fix patch sets (gh-13557) 2026-05-04 10:07:22 +02:00
Zander Otavka
6552f0b3c3 no-bug: Add focus indicators to space creation form (gh-13550)
Co-authored-by: Zander Otavka <AlexanderOtavka@users.noreply.github.com>
2026-05-04 02:35:10 +02:00
mr. m
9950679f2c no-bug: Boosts optimization and enable acrylic elements for twilight (gh-13551) 2026-05-04 02:34:41 +02:00
mr. m
a9a582afae gh-13522: Fixed search engines not being visible in settings (gh-13547) 2026-05-03 23:35:14 +02:00
mr. m
607551f394 Merge commit from fork 2026-05-03 22:39:44 +02:00
mr. m
3278a43751 gh-13294: Fix macos crash with native popovers (gh-13546) 2026-05-03 22:09:17 +02:00
mr. m
c82d314913 no-bug: Make addons appear on the urlbar (gh-13535) 2026-05-03 14:53:37 +02:00
mr. m
a71a66c00b no-bug: Force boosts colors to fit in 32 bit ints (gh-13532) 2026-05-02 11:36:15 +02:00
mr. m
c0cd45bf1d gh-13530: Apply translations to desktop files (gh-13531) 2026-05-02 11:08:08 +02:00
mr. m
562e6e5c3a gh-13488: Fixed auto hide not working after installing an extension (gh-13498) 2026-04-29 20:31:46 +02:00
mr. m
21f7fdaef4 no-bug: Increase tab hover scaling (gh-13487) 2026-04-29 12:20:47 +02:00
mr. m
04c5bc3478 no-bug: Bump release version (gh-13486) 2026-04-29 12:06:58 +02:00
sporocyst
092ee7bc2a gh-7094: Fix webcontent shift when bookmark + title bar is active (gh-13483) 2026-04-29 10:00:14 +02:00
Ezhik
18c15ac0b8 no-bug: Add workspaces search (gh-12745)
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
Co-authored-by: jababda <jababda@hotmail.com>
2026-04-28 20:56:16 +02:00
mr. m
c0620a95ef no-bug: Sync upstream Firefox to version 150.0.1 (gh-13472) 2026-04-28 20:37:46 +02:00
sporocyst
c939ee4a3d gh-7094: Fixed topbar dropping down when titlebar is enabled (gh-13468) 2026-04-28 20:37:19 +02:00
Andre Nijman
709691225a gh-12142: Clear pending attribute on synced tabs (gh-13460)
Co-authored-by: mr. m <mr.m@tuta.com>
2026-04-28 20:36:32 +02:00
mr. m
bb14e5d66f no-bug: Make checks if boost css is undefined (gh-13451) 2026-04-28 00:49:18 +02:00
mr. m
92dfe0babd gh-13439: Add Boosts implementation (gh-12586)
Co-authored-by: fen4flo <75260616+FlorianButz@users.noreply.github.com>
Co-authored-by: fen4flo <fb8599422@gmail.com>
2026-04-27 13:24:30 +02:00
mr. m
4a7b517460 no-bug: Always show initial url if empty tab is selected (gh-13435) 2026-04-27 09:52:01 +02:00
mr. m
102dcb1993 no-bug: Fixed startup cacresh when no initial tab is found (gh-13434) 2026-04-27 09:44:32 +02:00
mr. m
040bed5ce5 gh-8643: Fixed dragging tabs between windows not hiding sidebar (gh-13430) 2026-04-27 00:32:12 +02:00
mr. m
6d3a59ac04 gh-10594: Fixed video controls being off screen in compact mode (gh-13428) 2026-04-27 00:29:20 +02:00
mr. m
4d26b4d597 no-bug: Make transparent urlbar work again (gh-13424) 2026-04-26 19:20:36 +02:00
mr. m
6aafd8cb34 gh-13414: Fixed browser startup not being responsive (gh-13418) 2026-04-26 12:25:44 +02:00
mr. m
2028a9b288 gh-13390: Fixed splitting out a single tab ending up non-functional (gh-13419) 2026-04-26 12:25:26 +02:00
mr. m
cd956d34b1 gh-13400: Fixed modal text being cutoff (gh-13410) 2026-04-26 00:00:44 +02:00
Ivaon
0cfc25ccb0 no-bug: contain of .zen-glance-sidebar-container too strict (gh-13401) 2026-04-25 16:47:59 +02:00
mr. m
0199e256d6 gh-13393: Fixed print dialog appearing off the screen (gh-13397) 2026-04-25 11:01:00 +02:00
265 changed files with 13074 additions and 1405 deletions

View File

@@ -35,7 +35,7 @@ fi
if echo "$LATEST_RELEASE" | jq -e '.security != null and .security != ""' > /dev/null; then
echo
echo "## Security"
echo "[Various security fixes]($(echo "$LATEST_RELEASE" | jq -r '.security'))"
echo "$LATEST_RELEASE" | jq -r 'if (.security | type) == "string" then "- " + .security else .security[] | "- " + . end'
fi
if echo "$LATEST_RELEASE" | jq -e '(.features // []) | length > 0' > /dev/null; then

View File

@@ -129,7 +129,7 @@ jobs:
token: ${{ secrets.DEPLOY_KEY }}
commit-message: "chore: Sync upstream to `Firefox ${{ steps.build-data.outputs.version }}`"
branch: "chore/upstream-sync"
title: "Sync upstream Firefox to version ${{ steps.build-data.outputs.version }}"
title: "no-bug: Sync upstream Firefox to version ${{ steps.build-data.outputs.version }}"
body: |
This PR syncs the upstream Firefox to version ${{ steps.build-data.outputs.version }}.

1
.gitignore vendored
View File

@@ -34,3 +34,4 @@ build/signing/cert.pem
build/signing/private_key.pem
build/signing/private_key.p12
bloat-dump.log

View File

@@ -34,12 +34,12 @@ 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`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 150.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
If you'd like to report a bug, please do so on our [GitHub Issues page](https://github.com/zen-browser/desktop/issues/) and for feature requests, you can use [Github Discussions](https://github.com/zen-browser/desktop/discussions).
If you'd like to report a bug, please do so on our [GitHub Issues page](https://github.com/zen-browser/desktop/issues/) and for feature requests, you can use [GitHub Discussions](https://github.com/zen-browser/desktop/discussions).
Zen is an open-source project, and we welcome contributions from the community! Please take a look at the [contribution guidelines](./docs/contribute.md) before getting started!

View File

@@ -1,31 +1,698 @@
[Desktop Entry]
Name=Zen Browser
Comment=Experience tranquillity while browsing the web without people tracking you!
Comment=A fast, private and secure web browser built to improve your day-to-day experience.
Exec=zen %u
Icon=zen
Type=Application
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json;
MimeType=application/json;application/pdf;application/rdf+xml;application/rss+xml;application/x-xpinstall;application/xhtml+xml;application/xml;audio/flac;audio/ogg;audio/webm;image/avif;image/gif;image/jpeg;image/png;image/svg+xml;image/webp;text/html;text/xml;video/ogg;video/webm;x-scheme-handler/chrome;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/mailto;
StartupWMClass=zen
Categories=Network;WebBrowser;
StartupNotify=true
Terminal=false
X-MultipleArgs=false
GenericName=Web Browser
GenericName[ach]=Web Browser
GenericName[af]=Web Browser
GenericName[an]=Web Browser
GenericName[ar]=متصفح الوِب
GenericName[ast]=Web Browser
GenericName[az]=Web Browser
GenericName[be]=Вэб-браўзер
GenericName[bg]=Уеб браузър
GenericName[bn]=ওয়েব ব্রাউজার
GenericName[bqi]=گشت گر وب
GenericName[br]=Merdeer Web
GenericName[brx]=Web Browser
GenericName[bs]=Web pretraživač
GenericName[ca]=Navegador web
GenericName[ca_valencia]=Web Browser
GenericName[cak]=Web Okik'amaya'l
GenericName[ckb]=Web Browser
GenericName[cs]=Webový prohlížeč
GenericName[cy]=Porwr Gwe
GenericName[da]=Webbrowser
GenericName[de]=Internet-Browser
GenericName[dsb]=Webwobglědowak
GenericName[el]=Πρόγραμμα περιήγησης
GenericName[en_CA]=Web Browser
GenericName[en_GB]=Web Browser
GenericName[eo]=Retumilo
GenericName[es_AR]=Navegador web
GenericName[es_CL]=Navegador Web
GenericName[es_ES]=Navegador web
GenericName[es_MX]=Navegador Web
GenericName[et]=Web Browser
GenericName[eu]=Web nabigatzailea
GenericName[fa]=مرورگر وب
GenericName[ff]=Web Browser
GenericName[fi]=Verkkoselain
GenericName[fr]=Navigateur web
GenericName[fur]=Navigadôr Web
GenericName[fy_NL]=Webbrowser
GenericName[ga_IE]=Web Browser
GenericName[gd]=Brabhsair-lìn
GenericName[gl]=Navegador web
GenericName[gn]=Ñanduti Kundahára
GenericName[gu_IN]=Web Browser
GenericName[he]=דפדפן אינטרנט
GenericName[hi_IN]=Web Browser
GenericName[hr]=Web preglednik
GenericName[hsb]=Webwobhladowak
GenericName[hu]=Webböngésző
GenericName[hy_AM]=Վեբ դիտարկիչ
GenericName[hye]=Web Browser
GenericName[ia]=Navigator web
GenericName[id]=Peramban Web
GenericName[is]=Vafri
GenericName[it]=Browser web
GenericName[ja]=ウェブブラウザー
GenericName[ka]=ბრაუზერი
GenericName[kab]=Iminig web
GenericName[kk]=Веб-браузері
GenericName[km]=Web Browser
GenericName[kn]=Web Browser
GenericName[ko]=웹 브라우저
GenericName[lij]=Navegatô Web
GenericName[lo]=ຕົວ​ທ່ອງ​ເວັບ​ເວັບ​ໄຊ​ຕ​໌
GenericName[lt]=Web Browser
GenericName[ltg]=Web Browser
GenericName[lv]=Tīmekļa pārlūks
GenericName[meh]=Web Browser
GenericName[mk]=Web Browser
GenericName[ml]=ഗോളാന്തരവല അന്വേഷിയന്ത്രം
GenericName[mr]=Web Browser
GenericName[ms]=Web Browser
GenericName[my]=Web Browser
GenericName[nb_NO]=Nettleser
GenericName[ne_NP]=वेब ब्राउजर
GenericName[nl]=Webbrowser
GenericName[nn_NO]=Nettlesar
GenericName[oc]=Navegador Web
GenericName[pa_IN]=ਵੈੱਬ ਬਰਾਊਜ਼ਰ
GenericName[pl]=Przeglądarka internetowa
GenericName[pt_BR]=Navegador web
GenericName[pt_PT]=Navegador Web
GenericName[rm]=Navigatur web
GenericName[ro]=Browser web
GenericName[ru]=Веб-браузер
GenericName[sat]=ᱣᱮᱵᱽ ᱵᱽᱨᱟᱣᱡᱚᱨ
GenericName[sc]=Navigadore web
GenericName[sco]=Web Browser
GenericName[si]=වියමන අතිරික්සුව
GenericName[sk]=Webový prehliadač
GenericName[skr]=ویب براؤزر
GenericName[sl]=Spletni brskalnik
GenericName[son]=Web Browser
GenericName[sq]=Shfletues
GenericName[sr]=Веб прегледач
GenericName[sv_SE]=Webbläsare
GenericName[szl]=Web Browser
GenericName[ta]=Web Browser
GenericName[te]=జాల విహారిణి
GenericName[tg]=Браузери веб
GenericName[th]=เว็บเบราว์เซอร์
GenericName[tl]=Web Browser
GenericName[tr]=Web Tarayıcısı
GenericName[trs]=Web riña gāchē nu
GenericName[uk]=Браузер
GenericName[ur]=Web Browser
GenericName[uz]=Web Browser
GenericName[vi]=Trình duyệt web
GenericName[wo]=Web Browser
GenericName[xh]=Web Browser
GenericName[zh_CN]=Web 浏览器
GenericName[zh_TW]=網頁瀏覽器
Keywords=Internet;WWW;Browser;Web;Explorer;
Keywords[ach]=Internet;WWW;Browser;Web;Explorer;
Keywords[af]=Internet;WWW;Browser;Web;Explorer;
Keywords[an]=Internet;WWW;Browser;Web;Explorer;
Keywords[ar]=إنترنت;WWW;متصفح;ويب;مستكشف;
Keywords[ast]=Internet;WWW;Browser;Web;Explorer;
Keywords[az]=Internet;WWW;Browser;Web;Explorer;
Keywords[be]=Internet;WWW;Browser;Web;Explorer;
Keywords[bg]=Internet;WWW;Browser;Web;Explorer;
Keywords[bn]=ইন্টারনেট;WWW;ব্রাউজার;ওয়েব;এক্সপ্লোরার;
Keywords[bqi]=Internet;WWW;Browser;Web;Explorer;
Keywords[br]=Internet;WWW;Merdeer;Web;Ergerzhout;
Keywords[brx]=Internet;WWW;Browser;Web;Explorer;
Keywords[bs]=Internet;WWW;Pretraživač;Web;Istraživač;
Keywords[ca]=Internet;WWW;Browser;Web;Explorador;Navegador;
Keywords[ca_valencia]=Internet;WWW;Browser;Web;Explorer;
Keywords[cak]=K'amaya'l;WWW;Okik'amaya'l;Kanob'äl;
Keywords[ckb]=Internet;WWW;Browser;Web;Explorer;
Keywords[cs]=internet;WWW;prohlížeč;web;
Keywords[cy]=Rhyngrwyd;WWW;Porwr;Gwe;Archwiliwr;
Keywords[da]=Internet;WWW;Browser;Nettet;Explorer;
Keywords[de]=Internet;WWW;Browser;Web;Explorer;
Keywords[dsb]=Internet;WWW;wobglědowak;Web;Explorer;
Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Ιστός;Ίντερνετ;
Keywords[en_CA]=Internet;WWW;Browser;Web;Explorer;
Keywords[en_GB]=Internet;WWW;Browser;Web;Explorer;
Keywords[eo]=Interreto;Retumilo;TTT;Teksaĵo;Reto;Internet;WWW;Browser;Web;Explorer;
Keywords[es_AR]=Internet;WWW;Navegador;Web;Explorador;
Keywords[es_CL]=Internet;WWW;Navegador;Web;Explorador;
Keywords[es_ES]=Internet;WWW;Navegador;Web;Explorador;
Keywords[es_MX]=Internet;WWW;Navegador;Web;Explorador;
Keywords[et]=Internet;WWW;Browser;Web;Explorer;
Keywords[eu]=Internet;WWW;Nabigatzailea;Web;Arakatzailea;
Keywords[fa]=Internet;WWW;Browser;Web;Explorer;
Keywords[ff]=Internet;WWW;Browser;Web;Explorer;
Keywords[fi]=Internet;WWW;Browser;Web;Explorer;netti;webbi;selain;
Keywords[fr]=Internet;WWW;Navigateur;Web;Explorer;
Keywords[fur]=Internet;WWW;Browser;Navigadôr;Web;Esploradôr;Explorer;
Keywords[fy_NL]=Ynternet;WWW;Browser;Web;Ferkenner;
Keywords[ga_IE]=Internet;WWW;Browser;Web;Explorer;
Keywords[gd]=Internet;WWW;Browser;Web;Explorer;eadar-lìon;brabhsair;brobhsair;lìon;taisgealaiche;
Keywords[gl]=Internet;WWW;Navegador;Web;Explorador;
Keywords[gn]=Internet;WWW;Browser;Web;Explorer;
Keywords[gu_IN]=Internet;WWW;Browser;Web;Explorer;
Keywords[he]=אינטרנט;WWW;דפדפן;רשת;סייר;מרשתת;
Keywords[hi_IN]=Internet;WWW;Browser;Web;Explorer;
Keywords[hr]=Internet;WWW;Preglednik;Web;Istraživač;
Keywords[hsb]=Internet;WWW;wobhladowak;Web;Explorer;
Keywords[hu]=Internet;WWW;Böngésző;Web;Világháló;
Keywords[hy_AM]=Համացանց,WWW,Զննիչ,Վեբ,Ցանցախույզ:
Keywords[hye]=Internet;WWW;Browser;Web;Explorer;
Keywords[ia]=Internet;WWW;Navigator;Web;Explorator;
Keywords[id]=Internet;WWW;Browser;Web;Explorer;
Keywords[is]=Internet;WWW; Vafri; Vefur; Explorer;
Keywords[it]=Internet;WWW;Browser;Web;Explorer;Navigatore;
Keywords[ja]=Internet;WWW;Browser;Web;Explorer;インターネット;ブラウザー;ウェブ;
Keywords[ka]=ინტერნეტი;WWW;ბრაუზერი;ქსელი;ქსელთან წვდომა;
Keywords[kab]=Internet;WWW;Browser;Web;Explorer;
Keywords[kk]=Internet;WWW;Browser;Web;Explorer;Интернет;Ғаламтор;Браузер;Желі;Шолғыш;
Keywords[km]=Internet;WWW;Browser;Web;Explorer;
Keywords[kn]=Internet;WWW;Browser;Web;Explorer;
Keywords[ko]=인터넷;브라우저;웹;탐색기;Internet;WWW;Browser;Web;Explorer;
Keywords[lij]=Internet;WWW;Browser;Web;Explorer;Navegatô;
Keywords[lo]=Internet;WWW;Browser;Web;Explorer;
Keywords[lt]=Internet;WWW;Browser;Web;Explorer;
Keywords[ltg]=Internet;WWW;Browser;Web;Explorer;
Keywords[lv]=Internets;WWW;Pārlūkprogramma;Tīmeklis;
Keywords[meh]=Internet;WWW;Browser;Web;Explorer;
Keywords[mk]=Internet;WWW;Browser;Web;Explorer;
Keywords[ml]=ഗോളാന്തരവല;WWW;അന്വേഷിയന്ത്രം;ഗോളാന്തരവല;ആരായൻ;
Keywords[mr]=Internet;WWW;Browser;Web;Explorer;
Keywords[ms]=Internet;WWW;Browser;Web;Explorer;
Keywords[my]=Internet;WWW;Browser;Web;Explorer;
Keywords[nb_NO]=Internett;WWW;Nettleser;Web;Utforsker;
Keywords[ne_NP]=Internet;WWW;Browser;Web;Explorer;
Keywords[nl]=Internet;WWW;Browser;Web;Verkenner;
Keywords[nn_NO]=Internett;WWW;Nettlesar;Web;Utforskar;
Keywords[oc]=Internet;WWW;Navegador;Navigador;Navegator;Navigator;Web;Explorer;
Keywords[pa_IN]=ਇੰਟਰਨੈੱਟ;WWW;ਬਰਾਊਜ਼ਰ;ਵੈੱਬ;ਐਕਸਪਲਰੋਰ;ਵੈਬ;ਇੰਟਰਨੈਟ;
Keywords[pl]=Internet;WWW;Przeglądarka;Browser;Wyszukiwarka;Web;Sieć;Explorer;Eksplorer;Strony;Witryny;internetowe;
Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorer;Navegador;
Keywords[pt_PT]=Internet;WWW;Navegador;Web;Explorador;
Keywords[rm]=Internet;WWW;Browser;Web;Explorer;navigatur;
Keywords[ro]=Internet; WWW; Browser; Web; Explorer;
Keywords[ru]=Сеть;Интернет;Браузер;Доступ в Интернет;
Keywords[sat]=Internet;WWW;Browser;Web;Explorer;
Keywords[sc]=Internet;WWW;Navigadore;Web;Explorer;
Keywords[sco]=Internet;WWW;Browser;Web;Explorer;
Keywords[si]=අන්තර්ජාලය;අතිරික්සුව;පිරික්සන්න;ගවේශකය;Internet;WWW;Browser;Web;Explorer;
Keywords[sk]=Internet;WWW;Prehliadač;Web;Prieskumník;
Keywords[skr]=Internet;WWW;Browser;Web;Explorer;
Keywords[sl]=internet;www;brskalnik;splet;
Keywords[son]=Internet;WWW;Browser;Web;Explorer;
Keywords[sq]=Internet;WWW;Shfletues;Web;Eksplorues;
Keywords[sr]=Internet;WWW;Browser;Web;Explorer;интернет;њњњ;веб;мрежа;прегледач;експлорер;internet;pregledač;veb;mreža;pregledač;eksplorer;
Keywords[sv_SE]=Internet;WWW;Webbläsare;Webb;Utforskare;
Keywords[szl]=Internet;WWW;Browser;Web;Explorer;
Keywords[ta]=Internet;WWW;Browser;Web;Explorer;
Keywords[te]=Internet;WWW;Browser;Web;Explorer;
Keywords[tg]=Интернет;WWW;Браузер;Сомона;Ҷустуҷӯгар;
Keywords[th]=อินเทอร์เน็ต;เบราว์เซอร์;เว็บ;Internet;WWW;Browser;Web;Explorer;
Keywords[tl]=Internet;WWW;Browser;Web;Explorer;
Keywords[tr]=Internet;WWW;Browser;Web;Explorer;İnternet;Tarayıcı;
Keywords[trs]=Internet;WWW;Browser;Web;Explorer;
Keywords[uk]=Інтернет;WWW;Браузер;Веб;Переглядач;
Keywords[ur]=Internet;WWW;Browser;Web;Explorer;
Keywords[uz]=Internet;WWW;Browser;Web;Explorer;
Keywords[vi]=Internet;WWW;Trình duyệt;Web;Duyệt web;
Keywords[wo]=Internet;WWW;Browser;Web;Explorer;
Keywords[xh]=Internet;WWW;Browser;Web;Explorer;
Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;
Keywords[zh_TW]=網際網路;網路;瀏覽器;網頁;上網;Internet;WWW;Browser;Web;Explorer;
Actions=new-window;new-blank-window;new-private-window;profilemanager;
X-AppImage-Version=$VERSION
[Desktop Action new-window]
Name=Open a New Window
Exec=zen %u
Name=New Window
Name[ach]=New Window
Name[af]=New Window
Name[an]=New Window
Name[ar]=نافذة جديدة
Name[ast]=New Window
Name[az]=New Window
Name[be]=Новае акно
Name[bg]=Нов прозорец
Name[bn]=নতুন উইন্ডো
Name[bqi]=نیمدری نۊ
Name[br]=Prenestr nevez
Name[brx]=New Window
Name[bs]=Novi prozor
Name[ca]=Finestra nova
Name[ca_valencia]=New Window
Name[cak]=K'ak'a' Tzuwäch
Name[ckb]=New Window
Name[cs]=Nové okno
Name[cy]=Ffenestr Newydd
Name[da]=Nyt vindue
Name[de]=Neues Fenster
Name[dsb]=Nowe wokno
Name[el]=Νέο παράθυρο
Name[en_CA]=New Window
Name[en_GB]=New Window
Name[eo]=Nova fenestro
Name[es_AR]=Nueva ventana
Name[es_CL]=Nueva ventana
Name[es_ES]=Nueva ventana
Name[es_MX]=Nueva ventana
Name[et]=New Window
Name[eu]=Leiho berria
Name[fa]=پنجره جدید‌
Name[ff]=New Window
Name[fi]=Uusi ikkuna
Name[fr]=Nouvelle fenêtre
Name[fur]=Gnûf barcon
Name[fy_NL]=Nij finster
Name[ga_IE]=New Window
Name[gd]=Uinneag ùr
Name[gl]=Nova xanela
Name[gn]=Ovetã pyahu
Name[gu_IN]=New Window
Name[he]=חלון חדש
Name[hi_IN]=New Window
Name[hr]=Novi prozor
Name[hsb]=Nowe wokno
Name[hu]=Új ablak
Name[hy_AM]=Նոր պատուհան
Name[hye]=New Window
Name[ia]=Nove fenestra
Name[id]=Jendela Baru
Name[is]=Nýr gluggi
Name[it]=Nuova finestra
Name[ja]=新しいウィンドウ
Name[ka]=ახალი ფანჯარა
Name[kab]=Asfaylu amaynut
Name[kk]=Жаңа терезе
Name[km]=បង្អួច​​​ថ្មី
Name[kn]=New Window
Name[ko]=새 창
Name[lij]=Neuvo Barcon
Name[lo]=ວິນໂດໃໝ່
Name[lt]=New Window
Name[ltg]=New Window
Name[lv]=Jauns logs
Name[meh]=New Window
Name[mk]=New Window
Name[ml]=പുതിയ ജാലകം
Name[mr]=New Window
Name[ms]=New Window
Name[my]=New Window
Name[nb_NO]=Nytt vindu
Name[ne_NP]=नयाँ सञ्झ्याल
Name[nl]=Nieuw venster
Name[nn_NO]=Nytt vindauge
Name[oc]=Fenèstra novèla
Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
Name[pl]=Nowe okno
Name[pt_BR]=Nova janela
Name[pt_PT]=Nova janela
Name[rm]=Nova fanestra
Name[ro]=Fereastră nouă
Name[ru]=Новое окно
Name[sat]=ᱱᱟᱶᱟ ᱣᱤᱱᱰᱳ
Name[sc]=Ventana noa
Name[sco]=New Window
Name[si]=නව කවුළුව
Name[sk]=Nové okno
Name[skr]=نویں ونڈو
Name[sl]=Novo okno
Name[son]=New Window
Name[sq]=Dritare e Re
Name[sr]=Нови прозор
Name[sv_SE]=Nytt fönster
Name[szl]=New Window
Name[ta]=New Window
Name[te]=కొత్త కిటికీ
Name[tg]=Равзанаи нав
Name[th]=หน้าต่างใหม่
Name[tl]=New Window
Name[tr]=Yeni pencere
Name[trs]=Bēntanâ nākàa
Name[uk]=Нове вікно
Name[ur]=New Window
Name[uz]=New Window
Name[vi]=Cửa sổ mới
Name[wo]=New Window
Name[xh]=New Window
Name[zh_CN]=新建窗口
Name[zh_TW]=開新視窗
[Desktop Action new-blank-window]
Name=Open a New Blank Window
Exec=zen --blank-window %u
Name=New Blank Window
Name[ach]=New Blank Window
Name[af]=New Blank Window
Name[an]=New Blank Window
Name[ar]=نافذة فارغة جديدة
Name[ast]=New Blank Window
Name[az]=New Blank Window
Name[be]=Новае пустое акно
Name[bg]=Нов празен прозорец
Name[bn]=নতুন ফাঁকা উইন্ডো
Name[bqi]=نیمدری نۊ خالی
Name[br]=Prenestr goulloù nevez
Name[brx]=New Blank Window
Name[bs]=Novi prazni prozor
Name[ca]=Finestra en blanc nova
Name[ca_valencia]=New Blank Window
Name[cak]=K'ak'a' Tzuwäch K'axk'ol
Name[ckb]=New Blank Window
Name[cs]=Nové prázdné okno
Name[cy]=Ffenestr Wag Newydd
Name[da]=Nyt tomt vindue
Name[de]=Neues leeres Fenster
Name[dsb]=Nowe prázdne wokno
Name[el]=Νέο κενό παράθυρο
Name[en_CA]=New Blank Window
Name[en_GB]=New Blank Window
Name[eo]=Nova malplena fenestro
Name[es_AR]=Nueva ventana en blanco
Name[es_CL]=Nueva ventana en blanco
Name[es_ES]=Nueva ventana en blanco
Name[es_MX]=Nueva ventana en blanco
Name[et]=New Blank Window
Name[eu]=Leiho huts berri
Name[fa]=پنجره خالی جدید
Name[ff]=New Blank Window
Name[fi]=Uusi tyhjä ikkuna
Name[fr]=Nouvelle fenêtre vierge
Name[fur]=Gnûf barcon vuot
Name[fy_NL]=Nij leeg finster
Name[ga_IE]=New Blank Window
Name[gd]=Uinneag bhàn ùr
Name[gl]=Nova xanela en branco
Name[gn]=Ovetã ñemi pyahu
Name[gu_IN]=New Blank Window
Name[he]=חלון ריק חדש
Name[hi_IN]=New Blank Window
Name[hr]=Novi prazni prozor
Name[hsb]=Nowe prázdne wokno
Name[hu]=Új üres ablak
Name[hy_AM]=Նոր դատարկ պատուհան
Name[hye]=New Blank Window
Name[ia]=Nove fenestra vacue
Name[id]=Jendela Kosong Baru
Name[is]=Nýr tómur gluggi
Name[it]=Nuova finestra vuota
Name[ja]=新しい空白のウィンドウ
Name[ka]=ახალი ცარიელი ფანჯარა
Name[kab]=Asfaylu amaynut n tunigin tusligt
Name[kk]=Жаңа бос терезе
Name[km]=បង្អួច​ថ្មី​ឯកជន
Name[kn]=New Blank Window
Name[ko]=새 빈 창
Name[lij]=Neuvo Barcon Vuot
Name[lo]=ວິນໂດແອ່ງໃໝ່
Name[lt]=New Blank Window
Name[ltg]=New Blank Window
Name[lv]=Jauns tukšais logs
Name[meh]=New Blank Window
Name[mk]=New Blank Window
Name[ml]=പുതിയ ശൂന്യ ജാലകം
Name[mr]=New Blank Window
Name[ms]=New Blank Window
Name[my]=New Blank Window
Name[nb_NO]=Nytt tomt vindu
Name[ne_NP]=नयाँ खाली सञ्झ्याल
Name[nl]=Nieuw leeg venster
Name[nn_NO]=Nytt tomt vindauge
Name[oc]=Fenèstra en blanc novèla
Name[pa_IN]=ਨਵੀਂ ਖਾਲੀ ਵਿੰਡੋ
Name[pl]=Nowe puste okno
Name[pt_BR]=Nova janela em branco
Name[pt_PT]=Nova janela em branco
Name[rm]=Nova fanestra vacue
Name[ro]=Fereastră nouă și goală
Name[ru]=Новое пустое окно
Name[sat]=ᱱᱟᱶᱟ ᱣᱤᱱᱰᱳ ᱵᱽᱨᱟᱣᱡᱚᱨ
Name[sc]=Ventana en blanc noa
Name[sco]=New Blank Window
Name[si]=නව හිස් කවුළුව
Name[sk]=Nové prázdné okno
Name[skr]=نویں خالی ونڈو
Name[sl]=Novo prazno okno
Name[son]=New Blank Window
Name[sq]=Dritare e Re e Pafajshme
Name[sr]=Нови празни прозор
Name[sv_SE]=Nytt tomt fönster
Name[szl]=New Blank Window
Name[ta]=New Blank Window
Name[te]=కొత్త ఖాళీ కిటికీ
Name[tg]=Равзанаи холӣ нав
Name[th]=หน้าต่างว่างเปล่าใหม่
Name[tl]=New Blank Window
Name[tr]=Yeni boş pencere
Name[trs]=Bēntanâ huì nākàa
Name[uk]=Нове порожнє вікно
Name[ur]=New Blank Window
Name[uz]=New Blank Window
Name[vi]=Cửa sổ trống mới
Name[wo]=New Blank Window
Name[xh]=New Blank Window
Name[zh_CN]=新建空白窗口
Name[zh_TW]=開新空白視窗
[Desktop Action new-private-window]
Name=Open a New Private Window
Exec=zen --private-window %u
Name=New Private Window
Name[ach]=New Private Window
Name[af]=New Private Window
Name[an]=New Private Window
Name[ar]=نافذة خاصة جديدة
Name[ast]=New Private Window
Name[az]=New Private Window
Name[be]=Новае прыватнае акно
Name[bg]=Нов личен прозорец
Name[bn]=নতুন ব্যক্তিগত উইন্ডো
Name[bqi]=نیمدری سیخومی نۊ
Name[br]=Prenestr prevez nevez
Name[brx]=New Private Window
Name[bs]=Novi privatni prozor
Name[ca]=Finestra privada nova
Name[ca_valencia]=New Private Window
Name[cak]=K'ak'a' Ichinan Tzuwäch
Name[ckb]=New Private Window
Name[cs]=Nové anonymní okno
Name[cy]=Ffenestr Breifat Newydd
Name[da]=Nyt privat vindue
Name[de]=Neues privates Fenster
Name[dsb]=Nowe priwatne wokno
Name[el]=Νέο ιδιωτικό παράθυρο
Name[en_CA]=New Private Window
Name[en_GB]=New Private Window
Name[eo]=Nova privata fenestro
Name[es_AR]=Nueva ventana privada
Name[es_CL]=Nueva ventana privada
Name[es_ES]=Nueva ventana privada
Name[es_MX]=Nueva ventana privada
Name[et]=New Private Window
Name[eu]=Leiho pribatu berria
Name[fa]=پنجره ناشناس جدید
Name[ff]=New Private Window
Name[fi]=Uusi yksityinen ikkuna
Name[fr]=Nouvelle fenêtre privée
Name[fur]=Gnûf barcon privât
Name[fy_NL]=Nij priveefinster
Name[ga_IE]=New Private Window
Name[gd]=Uinneag phrìobhaideach ùr
Name[gl]=Nova xanela privada
Name[gn]=Ovetã ñemi pyahu
Name[gu_IN]=New Private Window
Name[he]=חלון פרטי חדש
Name[hi_IN]=New Private Window
Name[hr]=Novi privatni prozor
Name[hsb]=Nowe priwatne wokno
Name[hu]=Új privát ablak
Name[hy_AM]=Նոր գաղտնի պատուհան
Name[hye]=New Private Window
Name[ia]=Nove fenestra private
Name[id]=Jendela Mode Pribadi Baru
Name[is]=Nýr huliðsgluggi
Name[it]=Nuova finestra anonima
Name[ja]=新しいプライベートウィンドウ
Name[ka]=ახალი პირადი ფანჯარა
Name[kab]=Asfaylu amaynut n tunigin tusligt
Name[kk]=Жаңа жекелік терезе
Name[km]=បង្អួច​ឯកជន​ថ្មី
Name[kn]=New Private Window
Name[ko]=새 사생활 보호 창
Name[lij]=Neuvo Barcon Privòu
Name[lo]=ວິນໂດສ່ວນຕົວໃໝ່
Name[lt]=New Private Window
Name[ltg]=New Private Window
Name[lv]=Jauns privātais logs
Name[meh]=New Private Window
Name[mk]=New Private Window
Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
Name[mr]=New Private Window
Name[ms]=New Private Window
Name[my]=New Private Window
Name[nb_NO]=Nytt privat vindu
Name[ne_NP]=नयाँ निजी सञ्झ्याल
Name[nl]=Nieuw privévenster
Name[nn_NO]=Nytt privat vindauge
Name[oc]=Fenèstra privada novèla
Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
Name[pl]=Nowe okno prywatne
Name[pt_BR]=Nova janela privativa
Name[pt_PT]=Nova janela privada
Name[rm]=Nova fanestra privata
Name[ro]=Fereastră privată nouă
Name[ru]=Новое приватное окно
Name[sat]=ᱱᱟᱶᱟ ᱱᱤᱡᱮᱨᱟᱜ ᱣᱤᱱᱰᱳ
Name[sc]=Ventana privada noa
Name[sco]=New Private Window
Name[si]=නව පෞද්. කවුළුව
Name[sk]=Nové súkromné okno
Name[skr]=نویں نجی ونڈو
Name[sl]=Novo zasebno okno
Name[son]=New Private Window
Name[sq]=Dritare e Re Private
Name[sr]=Нови приватни прозор
Name[sv_SE]=Nytt privat fönster
Name[szl]=New Private Window
Name[ta]=New Private Window
Name[te]=కొత్త ఆంతరంగిక కిటికీ
Name[tg]=Равзанаи хусусии нав
Name[th]=หน้าต่างส่วนตัวใหม่
Name[tl]=New Private Window
Name[tr]=Yeni gizli pencere
Name[trs]=Bēntanâ huì nākàa
Name[uk]=Приватне вікно
Name[ur]=New Private Window
Name[uz]=New Private Window
Name[vi]=Cửa sổ riêng tư mới
Name[wo]=New Private Window
Name[xh]=New Private Window
Name[zh_CN]=新建隐私窗口
Name[zh_TW]=開新隱私視窗
[Desktop Action profilemanager]
Name=Open the Profile Manager
Exec=zen --ProfileManager %u
Name=Open Profile Manager
Name[ach]=Open Profile Manager
Name[af]=Open Profile Manager
Name[an]=Open Profile Manager
Name[ar]=افتح مدير الملف الشخصي
Name[ast]=Open Profile Manager
Name[az]=Open Profile Manager
Name[be]=Адкрыць менеджар профіляў
Name[bg]=Отваряне на мениджъра на профили
Name[bn]=Open Profile Manager
Name[bqi]=گۊشیڌن دؽوۉداری پوروفایل
Name[br]=Digeriñ an ardoer aeladoù
Name[brx]=Open Profile Manager
Name[bs]=Otvori Menadžera profila
Name[ca]=Obre el gestor de perfils
Name[ca_valencia]=Open Profile Manager
Name[cak]=Open Profile Manager
Name[ckb]=Open Profile Manager
Name[cs]=Otevřít Správce profilů
Name[cy]=Agorwch y Rheolwr Proffil
Name[da]=Åbn profilhåndtering
Name[de]=Profilverwaltung öffnen
Name[dsb]=Profilowy zastojnik wócyniś
Name[el]=Άνοιγμα Διαχείρισης προφίλ
Name[en_CA]=Open Profile Manager
Name[en_GB]=Open Profile Manager
Name[eo]=Malfermi administranton de profiloj
Name[es_AR]=Abrir administrador de perfiles
Name[es_CL]=Abrir administrador de perfiles
Name[es_ES]=Abrir administrador de perfiles
Name[es_MX]=Abrir administrador de perfiles
Name[et]=Open Profile Manager
Name[eu]=Ireki profilen kudeatzailea
Name[fa]=گشودن مدیر نمایه
Name[ff]=Open Profile Manager
Name[fi]=Avaa profiilien hallinta
Name[fr]=Ouvrir le gestionnaire de profils
Name[fur]=Vierç gjestôr profîi
Name[fy_NL]=Profylbehearder iepenje
Name[ga_IE]=Open Profile Manager
Name[gd]=Fosgail manaidsear nam pròifilean
Name[gl]=Abrir o xestor de perfís
Name[gn]=Embojuruja mbaete ñangarekoha
Name[gu_IN]=Open Profile Manager
Name[he]=פתיחת מנהל הפרופילים
Name[hi_IN]=Open Profile Manager
Name[hr]=Otvori upravljač profila
Name[hsb]=Zrjadowak profilow wočinić
Name[hu]=Profilkezelő megnyitása
Name[hy_AM]=Բացեք պրոֆիլի կառավարիչը
Name[hye]=Open Profile Manager
Name[ia]=Aperir le gestor de profilo
Name[id]=Buka Pengelola Profil
Name[is]=Opna umsýslu notandasniða
Name[it]=Apri gestore profili
Name[ja]=プロファイルマネージャーを開く
Name[ka]=პროფილის მმართველის გახსნა
Name[kab]=Ldi amsefrak n umaɣnu
Name[kk]=Профильдер бақарушысын ашу
Name[km]=Open Profile Manager
Name[kn]=Open Profile Manager
Name[ko]=프로필 관리자 열기
Name[lij]=Open Profile Manager
Name[lo]=ເປີດຕົວຈັດການໂປຣໄຟລ໌
Name[lt]=Open Profile Manager
Name[ltg]=Open Profile Manager
Name[lv]=Atvērt profilu pārvaldnieku
Name[meh]=Open Profile Manager
Name[mk]=Open Profile Manager
Name[ml]=രൂപരേഖ മാനേചർ
Name[mr]=Open Profile Manager
Name[ms]=Open Profile Manager
Name[my]=Open Profile Manager
Name[nb_NO]=Åpne profilbehandler
Name[ne_NP]=Open Profile Manager
Name[nl]=Profielbeheerder openen
Name[nn_NO]=Opne profilhandsaming
Name[oc]=Dobrir lo gestionari de perfils
Name[pa_IN]=ਪਰੋਫ਼ਾਈਲ ਮੈਨੇਜਰ ਖੋਲ੍ਹੋ
Name[pl]=Menedżer profili
Name[pt_BR]=Abrir gerenciador de perfis
Name[pt_PT]=Abrir o Gestor de Perfis
Name[rm]=Avrir l'administraziun da profils
Name[ro]=Deschide managerul de profiluri
Name[ru]=Открыть менеджер профилей
Name[sat]=ᱢᱮᱫᱦᱟᱸ ᱢᱮᱱᱮᱡᱚᱨ ᱠᱷᱩᱞᱟᱹᱭ ᱢᱮ
Name[sc]=Aberi su gestore de profilos
Name[sco]=Open Profile Manager
Name[si]=පැතිකඩ කළමනාකරු අරින්න
Name[sk]=Otvoriť Správcu profilov
Name[skr]=پروفائل منیجر کھولو
Name[sl]=Odpri upravitelja profilov
Name[son]=Open Profile Manager
Name[sq]=Hapni Përgjegjës Profilesh
Name[sr]=Отворите управљач профила
Name[sv_SE]=Öppna Profilhanteraren
Name[szl]=Open Profile Manager
Name[ta]=Open Profile Manager
Name[te]=Open Profile Manager
Name[tg]=Кушодани мудири профилҳо
Name[th]=เปิดตัวจัดการโปรไฟล์
Name[tl]=Open Profile Manager
Name[tr]=Profil yöneticisini aç
Name[trs]=Sa nīkāj ñuūnj nej perfî huā nìnï̀nj ïn
Name[uk]=Відкрити менеджер профілів
Name[ur]=Open Profile Manager
Name[uz]=Open Profile Manager
Name[vi]=Mở trình quản lý hồ sơ
Name[wo]=Open Profile Manager
Name[xh]=Open Profile Manager
Name[zh_CN]=打开配置文件管理器
Name[zh_TW]=開啟設定檔管理員

View File

@@ -1 +1 @@
fb55808f9cdd2172649e551705008af4f98038fe
10b4efc5a79c2ab80de3b22771b1d36b9b225920

View File

@@ -7,6 +7,10 @@ unset MOZ_STDCXX_COMPAT
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
fi
if test "$ZEN_RELEASE"; then
if ! test "$ZEN_GA_DISABLE_PGO"; then
if test "$ZEN_GA_GENERATE_PROFILE"; then

View File

@@ -20,3 +20,5 @@ files:
translation: browser/browser/preferences/zen-preferences.ftl
- source: en-US/browser/browser/zen-folders.ftl
translation: browser/browser/zen-folders.ftl
- source: en-US/browser/browser/zen-boosts.ftl
translation: browser/browser/zen-boosts.ftl

View File

@@ -321,6 +321,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

View File

@@ -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 = 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 <b>Zap</b> 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?

8
package-lock.json generated
View File

@@ -1005,13 +1005,13 @@
"license": "MIT"
},
"node_modules/axios": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
"integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
"version": "1.16.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz",
"integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==",
"dev": true,
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.11",
"follow-redirects": "^1.16.0",
"form-data": "^4.0.5",
"proxy-from-env": "^2.1.0"
}

View File

@@ -10,6 +10,7 @@
"build": "surfer build",
"build:ui": "surfer build --ui",
"start": "cd engine && python3 ./mach run --noprofile",
"start:bloat": "XPCOM_MEM_BLOAT_LOG=1 npm start",
"import": "npm run ffprefs && npm run import:dumps && surfer import",
"import:dumps": "python3 scripts/update_service_dumps.py",
"export": "surfer export",
@@ -27,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",

View File

@@ -1,16 +0,0 @@
# 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/.
# Fullscreen API preferences
- name: full-screen-api.transition-duration.enter
value: "0 0"
- name: full-screen-api.transition-duration.leave
value: "0 0"
- name: full-screen-api.warning.delay
value: -1
- name: full-screen-api.warning.timeout
value: 0

22
prefs/zen/boosts.yaml Normal file
View File

@@ -0,0 +1,22 @@
# 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/.
- name: zen.boosts.enabled
value: true
- name: zen.boosts.dissolve-on-zap
value: true
- name: zen.boosts.invert-channel-floor
value: 15
cpptype: uint32_t
mirror: once
type: static
- name: zen.boosts.disable-on-anonymous-content
value: true
cpptype: bool
mirror: once
type: static

View File

@@ -0,0 +1,6 @@
# 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/.
- name: zen.live-folders.github.skip-new-pr-ui-check
value: false

View File

@@ -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

View File

@@ -5,6 +5,9 @@
- name: zen.splitView.enable-tab-drop
value: true
- name: zen.splitView.enable-tab-click-split
value: true
- name: zen.splitView.min-resize-width
value: 7

View File

@@ -18,7 +18,7 @@
value: true
- name: zen.theme.acrylic-elements
value: false
value: "@IS_TWILIGHT@"
- name: zen.theme.disable-lightweight
value: true

View File

@@ -59,7 +59,10 @@
value: true
- name: zen.view.overflow-webext-toolbar
value: "@IS_TWILIGHT@"
value: true
- name: zen.view.overflow-webext-toolbar-threshold
value: 55
- name: zen.view.enable-loading-indicator
value: true

View File

@@ -17,6 +17,12 @@
- name: zen.workspaces.swipe-actions
value: true
- name: zen.workspaces.swipe-actions.delta-multiplier
value: 100
- name: zen.workspaces.switch-animation-duration
value: 200
- name: zen.workspaces.wrap-around-navigation
value: true

View File

@@ -39,3 +39,6 @@
- name: zen.urlbar.suggestions.quick-actions
value: true
- name: browser.urlbar.shortcuts.workspaces
value: true

View File

@@ -1,8 +1,8 @@
diff --git a/.prettierignore b/.prettierignore
index 4c6d186c501f7e1b029db186d387f73d97dfed1e..81d0f7dc7f412151256c13ed93bd34d7bd872681 100644
index de2efe413e5696a3b8d0467a3a9e668dfadd8a1a..01c76d8e639d5630fca9cccb55d415fc4e903e91 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1806,3 +1806,12 @@ tools/ts/test/baselines/
@@ -1805,3 +1805,12 @@ tools/ts/test/baselines/
try_task_config.json
xpcom/idl-parser/xpidl/fixtures/xpctest.d.json
**/package-lock.json

View File

@@ -1,8 +1,8 @@
diff --git a/browser/actors/EncryptedMediaParent.sys.mjs b/browser/actors/EncryptedMediaParent.sys.mjs
index 9d3d3db9761cf5b2fde1f70992e82b1733241863..3dc64dc395d5237bf2c290cb8588cf467fb8729a 100644
index 492dce93d3cc7c6ec16db047c9e47b175ef3a0fe..757e5543e0e6900c414db6d7a96d511608c1e50a 100644
--- a/browser/actors/EncryptedMediaParent.sys.mjs
+++ b/browser/actors/EncryptedMediaParent.sys.mjs
@@ -200,6 +200,7 @@ export class EncryptedMediaParent extends JSWindowActorParent {
@@ -199,6 +199,7 @@ export class EncryptedMediaParent extends JSWindowActorParent {
"drmContentPlaying",
aBrowser
)

View File

@@ -1,5 +1,5 @@
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
index e8b762b4c8f71ddafc090415abfe97674401dbc2..5dda5fe9c9bc02ebe7713f7bd21315fe4ba8b8cd 100644
index b743bd83529c4cd01a6bc820967186dbe41b6144..e24c48bac0f4ae3d4b26087b7e0cac7910019d0e 100644
--- a/browser/actors/WebRTCParent.sys.mjs
+++ b/browser/actors/WebRTCParent.sys.mjs
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/app/splash.rc b/browser/app/splash.rc
index 259a8068c3aa256b8c50487a04f1844292b90b2e..8b9c792e1484bb801246b06b6ce43fb6d6271ee8 100644
index 04c1d3e1db7d067d579512999a08de85a0aa212c..4e04eb5008ca1701c731c3109ba184ccf465b51b 100644
--- a/browser/app/splash.rc
+++ b/browser/app/splash.rc
@@ -6,6 +6,9 @@
@@ -5,6 +5,9 @@
#include <windows.h>
#include "nsNativeAppSupportWin.h"

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js
index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe7932eaea41 100644
index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05f45bce08 100644
--- a/browser/base/content/browser-addons.js
+++ b/browser/base/content/browser-addons.js
@@ -1061,7 +1061,7 @@ var gXPInstallObserver = {
@@ -1060,7 +1060,7 @@ var gXPInstallObserver = {
persistent: true,
hideClose: true,
popupOptions: {
@@ -11,7 +11,7 @@ index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe79
},
};
@@ -1283,7 +1283,7 @@ var gXPInstallObserver = {
@@ -1282,7 +1282,7 @@ var gXPInstallObserver = {
hideClose: true,
timeout: Date.now() + 30000,
popupOptions: {
@@ -20,7 +20,7 @@ index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe79
},
};
@@ -2210,7 +2210,7 @@ var gUnifiedExtensions = {
@@ -2209,7 +2209,7 @@ var gUnifiedExtensions = {
// If the new ID is not added in NOTIFICATION_IDS, consider handling the case
// in the "PopupNotificationsBeforeAnchor" handler elsewhere in this file.
getPopupAnchorID(aBrowser, aWindow) {
@@ -29,7 +29,7 @@ index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe79
const attr = anchorID + "popupnotificationanchor";
if (!aBrowser[attr]) {
@@ -2221,7 +2221,7 @@ var gUnifiedExtensions = {
@@ -2220,7 +2220,7 @@ var gUnifiedExtensions = {
anchorID
// Anchor on the toolbar icon to position the popup right below the
// button.
@@ -38,7 +38,7 @@ index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe79
}
return anchorID;
@@ -2546,7 +2546,7 @@ var gUnifiedExtensions = {
@@ -2545,7 +2545,7 @@ var gUnifiedExtensions = {
requestAnimationFrame(() => this.updateAttention());
},
@@ -47,7 +47,7 @@ index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe79
// A list of extension widget IDs (possibly empty).
let widgetIDs;
@@ -2560,7 +2560,7 @@ var gUnifiedExtensions = {
@@ -2559,7 +2559,7 @@ var gUnifiedExtensions = {
}
// The list of overflowed extensions in the extensions panel.
@@ -56,7 +56,7 @@ index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe79
"#overflowed-extensions-list"
);
@@ -2661,37 +2661,41 @@ var gUnifiedExtensions = {
@@ -2660,37 +2660,41 @@ var gUnifiedExtensions = {
);
template.replaceWith(template.content);
this._panel = document.getElementById("unified-extensions-panel");
@@ -123,7 +123,7 @@ index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe79
if (!CustomizationHandler.isCustomizing()) {
if (aEvent) {
if (
@@ -2713,6 +2717,7 @@ var gUnifiedExtensions = {
@@ -2712,6 +2716,7 @@ var gUnifiedExtensions = {
// and no alternative content is available for display in the panel.
const policies = this.getActivePolicies();
if (
@@ -131,7 +131,7 @@ index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe79
policies.length &&
!this.hasExtensionsInPanel(policies) &&
!this.isPrivateWindowMissingExtensionsWithoutPBMAccess() &&
@@ -2728,32 +2733,30 @@ var gUnifiedExtensions = {
@@ -2727,32 +2732,30 @@ var gUnifiedExtensions = {
this.blocklistAttentionInfo =
await AddonManager.getBlocklistAttentionInfo();
@@ -170,7 +170,7 @@ index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe79
triggerEvent: aEvent,
});
}
@@ -2948,18 +2951,20 @@ var gUnifiedExtensions = {
@@ -2947,18 +2950,20 @@ var gUnifiedExtensions = {
this._maybeMoveWidgetNodeBack(widgetId);
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-commands.js b/browser/base/content/browser-commands.js
index e7f88f69fcc22efca4c7fc0363b9fe2729e1be6f..d7c4063d38576a34545b9af06c37937dc9090628 100644
index 2d9f5591c9ffdd5948298555c461850521c0b45f..c46072ca4e96b419987f7e782e26b3de71d7c8e3 100644
--- a/browser/base/content/browser-commands.js
+++ b/browser/base/content/browser-commands.js
@@ -14,6 +14,10 @@ var BrowserCommands = {
@@ -13,6 +13,10 @@ var BrowserCommands = {
const where = BrowserUtils.whereToOpenLink(aEvent, false, true);
if (where == "current") {
@@ -13,7 +13,7 @@ index e7f88f69fcc22efca4c7fc0363b9fe2729e1be6f..d7c4063d38576a34545b9af06c37937d
try {
gBrowser.goBack();
} catch (ex) {}
@@ -229,6 +233,10 @@ var BrowserCommands = {
@@ -234,6 +238,10 @@ var BrowserCommands = {
}
}
@@ -24,7 +24,7 @@ index e7f88f69fcc22efca4c7fc0363b9fe2729e1be6f..d7c4063d38576a34545b9af06c37937d
// A notification intended to be useful for modular peformance tracking
// starting as close as is reasonably possible to the time when the user
// expressed the intent to open a new tab. Since there are a lot of
@@ -313,6 +321,14 @@ var BrowserCommands = {
@@ -318,6 +326,14 @@ var BrowserCommands = {
return;
}
@@ -39,7 +39,7 @@ index e7f88f69fcc22efca4c7fc0363b9fe2729e1be6f..d7c4063d38576a34545b9af06c37937d
// Keyboard shortcuts that would close a tab that is pinned select the first
// unpinned tab instead.
if (
@@ -320,8 +336,8 @@ var BrowserCommands = {
@@ -325,8 +341,8 @@ var BrowserCommands = {
(event.ctrlKey || event.metaKey || event.altKey) &&
gBrowser.selectedTab.pinned
) {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-fullScreenAndPointerLock.js b/browser/base/content/browser-fullScreenAndPointerLock.js
index cd46701e9f4b672f392533c9ecc1c8570c3b2c5a..beb992702ea90e0b81f7bda4a6c0522932e84dfe 100644
index 1eaf79a4f6788c518a4759bbce81175fd5fba220..6fde5e944ad4a847180ca83a9e6f4fde20aa7b42 100644
--- a/browser/base/content/browser-fullScreenAndPointerLock.js
+++ b/browser/base/content/browser-fullScreenAndPointerLock.js
@@ -464,8 +464,6 @@ var FullScreen = {
@@ -501,8 +501,6 @@ var FullScreen = {
// don't need that kind of precision in our CSS.
shiftSize = shiftSize.toFixed(2);
let translate = shiftSize > 0 ? `0 ${shiftSize}px` : "";

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
index b64d2f52ed1eb3d0b8aa86700bc082d3fc95152b..dd8636148d0646f6949d6279d70e20c09d8c7c17 100644
index d09cf65931eda253b2a71131f42883ccf6eb5724..f617863dac8e07def02d1d4ef7e5ade1caf50df1 100644
--- a/browser/base/content/browser-init.js
+++ b/browser/base/content/browser-init.js
@@ -252,6 +252,7 @@ var gBrowserInit = {
@@ -302,6 +302,7 @@ var gBrowserInit = {
},
onLoad() {
@@ -10,7 +10,7 @@ index b64d2f52ed1eb3d0b8aa86700bc082d3fc95152b..dd8636148d0646f6949d6279d70e20c0
gBrowser.addEventListener("DOMUpdateBlockedPopups", e =>
PopupAndRedirectBlockerObserver.handleEvent(e)
);
@@ -446,6 +447,7 @@ var gBrowserInit = {
@@ -496,6 +497,7 @@ var gBrowserInit = {
this._handleURIToLoad();

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 942bb5688e98f66ad71560fb32e1ca26a8081edf..25ba741c35c49afbf4e6053df3a0a7296d3040d8 100644
index d1ab42d59f05513ec60a7578b7acab44875c544c..8c3cd75704991b8572d3f13a936fddd2616b2946 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -33,6 +33,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -34,6 +34,7 @@ ChromeUtils.defineESModuleGetters(this, {
"resource://gre/modules/ContextualIdentityService.sys.mjs",
CustomizableUI:
"moz-src:///browser/components/customizableui/CustomizableUI.sys.mjs",
@@ -24,7 +24,7 @@ index 942bb5688e98f66ad71560fb32e1ca26a8081edf..25ba741c35c49afbf4e6053df3a0a729
if (backDisabled) {
backCommand.removeAttribute("disabled");
} else {
@@ -3830,7 +3836,7 @@ function warnAboutClosingWindow() {
@@ -3715,7 +3721,7 @@ function warnAboutClosingWindow() {
if (!isPBWindow && !toolbar.visible) {
return gBrowser.warnAboutClosingTabs(
@@ -33,7 +33,7 @@ index 942bb5688e98f66ad71560fb32e1ca26a8081edf..25ba741c35c49afbf4e6053df3a0a729
gBrowser.closingTabsEnum.ALL
);
}
@@ -3870,7 +3876,7 @@ function warnAboutClosingWindow() {
@@ -3755,7 +3761,7 @@ function warnAboutClosingWindow() {
return (
isPBWindow ||
gBrowser.warnAboutClosingTabs(
@@ -42,7 +42,7 @@ index 942bb5688e98f66ad71560fb32e1ca26a8081edf..25ba741c35c49afbf4e6053df3a0a729
gBrowser.closingTabsEnum.ALL
)
);
@@ -3895,7 +3901,7 @@ function warnAboutClosingWindow() {
@@ -3780,7 +3786,7 @@ function warnAboutClosingWindow() {
AppConstants.platform != "macosx" ||
isPBWindow ||
gBrowser.warnAboutClosingTabs(
@@ -51,7 +51,7 @@ index 942bb5688e98f66ad71560fb32e1ca26a8081edf..25ba741c35c49afbf4e6053df3a0a729
gBrowser.closingTabsEnum.ALL
)
);
@@ -4835,6 +4841,9 @@ var ConfirmationHint = {
@@ -4720,6 +4726,9 @@ var ConfirmationHint = {
}
document.l10n.setAttributes(this._message, messageId, options.l10nArgs);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js
index 543630b89bc4f1d40eda7e4e7ae68a3c9f45e1e7..fac68af45985ad2feeb1daebd470d028b49d1dde 100644
index e3feaebc551bfe7127b9701a7f76996022516af0..460b39f2a9f1f36d4b821c693951214098b644f7 100644
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -261,6 +261,8 @@ var StarUI = {
@@ -33,7 +33,7 @@ index 543630b89bc4f1d40eda7e4e7ae68a3c9f45e1e7..fac68af45985ad2feeb1daebd470d028
removeBookmarkButtonCommand: function SU_removeBookmarkButtonCommand() {
this._removeBookmarksOnPopupHidden = true;
this.panel.hidePopup();
@@ -1811,6 +1828,7 @@ var BookmarkingUI = {
@@ -1815,6 +1832,7 @@ var BookmarkingUI = {
document.getElementById("context-bookmarkpage"),
PanelMultiView.getViewNode(document, "panelMenuBookmarkThisPage"),
document.getElementById("pageAction-panel-bookmark"),

View File

@@ -0,0 +1,9 @@
diff --git a/browser/base/content/browser-sets.inc.xhtml b/browser/base/content/browser-sets.inc.xhtml
index 1263856344c4613ea58639a64e747fd0c3f771f7..c83ed7dd6a2482354c5bd37ce2e2cbf88ee6cf60 100644
--- a/browser/base/content/browser-sets.inc.xhtml
+++ b/browser/base/content/browser-sets.inc.xhtml
@@ -418,3 +418,4 @@
internal="true"/>
#endif
</keyset>
+#include zen-keysets.inc.xhtml

View File

@@ -1,9 +0,0 @@
diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc
index 8871fc984acccfd9c54c7aef9f91934d81ba00c0..923ab3bda423eae77518f437221c32ca4990f5ce 100644
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -415,3 +415,4 @@
internal="true"/>
#endif
</keyset>
+#include zen-keysets.inc.xhtml

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-sets.js b/browser/base/content/browser-sets.js
index d9ab2ad00b862d56ea7aa8e2469d050d8df7f5dc..2efb25ff9cfd3a224724fffadfa0aee693ddf47d 100644
index 8b153dfac9421f0cce716ed399f33ec9b25eb311..5e461b0fc89455d38869ac70a7ce6a3b20ffd26b 100644
--- a/browser/base/content/browser-sets.js
+++ b/browser/base/content/browser-sets.js
@@ -272,7 +272,7 @@ document.addEventListener(
@@ -285,7 +285,7 @@ document.addEventListener(
}
});
@@ -11,7 +11,7 @@ index d9ab2ad00b862d56ea7aa8e2469d050d8df7f5dc..2efb25ff9cfd3a224724fffadfa0aee6
const SIDEBAR_REVAMP_PREF = "sidebar.revamp";
const SIDEBAR_REVAMP_ENABLED = Services.prefs.getBoolPref(
SIDEBAR_REVAMP_PREF,
@@ -310,6 +310,8 @@ document.addEventListener(
@@ -323,6 +323,8 @@ document.addEventListener(
panel: SidebarController.currentID,
opened: SidebarController._state.launcherExpanded,
});

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index b42287485c2baeabe831b0d54c6f09330b0caabd..e404c2e028e24eb4fa9b97f143ba476c1b1461fd 100644
index d8ed09dca6c8ae99ed1a84cef22462a0d7b517fe..dcb65c4268913fdf32302c9b4ac723131187922e 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -19,6 +19,7 @@
@@ -18,6 +18,7 @@
sizemode="normal"
retargetdocumentfocus="urlbar-input"
scrolling="false"
@@ -10,7 +10,7 @@ index b42287485c2baeabe831b0d54c6f09330b0caabd..e404c2e028e24eb4fa9b97f143ba476c
persist="screenX screenY width height sizemode"
data-l10n-sync="true">
<head>
@@ -101,8 +102,10 @@
@@ -100,8 +101,10 @@
<title data-l10n-id="browser-main-window-default-title"></title>
@@ -21,7 +21,7 @@ index b42287485c2baeabe831b0d54c6f09330b0caabd..e404c2e028e24eb4fa9b97f143ba476c
</head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
# All sets except for popupsets (commands, keys, and stringbundles)
@@ -135,9 +138,10 @@
@@ -134,9 +137,10 @@
</vbox>
</html:template>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index edeb473e46b3aa4b12eb4b59ce62e5ae48edd2a1..d2c6c8c150e732b77d65420520ca4905a9d3ea4d 100644
index b4abfb868fc7c13e789acb57b44e386de6d31bf0..ad917f5362ed4f3ba0149c214fb53d3f087bbfcf 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -2,7 +2,7 @@
@@ -11,8 +11,8 @@ index edeb473e46b3aa4b12eb4b59ce62e5ae48edd2a1..d2c6c8c150e732b77d65420520ca4905
<script src="chrome://browser/content/navigator-toolbox.js" />
<!-- Menu -->
@@ -18,9 +18,12 @@
#include browser-menubar.inc
@@ -18,9 +18,13 @@
#include browser-menubar.inc.xhtml
</toolbaritem>
<spacer flex="1" skipintoolbarset="true" style="order: 1000;"/>
-#include titlebar-items.inc.xhtml
@@ -22,14 +22,14 @@ index edeb473e46b3aa4b12eb4b59ce62e5ae48edd2a1..d2c6c8c150e732b77d65420520ca4905
+ <html:div id="zen-toolbar-background" class="zen-toolbar-background zen-browser-generic-background">
+ <html:div class="zen-browser-grain" />
+ </html:div>
+ <box id="zen-overflow-extensions-list" skipintoolbarset="true" contextmenu="toolbar-context-menu" />
<toolbar id="TabsToolbar"
class="browser-toolbar browser-titlebar"
fullscreentoolbar="true"
@@ -62,6 +65,9 @@
@@ -62,6 +66,8 @@
<html:sidebar-pins-promo id="drag-to-pin-promo-card"></html:sidebar-pins-promo>
<arrowscrollbox id="pinned-tabs-container" orient="horizontal" clicktoscroll=""></arrowscrollbox>
<splitter orient="vertical" id="vertical-pinned-tabs-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
+<html:div id="zen-overflow-extensions-list" skipintoolbarset="true"></html:div>
+<html:div id="zen-essentials" skipintoolbarset="true"></html:div>
+<html:div id="zen-tabs-wrapper">
<hbox class="tab-drop-indicator" hidden="true"/>
@@ -43,7 +43,7 @@ index edeb473e46b3aa4b12eb4b59ce62e5ae48edd2a1..d2c6c8c150e732b77d65420520ca4905
</tabs>
<toolbarbutton id="new-tab-button"
@@ -114,9 +121,10 @@
@@ -115,9 +122,10 @@
<toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/navigator-toolbox.js b/browser/base/content/navigator-toolbox.js
index 362a85c20d8f0633fa78f85578e4cf015fdd0e44..ef7d6ff9e0e9876bc1918e365fd0addcd177cecb 100644
index 1982ebadbd2df5ea309db487a4f30288f1af43e5..926c681d4733c84768a23407d60ca05859408b6d 100644
--- a/browser/base/content/navigator-toolbox.js
+++ b/browser/base/content/navigator-toolbox.js
@@ -11,7 +11,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -10,7 +10,7 @@ ChromeUtils.defineESModuleGetters(this, {
document.addEventListener(
"DOMContentLoaded",
() => {
@@ -11,7 +11,7 @@ index 362a85c20d8f0633fa78f85578e4cf015fdd0e44..ef7d6ff9e0e9876bc1918e365fd0addc
const widgetOverflow = document.getElementById("widget-overflow");
function onPopupShowing(event) {
@@ -189,6 +189,7 @@ document.addEventListener(
@@ -188,6 +188,7 @@ document.addEventListener(
#forward-button,
#reload-button ,
#reader-mode-button,
@@ -19,7 +19,7 @@ index 362a85c20d8f0633fa78f85578e4cf015fdd0e44..ef7d6ff9e0e9876bc1918e365fd0addc
#picture-in-picture-button,
#urlbar-zoom-button,
#star-button-box,
@@ -215,6 +216,17 @@ document.addEventListener(
@@ -214,6 +215,17 @@ document.addEventListener(
gBrowser.handleNewTabMiddleClick(element, event);
break;
@@ -37,7 +37,7 @@ index 362a85c20d8f0633fa78f85578e4cf015fdd0e44..ef7d6ff9e0e9876bc1918e365fd0addc
case "back-button":
case "forward-button":
case "reload-button":
@@ -330,6 +342,7 @@ document.addEventListener(
@@ -329,6 +341,7 @@ document.addEventListener(
#downloads-button,
#fxa-toolbar-menu-button,
#unified-extensions-button,
@@ -45,7 +45,7 @@ index 362a85c20d8f0633fa78f85578e4cf015fdd0e44..ef7d6ff9e0e9876bc1918e365fd0addc
#library-button,
#split-view-button,
#smartwindow-ask-button
@@ -414,6 +427,16 @@ document.addEventListener(
@@ -413,6 +426,16 @@ document.addEventListener(
gUnifiedExtensions.togglePanel(event);
break;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
index 5ee0ee4246d1c267b75328666a7f7f54e6f93246..ae778b88e1d295cdae2d0433d943ac467081b126 100644
index 97cb36e2ed48d00454e169fb0470b47ac994b883..1811a92885620c8a916937f467ebb7d0eb0d3a0e 100644
--- a/browser/base/content/nsContextMenu.sys.mjs
+++ b/browser/base/content/nsContextMenu.sys.mjs
@@ -370,6 +370,9 @@ export class nsContextMenu {
@@ -369,6 +369,9 @@ export class nsContextMenu {
this.initTextFragmentItems();
this.pdfjsContextMenu.initItems();

View File

@@ -18,4 +18,5 @@
#include ../../../zen/images/jar.inc.mn
#include ../../../zen/vendor/jar.inc.mn
#include ../../../zen/fonts/jar.inc.mn
#include ../../../zen/boosts/jar.inc.mn
#include ../../../zen/live-folders/jar.inc.mn

View File

@@ -9,5 +9,6 @@
<link rel="localization" href="browser/zen-menubar.ftl"/>
<link rel="localization" href="browser/zen-vertical-tabs.ftl"/>
<link rel="localization" href="browser/zen-folders.ftl"/>
<link rel="localization" href="browser/zen-boosts.ftl"/>
<link rel="localization" href="browser/zen-live-folders.ftl"/>
</linkset>

View File

@@ -75,6 +75,14 @@
data-l10n-id="unified-extensions-manage-extensions"
hidden="true" />
</vbox>
<vbox class="zen-site-data-section">
<hbox class="zen-site-data-section-header">
<label data-l10n-id="zen-site-data-boosts" flex="1" />
</hbox>
<vbox id="zen-site-data-boost-list">
<!-- settings will be inserted here -->
</vbox>
</vbox>
<vbox class="zen-site-data-section">
<hbox class="zen-site-data-section-header">
<label data-l10n-id="zen-site-data-settings" flex="1" />
@@ -87,6 +95,8 @@
<hbox id="zen-site-data-footer">
<toolbarbutton id="zen-site-data-security-info"
class="subviewbutton zen-interactive-button" />
<toolbarbutton id="zen-site-data-boost" data-l10n-id="zen-site-data-create-boost"
class="subviewbutton zen-interactive-button" />
<toolbarbutton id="zen-site-data-actions"
class="subviewbutton zen-interactive-button"
closemenu="none"

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/moz.build b/browser/base/moz.build
index 086b462e706bb46727d0fed85b4c98debaeaf721..44a4fcb9b8181678667ee11b0443eed681dd2a43 100644
index 286e17552e2ab2d7e44c6ba99c84630cadd24e94..076f813aea971db1e1c1429fc0b64c1784a22722 100644
--- a/browser/base/moz.build
+++ b/browser/base/moz.build
@@ -82,3 +82,5 @@ DEFINES["MOZ_APP_VERSION_DISPLAY"] = CONFIG["MOZ_APP_VERSION_DISPLAY"]
@@ -78,3 +78,5 @@ DEFINES["MOZ_APP_VERSION_DISPLAY"] = CONFIG["MOZ_APP_VERSION_DISPLAY"]
DEFINES["APP_LICENSE_BLOCK"] = "%s/content/overrides/app-license.html" % SRCDIR
JAR_MANIFESTS += ["jar.mn"]

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs
index 2152327b42c884456785ef065422e3ca6cc8c50b..932150495d23c0a63987abf14b3dc8a12eb42d6c 100644
index 430c6877c81824d8ab318cacc997d4eda4cb6a11..e8a195e1fe09952b90a0d73d13c6c15da2006bd4 100644
--- a/browser/components/BrowserContentHandler.sys.mjs
+++ b/browser/components/BrowserContentHandler.sys.mjs
@@ -603,6 +603,28 @@ nsBrowserContentHandler.prototype = {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index 75cdab491d35dc30be6c0a4ec6ab88e6fb4239aa..9c26fb1d6032bdecd6c552bd25694f45e3822d50 100644
index af635211046f9f1b2d473a14e8170837cd0d93cd..f07514a7e3ab55aa3321f0a7c0c092e91c2961ce 100644
--- a/browser/components/BrowserGlue.sys.mjs
+++ b/browser/components/BrowserGlue.sys.mjs
@@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
@@ -10,7 +10,7 @@ index 75cdab491d35dc30be6c0a4ec6ab88e6fb4239aa..9c26fb1d6032bdecd6c552bd25694f45
AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs",
AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
ASRouter: "resource:///modules/asrouter/ASRouter.sys.mjs",
@@ -1457,7 +1458,7 @@ BrowserGlue.prototype = {
@@ -1458,7 +1459,7 @@ BrowserGlue.prototype = {
windowcount++;
let tabbrowser = win.gBrowser;
if (tabbrowser) {
@@ -19,7 +19,7 @@ index 75cdab491d35dc30be6c0a4ec6ab88e6fb4239aa..9c26fb1d6032bdecd6c552bd25694f45
}
}
@@ -1622,6 +1623,8 @@ BrowserGlue.prototype = {
@@ -1623,6 +1624,8 @@ BrowserGlue.prototype = {
} else if (profileDataVersion < APP_DATA_VERSION) {
lazy.ProfileDataUpgrader.upgrade(profileDataVersion, APP_DATA_VERSION);
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/aboutwelcome/content/aboutwelcome.css b/browser/components/aboutwelcome/content/aboutwelcome.css
index e5bbb4c217ae7b05a2da79b332d72cc5429f061f..ea44d83dd0825a3bc950f6005025498644c7fc67 100644
index 98497769b135efd3200607ee2cf50e82d06ed3fd..68e0778cfc4dc70935a3d48e79542b4133b293d2 100644
--- a/browser/components/aboutwelcome/content/aboutwelcome.css
+++ b/browser/components/aboutwelcome/content/aboutwelcome.css
@@ -331,6 +331,11 @@ panel#feature-callout {
@@ -330,6 +330,11 @@ panel#feature-callout {
--panel-shadow-margin: 6px;
--panel-arrow-space: calc(var(--panel-shadow-margin) + var(--arrow-visible-height) - 1.5px);
--panel-margin-offset: calc(-1 * (var(--panel-shadow-margin) + var(--arrow-corner-distance) + (var(--arrow-width) / 2)));
@@ -14,7 +14,7 @@ index e5bbb4c217ae7b05a2da79b332d72cc5429f061f..ea44d83dd0825a3bc950f60050254986
}
panel#feature-callout::part(content) {
@@ -518,6 +523,12 @@ div#feature-callout.hidden {
@@ -517,6 +522,12 @@ div#feature-callout.hidden {
width: 25em;
gap: 16px;
background: var(--fc-background);
@@ -27,7 +27,7 @@ index e5bbb4c217ae7b05a2da79b332d72cc5429f061f..ea44d83dd0825a3bc950f60050254986
}
#feature-callout .screen[pos=callout] .section-main .main-content .main-content-inner {
gap: 12px;
@@ -850,6 +861,10 @@ panel#feature-callout::part(content) {
@@ -933,6 +944,10 @@ panel#feature-callout::part(content) {
overflow: visible;
transform: rotate(45deg);
transform-style: preserve-3d;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs b/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs
index 4081f59d041e91291d5e6b6b8c9ad96db5b6b2dc..d420a2fe4ca552b7f24ce9fbefc5f7302d7f2c8e 100644
index 97710ab0570a1a477ef4ed74a78c16448dfb7674..7d8ba5b1f2f330175fb57b906bb572fd7e1d36c8 100644
--- a/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs
+++ b/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs
@@ -269,6 +269,7 @@ export const AIWindow = {
@@ -277,6 +277,7 @@ export const AIWindow = {
},
_updateToolbarButtonPositions(win, { isToggling = false } = {}) {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs
index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f535e9d9e 100644
index 5905271a3343efa04b45f5d1a63bfca3de342755..af76922c1ba0b35a0072ec044f7d0860f9295d9d 100644
--- a/browser/components/customizableui/CustomizableUI.sys.mjs
+++ b/browser/components/customizableui/CustomizableUI.sys.mjs
@@ -14,6 +14,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
BrowserUsageTelemetry: "resource:///modules/BrowserUsageTelemetry.sys.mjs",
CustomizableWidgets:
"moz-src:///browser/components/customizableui/CustomizableWidgets.sys.mjs",
@@ -10,7 +10,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
HomePage: "resource:///modules/HomePage.sys.mjs",
PanelMultiView:
"moz-src:///browser/components/customizableui/PanelMultiView.sys.mjs",
@@ -348,7 +349,7 @@ var CustomizableUIInternal = {
@@ -347,7 +348,7 @@ var CustomizableUIInternal = {
{
type: CustomizableUI.TYPE_PANEL,
defaultPlacements: [],
@@ -19,7 +19,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
},
false
);
@@ -358,20 +359,15 @@ var CustomizableUIInternal = {
@@ -357,20 +358,15 @@ var CustomizableUIInternal = {
"back-button",
"forward-button",
"stop-reload-button",
@@ -41,7 +41,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
this.registerArea(
CustomizableUI.AREA_NAVBAR,
{
@@ -379,8 +375,6 @@ var CustomizableUIInternal = {
@@ -378,8 +374,6 @@ var CustomizableUIInternal = {
overflowable: true,
defaultPlacements: navbarPlacements,
verticalTabsDefaultPlacements: [
@@ -50,7 +50,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
],
defaultCollapsed: false,
},
@@ -404,10 +398,7 @@ var CustomizableUIInternal = {
@@ -403,10 +397,7 @@ var CustomizableUIInternal = {
{
type: CustomizableUI.TYPE_TOOLBAR,
defaultPlacements: [
@@ -61,7 +61,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
],
verticalTabsDefaultPlacements: [],
defaultCollapsed: null,
@@ -489,6 +480,7 @@ var CustomizableUIInternal = {
@@ -486,6 +477,7 @@ var CustomizableUIInternal = {
CustomizableUI.AREA_NAVBAR,
CustomizableUI.AREA_BOOKMARKS,
CustomizableUI.AREA_TABSTRIP,
@@ -69,7 +69,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
]);
if (AppConstants.platform != "macosx") {
toolbars.add(CustomizableUI.AREA_MENUBAR);
@@ -1265,6 +1257,9 @@ var CustomizableUIInternal = {
@@ -1262,6 +1254,9 @@ var CustomizableUIInternal = {
placements = gPlacements.get(area);
}
@@ -79,7 +79,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
// For toolbars that need it, mark as dirty.
let defaultPlacements = areaProperties.get("defaultPlacements");
if (
@@ -1772,7 +1767,6 @@ var CustomizableUIInternal = {
@@ -1769,7 +1764,6 @@ var CustomizableUIInternal = {
lazy.log.info(
"Widget " + aWidgetId + " not found, unable to remove from " + aArea
);
@@ -87,7 +87,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
}
this.notifyDOMChange(widgetNode, null, container, true, () => {
@@ -1782,7 +1776,7 @@ var CustomizableUIInternal = {
@@ -1779,7 +1773,7 @@ var CustomizableUIInternal = {
// We also need to remove the panel context menu if it's there:
this.ensureButtonContextMenu(widgetNode);
if (gPalette.has(aWidgetId) || this.isSpecialWidget(aWidgetId)) {
@@ -96,7 +96,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
} else {
window.gNavToolbox.palette.appendChild(widgetNode);
}
@@ -1950,16 +1944,16 @@ var CustomizableUIInternal = {
@@ -1947,16 +1941,16 @@ var CustomizableUIInternal = {
elem.setAttribute("skipintoolbarset", "true");
}
}
@@ -116,7 +116,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
// Handle initial state of vertical tabs.
if (isVerticalTabs) {
// Show the vertical tabs toolbar
@@ -2201,6 +2195,10 @@ var CustomizableUIInternal = {
@@ -2198,6 +2192,10 @@ var CustomizableUIInternal = {
* The identifier string of the area that aNode is being inserted into.
*/
insertWidgetBefore(aNode, aNextNode, aContainer, aAreaId) {
@@ -127,7 +127,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
this.notifyDOMChange(aNode, aNextNode, aContainer, false, () => {
this.setLocationAttributes(aNode, aAreaId);
aContainer.insertBefore(aNode, aNextNode);
@@ -4565,7 +4563,7 @@ var CustomizableUIInternal = {
@@ -4562,7 +4560,7 @@ var CustomizableUIInternal = {
* For all registered areas, builds those areas to reflect the current
* placement state of all widgets.
*/
@@ -136,7 +136,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
for (let [areaId, areaNodes] of gBuildAreas) {
let placements = gPlacements.get(areaId);
let isFirstChangedToolbar = true;
@@ -4576,7 +4574,7 @@ var CustomizableUIInternal = {
@@ -4573,7 +4571,7 @@ var CustomizableUIInternal = {
if (area.get("type") == CustomizableUI.TYPE_TOOLBAR) {
let defaultCollapsed = area.get("defaultCollapsed");
let win = areaNode.ownerGlobal;
@@ -145,7 +145,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
win.setToolbarVisibility(
areaNode,
typeof defaultCollapsed == "string"
@@ -5867,6 +5865,7 @@ export var CustomizableUI = {
@@ -5864,6 +5862,7 @@ export var CustomizableUI = {
unregisterArea(aName, aDestroyPlacements) {
CustomizableUIInternal.unregisterArea(aName, aDestroyPlacements);
},
@@ -153,7 +153,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
/**
* Add a widget to an area.
* If the area to which you try to add is not known to CustomizableUI,
@@ -7830,7 +7829,9 @@ class OverflowableToolbar {
@@ -7827,7 +7826,9 @@ class OverflowableToolbar {
);
if (webExtList && CustomizableUI.isWebExtensionWidget(child.id)) {
@@ -163,7 +163,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
webExtList.insertBefore(child, webExtList.firstElementChild);
} else {
child.setAttribute("cui-anchorid", this.#defaultListButton.id);
@@ -7890,7 +7891,7 @@ class OverflowableToolbar {
@@ -7887,7 +7888,7 @@ class OverflowableToolbar {
) {
continue;
}
@@ -172,7 +172,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
if (child != aExceptChild) {
sum += getInlineSize(child);
}
@@ -7914,11 +7915,11 @@ class OverflowableToolbar {
@@ -7911,11 +7912,11 @@ class OverflowableToolbar {
parseFloat(style.paddingLeft) -
parseFloat(style.paddingRight) -
toolbarChildrenWidth;
@@ -186,11 +186,34 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
});
lazy.log.debug(
@@ -7933,7 +7934,14 @@ class OverflowableToolbar {
@@ -7930,7 +7931,37 @@ class OverflowableToolbar {
Math.max(targetWidth, targetChildrenWidth)
);
totalAvailWidth = Math.ceil(totalAvailWidth);
- let isOverflowing = targetContentWidth > totalAvailWidth;
+ if (this.#target.id == 'nav-bar-customization-target' &&
+ 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 width = [
+ ...win.gURLBar._inputContainer.querySelectorAll(availSelectors),
+ ...win.document.getElementById("zen-overflow-extensions-list").querySelectorAll(availSelectors)
+ ].length * 26;
+ const urlbarWidth = win.document.getElementById("urlbar-container").getBoundingClientRect().width;
+ let overflowing = width > urlbarWidth * (Services.prefs.getIntPref("zen.view.overflow-webext-toolbar-threshold", 60) / 100);
+ let wasOverflowing = win.gURLBar._isOverflowingItems;
+ win.gURLBar._isOverflowingItems = overflowing;
+ if (wasOverflowing !== overflowing) {
+ const items = gPlacements.get("nav-bar");
+ for (let item of items) {
+ let [, node] = CustomizableUIInternal.getWidgetNode(item, win);
+ if (node?.hasAttribute("data-extensionid")) {
+ win.gZenVerticalTabsManager.appendCustomizableItem(win.document.getElementById("zen-sidebar-top-buttons-customization-target"), node);
+ }
+ }
+ }
+ }
+ if (win.gZenVerticalTabsManager._hasSetSingleToolbar && this.#toolbar.id == 'nav-bar') return { isOverflowing: false, targetContentWidth, totalAvailWidth };
+ let isOverflowing = targetContentWidth + (win.gZenVerticalTabsManager._hasSetSingleToolbar ? 0.1 : 0) > totalAvailWidth;
+ if (win.gZenVerticalTabsManager._hasSetSingleToolbar &&
@@ -202,7 +225,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
return { isOverflowing, targetContentWidth, totalAvailWidth };
}
@@ -7994,7 +8002,11 @@ class OverflowableToolbar {
@@ -7991,7 +8022,11 @@ class OverflowableToolbar {
return;
}
}
@@ -215,7 +238,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
lazy.log.debug(
`Need ${minSize} but width is ${totalAvailWidth} so bailing`
);
@@ -8027,7 +8039,7 @@ class OverflowableToolbar {
@@ -8024,7 +8059,7 @@ class OverflowableToolbar {
}
}
if (!inserted) {
@@ -224,7 +247,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
}
child.removeAttribute("cui-anchorid");
child.removeAttribute("overflowedItem");
@@ -8153,6 +8165,9 @@ class OverflowableToolbar {
@@ -8150,6 +8185,9 @@ class OverflowableToolbar {
* if no such list exists.
*/
get #webExtList() {
@@ -234,7 +257,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
if (!this.#webExtListRef) {
let targetID = this.#toolbar.getAttribute("addon-webext-overflowtarget");
if (!targetID) {
@@ -8164,6 +8179,9 @@ class OverflowableToolbar {
@@ -8161,6 +8199,9 @@ class OverflowableToolbar {
let win = this.#toolbar.ownerGlobal;
let { panel } = win.gUnifiedExtensions;
this.#webExtListRef = panel.querySelector(`#${targetID}`);
@@ -244,7 +267,7 @@ index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f
}
return this.#webExtListRef;
}
@@ -8372,7 +8390,7 @@ class OverflowableToolbar {
@@ -8369,7 +8410,7 @@ class OverflowableToolbar {
break;
}
case "mousedown": {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js
index 5056ff7fba62f8340c58cbaa30833aad12b4fc70..32dbd206cbc8576ec5a5f958f43670fa90c050b8 100644
index 5a469ce153dada011144fb4b66747c41e778ff1e..83bedb74df5b4064e8a0580f8b2ee9c0c27f81a8 100644
--- a/browser/components/customizableui/content/panelUI.js
+++ b/browser/components/customizableui/content/panelUI.js
@@ -647,10 +647,12 @@ const PanelUI = {
@@ -666,10 +666,12 @@ const PanelUI = {
if (hasKids && !this.navbar.hasAttribute("nonemptyoverflow")) {
this.navbar.setAttribute("nonemptyoverflow", "true");
this.overflowPanel.setAttribute("hasfixeditems", "true");
@@ -15,7 +15,7 @@ index 5056ff7fba62f8340c58cbaa30833aad12b4fc70..32dbd206cbc8576ec5a5f958f43670fa
}
},
@@ -998,7 +1000,7 @@ const PanelUI = {
@@ -1017,7 +1019,7 @@ const PanelUI = {
el.removeAttribute("data-lazy-l10n-id");
});

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/extensions/parent/ext-browser.js b/browser/components/extensions/parent/ext-browser.js
index 3ce6ae3271bb0b3873118a94363a9552877559f8..9e62181986d039cc171dfe87de1d95c1f5aacd8c 100644
index d1209bc2c828a19ade8cc027cdea6f42007f0de6..0a2def2f3c32618304cd8a263906b0c6e040dcbc 100644
--- a/browser/components/extensions/parent/ext-browser.js
+++ b/browser/components/extensions/parent/ext-browser.js
@@ -354,6 +354,7 @@ class TabTracker extends TabTrackerBase {
@@ -352,6 +352,7 @@ class TabTracker extends TabTrackerBase {
}
getId(nativeTab) {
@@ -10,7 +10,7 @@ index 3ce6ae3271bb0b3873118a94363a9552877559f8..9e62181986d039cc171dfe87de1d95c1
let id = this._tabs.get(nativeTab);
if (id) {
return id;
@@ -388,6 +389,7 @@ class TabTracker extends TabTrackerBase {
@@ -386,6 +387,7 @@ class TabTracker extends TabTrackerBase {
if (nativeTab.ownerGlobal.closed) {
throw new Error("Cannot attach ID to a tab in a closed window.");
}
@@ -18,7 +18,7 @@ index 3ce6ae3271bb0b3873118a94363a9552877559f8..9e62181986d039cc171dfe87de1d95c1
this._tabs.set(nativeTab, id);
if (nativeTab.linkedBrowser) {
@@ -1278,6 +1280,10 @@ class TabManager extends TabManagerBase {
@@ -1276,6 +1278,10 @@ class TabManager extends TabManagerBase {
}
canAccessTab(nativeTab) {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/extensions/parent/ext-tabs.js b/browser/components/extensions/parent/ext-tabs.js
index ae004ad48e86aae9d13fc6aa5f77f3095763f829..1e3d14a5c6fcbebbc677e0e57ef2b2176a141a3c 100644
index 636e0f8cd1d489658833cf101152576e9fdb52af..e7578a059504b89a852061be037c323a107fe5ce 100644
--- a/browser/components/extensions/parent/ext-tabs.js
+++ b/browser/components/extensions/parent/ext-tabs.js
@@ -516,6 +516,7 @@ this.tabs = class extends ExtensionAPIPersistent {
@@ -514,6 +514,7 @@ this.tabs = class extends ExtensionAPIPersistent {
}
let tab = tabManager.getWrapper(updatedTab);
@@ -10,7 +10,7 @@ index ae004ad48e86aae9d13fc6aa5f77f3095763f829..1e3d14a5c6fcbebbc677e0e57ef2b217
let changeInfo = {};
for (let prop of needed) {
@@ -881,6 +882,7 @@ this.tabs = class extends ExtensionAPIPersistent {
@@ -883,6 +884,7 @@ this.tabs = class extends ExtensionAPIPersistent {
});
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/places/PlacesUIUtils.sys.mjs b/browser/components/places/PlacesUIUtils.sys.mjs
index 2db11dad245dccca246cc8429a7498af9f143d5f..980ec44d9e92639b249bc83f59ea3bfae40dd921 100644
index b21f7721dea2d485ccba1fd6fd7e65e17480e3d3..89048d9ea2b4edf2b0cab77f661c07f4d9453c3f 100644
--- a/browser/components/places/PlacesUIUtils.sys.mjs
+++ b/browser/components/places/PlacesUIUtils.sys.mjs
@@ -61,6 +61,7 @@ class BookmarkState {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/places/content/browserPlacesViews.js b/browser/components/places/content/browserPlacesViews.js
index 384d599c58cefbf80f5a50489fc401df0c8de8a5..aa85972946c3ff7866fbea86b0372432fb02cd6f 100644
index 463913926c58e6c622e0fcc60534921f02814829..0143c48c48e132464226db810f4ea4d2720c3c49 100644
--- a/browser/components/places/content/browserPlacesViews.js
+++ b/browser/components/places/content/browserPlacesViews.js
@@ -328,12 +328,23 @@ class PlacesViewBase {
@@ -37,7 +37,7 @@ index 384d599c58cefbf80f5a50489fc401df0c8de8a5..aa85972946c3ff7866fbea86b0372432
} else if (PlacesUtils.containerTypes.includes(type)) {
element = document.createXULElement("menu");
element.setAttribute("container", "true");
@@ -1015,25 +1027,33 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1058,25 +1070,33 @@ class PlacesToolbar extends PlacesViewBase {
this._rootElt.firstChild.remove();
}
@@ -82,7 +82,7 @@ index 384d599c58cefbf80f5a50489fc401df0c8de8a5..aa85972946c3ff7866fbea86b0372432
);
++startIndex;
if (elt.localName != "toolbarseparator") {
@@ -1041,15 +1061,12 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1084,15 +1104,12 @@ class PlacesToolbar extends PlacesViewBase {
}
}
if (!elt) {
@@ -101,7 +101,7 @@ index 384d599c58cefbf80f5a50489fc401df0c8de8a5..aa85972946c3ff7866fbea86b0372432
});
});
@@ -1059,7 +1076,7 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1102,7 +1119,7 @@ class PlacesToolbar extends PlacesViewBase {
let fragment = document.createDocumentFragment();
for (let i = startIndex; i < limit; ++i) {
@@ -110,7 +110,7 @@ index 384d599c58cefbf80f5a50489fc401df0c8de8a5..aa85972946c3ff7866fbea86b0372432
}
await new Promise(resolve => window.requestAnimationFrame(resolve));
if (!this._isAlive) {
@@ -1122,6 +1139,8 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1165,6 +1182,8 @@ class PlacesToolbar extends PlacesViewBase {
"scheme",
PlacesUIUtils.guessUrlSchemeForUI(aChild.uri)
);
@@ -119,7 +119,7 @@ index 384d599c58cefbf80f5a50489fc401df0c8de8a5..aa85972946c3ff7866fbea86b0372432
}
}
@@ -2314,7 +2333,7 @@ this.PlacesPanelview = class PlacesPanelview extends PlacesViewBase {
@@ -2359,7 +2378,7 @@ this.PlacesPanelview = class PlacesPanelview extends PlacesViewBase {
PlacesUIUtils.guessUrlSchemeForUI(placesNode.uri)
);
element.setAttribute("label", PlacesUIUtils.getBestTitle(placesNode));

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/dialogs/syncChooseWhatToSync.xhtml b/browser/components/preferences/dialogs/syncChooseWhatToSync.xhtml
index ef127a1bc2e3ea4221b641156c38a74edb3b44ae..acd39fe7f6dc7ec03ea50928e2d002791b834dcf 100644
index a893c5ec3d007820d98f5d92dd039640faa2c181..9cbd00102e44ccf98b37845474d92d57bac0842d 100644
--- a/browser/components/preferences/dialogs/syncChooseWhatToSync.xhtml
+++ b/browser/components/preferences/dialogs/syncChooseWhatToSync.xhtml
@@ -27,6 +27,10 @@
@@ -26,6 +26,10 @@
rel="localization"
href="browser/preferences/preferences.ftl"
/>
@@ -13,7 +13,7 @@ index ef127a1bc2e3ea4221b641156c38a74edb3b44ae..acd39fe7f6dc7ec03ea50928e2d00279
</linkset>
<script src="chrome://global/content/preferencesBindings.js" />
<script src="chrome://browser/content/preferences/dialogs/syncChooseWhatToSync.js" />
@@ -87,6 +91,12 @@
@@ -86,6 +90,12 @@
preference="services.sync.engine.prefs"
/>
</html:div>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
index b2d65603ec714b49249789d0e48b0b677c9eaea6..6cea34be90e2f181fd3e5770f7e2fd99c483b8d8 100644
index 78e38f98c1f69df31459fd4b6a119c93f6509c02..33abd46566146272da9f561e11ffa290d7000111 100644
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -51,3 +51,5 @@ browser.jar:
@@ -54,3 +54,5 @@ browser.jar:
content/browser/preferences/widgets/sync-device-name.mjs (widgets/sync-device-name/sync-device-name.mjs)
content/browser/preferences/widgets/sync-engines-list.mjs (widgets/sync-engine-list/sync-engines-list.mjs)
content/browser/preferences/widgets/sync-engines-list.css (widgets/sync-engine-list/sync-engines-list.css)

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
index 7d6bbc54d21bf149dd1b99a38ca803654e6908eb..4da0e5fc921bb0ee24ace443c0c119fdd2707fc9 100644
index 6b96ff01e43087f8c609df17204441616b7013f3..df85ec789c54146b3a702169f33adf36c11b85da 100644
--- a/browser/components/preferences/main.inc.xhtml
+++ b/browser/components/preferences/main.inc.xhtml
@@ -96,6 +96,7 @@

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index 8f8da3c4cabb4a05b50431b1feeff8f1f1abcf6e..e57102247eb739ed431bd838a3004b353342defb 100644
index 6f4cb34d1639ac76a6d4ca40f0d33ae6fb6bf565..1f336a09d6f2e367effdf26e8baf58b5686d252d 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -2658,6 +2658,11 @@ function createStartupConfig(hidden = false) {
@@ -2537,6 +2537,11 @@ function createStartupConfig(hidden = false) {
id: "browserRestoreSession",
l10nId: "startup-restore-windows-and-tabs",
},
@@ -14,16 +14,16 @@ index 8f8da3c4cabb4a05b50431b1feeff8f1f1abcf6e..e57102247eb739ed431bd838a3004b35
{
id: "windowsLaunchOnLogin",
l10nId: "windows-launch-on-login",
@@ -2755,7 +2760,7 @@ SettingGroupManager.registerGroups({
},
@@ -2578,7 +2583,7 @@ function createStartupConfig(hidden = false) {
SettingGroupManager.registerGroups({
defaultBrowser: createDefaultBrowserConfig(),
startup: createStartupConfig(
- Services.prefs.getBoolPref("browser.settings-redesign.enabled", false)
+ false
),
importBrowserData: {
l10nId: "preferences-data-migration-group",
@@ -5174,7 +5179,7 @@ function getBundleForLocales(newLocales) {
zoom: {
l10nId: "preferences-zoom-header2",
@@ -3393,7 +3398,7 @@ function getBundleForLocales(newLocales) {
])
);
return new Localization(

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 2d6cba7fac0c7de6d7c4a819f2c7ad20ce10bb33..15434dac6b501cf6f7a6968c6363c59288043c3e 100644
index 9d13733318e7a147adee1e44f96570c94f4948df..fb625d8da021dc0cebd7a14ca47446a0632e8e7a 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -121,6 +121,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {
@@ -10,7 +10,7 @@ index 2d6cba7fac0c7de6d7c4a819f2c7ad20ce10bb33..15434dac6b501cf6f7a6968c6363c592
],
resizeCallback: async ({ title, frame }) => {
// Search within main document and highlight matched keyword.
@@ -324,6 +325,10 @@ function init_all() {
@@ -398,6 +399,10 @@ function init_all() {
register_module("paneSearch", gSearchPane);
register_module("panePrivacy", gPrivacyPane);
register_module("paneContainers", gContainersPane);
@@ -19,5 +19,5 @@ index 2d6cba7fac0c7de6d7c4a819f2c7ad20ce10bb33..15434dac6b501cf6f7a6968c6363c592
+ register_module("paneZenCKS", gZenCKSSettings);
+ register_module("paneZenMarketplace", gZenMarketplaceManager);
let redesignEnabled = Services.prefs.getBoolPref(
"browser.settings-redesign.enabled"
if (ExperimentAPI.labsEnabled) {
// Set hidden based on previous load's hidden value or if Nimbus is

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index b006d5e5e64c418fbf930c010401e4ea3a3647a3..ed75c48a2cdf47dd957b0598282fb211ca2fb1b5 100644
index 3c4b3225c672bcb172e7f946bc5f98d424e21e84..d10824470c564b6631333f197de897c21ccc19f5 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -42,6 +42,8 @@
@@ -11,58 +11,34 @@ index b006d5e5e64c418fbf930c010401e4ea3a3647a3..ed75c48a2cdf47dd957b0598282fb211
<link rel="localization" href="branding/brand.ftl"/>
<link rel="localization" href="browser/browser.ftl"/>
<!-- Used by fontbuilder.js -->
@@ -124,6 +126,50 @@
<label class="category-name" flex="1" data-l10n-id="pane-general-title"></label>
</richlistitem>
+ <richlistitem id="category-zen-looks"
+ class="category"
+ value="paneZenLooks"
+ helpTopic="prefs-main"
+ data-l10n-id="category-zen-looks"
+ data-l10n-attrs="tooltiptext"
+ align="center">
+ <image class="category-icon"/>
+ <label class="category-name" flex="1" data-l10n-id="pane-zen-looks-title"></label>
+ </richlistitem>
+
+ <richlistitem id="category-zen-tabs-management"
+ class="category"
+ value="paneZenTabManagement"
+ helpTopic="prefs-main"
+ data-l10n-id="category-zen-workspaces"
+ data-l10n-attrs="tooltiptext"
+ align="center">
+ <image class="category-icon"/>
+ <label class="category-name" flex="1" data-l10n-id="pane-zen-tabs-title"></label>
+ </richlistitem>
+
+ <richlistitem id="category-zen-CKS"
+ class="category"
+ value="paneZenCKS"
+ helpTopic="prefs-main"
+ data-l10n-id="category-zen-CKS"
+ data-l10n-attrs="tooltiptext"
+ align="center">
+ <image class="category-icon"/>
+ <label class="category-name" flex="1" data-l10n-id="pane-zen-CKS-title"></label>
+ </richlistitem>
+
+ <richlistitem id="category-zen-marketplace"
+ class="category"
+ value="paneZenMarketplace"
+ helpTopic="prefs-main"
+ data-l10n-id="category-zen-marketplace"
+ data-l10n-attrs="tooltiptext"
+ align="center">
+ <image class="category-icon"/>
+ <label class="category-name" flex="1" data-l10n-id="pane-zen-marketplace-title"></label>
+ </richlistitem>
+
<richlistitem id="category-home"
class="category"
value="paneHome"
@@ -266,6 +312,10 @@
@@ -126,6 +128,26 @@
iconsrc="chrome://browser/skin/preferences/category-general.svg"
data-l10n-id="pane-general-title">
</html:moz-page-nav-button>
+ <html:moz-page-nav-button id="category-zen-looks"
+ view="paneZenLooks"
+ iconsrc="chrome://browser/skin/customize.svg"
+ data-l10n-id="pane-zen-looks-title">
+ </html:moz-page-nav-button>
+ <html:moz-page-nav-button id="category-zen-tabs-management"
+ view="paneZenTabManagement"
+ iconsrc="chrome://browser/skin/window.svg"
+ data-l10n-id="pane-zen-tabs-title">
+ </html:moz-page-nav-button>
+ <html:moz-page-nav-button id="category-zen-CKS"
+ view="paneZenCKS"
+ iconsrc="chrome://browser/skin/quickactions.svg"
+ data-l10n-id="pane-zen-CKS-title">
+ </html:moz-page-nav-button>
+ <html:moz-page-nav-button id="category-zen-marketplace"
+ view="paneZenMarketplace"
+ iconsrc="chrome://mozapps/skin/extensions/category-themes.svg"
+ data-l10n-id="pane-zen-marketplace-title">
+ </html:moz-page-nav-button>
<html:moz-page-nav-button id="category-home"
view="paneHome"
iconsrc="chrome://browser/skin/home.svg"
@@ -218,6 +240,10 @@
#include sync.inc.xhtml
#include experimental.inc.xhtml
#include moreFromMozilla.inc.xhtml

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/sync.inc.xhtml b/browser/components/preferences/sync.inc.xhtml
index b889d42301de3c4f845105bf09d19b052dca9eae..015b751bd46f2499a93e328c903475ce2d60d079 100644
index c379e1a5f82692406a92d9fcd3bca2769dfac5b2..af037dd3d995813d966524ac44a3795d0c227071 100644
--- a/browser/components/preferences/sync.inc.xhtml
+++ b/browser/components/preferences/sync.inc.xhtml
@@ -223,6 +223,10 @@
@@ -224,6 +224,10 @@
<image class="sync-engine-image sync-engine-prefs" alt=""/>
<label data-l10n-id="sync-currently-syncing-settings"/>
</html:div>

View File

@@ -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;
},
};

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 71921cec2b6aa0f103856c31254fd6c4affefccb..ed13d7e2aa5ff1199872fedbc26494aae463ace4 100644
index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea30f7d70a 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -129,6 +129,9 @@ const TAB_EVENTS = [
@@ -358,7 +358,7 @@ index 71921cec2b6aa0f103856c31254fd6c4affefccb..ed13d7e2aa5ff1199872fedbc26494aa
Glean.sessionRestore.shutdownFlushAllOutcomes.timed_out.add(1);
deferred.resolve();
}
@@ -8552,6 +8614,7 @@ var SessionStoreInternal = {
@@ -8554,6 +8616,7 @@ var SessionStoreInternal = {
if (
!savedTabGroupState.tabs.length ||
this.getSavedTabGroup(savedTabGroupState.id)

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js
index ae85009ad8f0a1cc6d3f3a890b27178df99e5ece..a432f7ee5d3f92bf623ff6d00d5b68ab7a6ecbe7 100644
index 2c13f19ec4f962ce3ecaface0ae5d00c50ca913f..eb696819a1af4cfae6352fc5696fd95590bed342 100644
--- a/browser/components/sidebar/browser-sidebar.js
+++ b/browser/components/sidebar/browser-sidebar.js
@@ -807,7 +807,7 @@ var SidebarController = {
@@ -834,7 +834,7 @@ var SidebarController = {
setPosition() {
// First reset all ordinals to match DOM ordering.
let contentArea = document.getElementById("tabbrowser-tabbox");

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
index 9c5e92fbd555d328ce09c0cf0ff8078584f68478..2af7a428bc830d8c12b3d3c0af375c97e6942994 100644
index eebff0f59df42d3ef075f3eea1bd9269c47ba80d..6ab43a810f4cb61eedc02bb42026f6b5e282e785 100644
--- a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
+++ b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
@@ -939,6 +939,7 @@ export class AsyncTabSwitcher {
@@ -938,6 +938,7 @@ export class AsyncTabSwitcher {
this.tabbrowser._printPreviewBrowsers.has(browser) ||
this.tabbrowser.splitViewBrowsers.includes(browser) ||
lazy.PictureInPicture.isOriginatingBrowser(browser)

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/TabUnloader.sys.mjs b/browser/components/tabbrowser/TabUnloader.sys.mjs
index aefccef39f0b81176a5710a794e8a5e2650d6507..53c838b3bc322cadee4ef9b411d02fc0af8c35e5 100644
index a6d6c5405f98c839b7c0f2007e053e874bb7ce07..9d8c6066ce917e15fbf9e19284a3db50aa5a3815 100644
--- a/browser/components/tabbrowser/TabUnloader.sys.mjs
+++ b/browser/components/tabbrowser/TabUnloader.sys.mjs
@@ -52,7 +52,7 @@ let CRITERIA_WEIGHT = 1;
@@ -51,7 +51,7 @@ let CRITERIA_WEIGHT = 1;
*/
let DefaultTabUnloaderMethods = {
isNonDiscardable(tab, weight) {
@@ -11,7 +11,7 @@ index aefccef39f0b81176a5710a794e8a5e2650d6507..53c838b3bc322cadee4ef9b411d02fc0
return weight;
}
@@ -106,7 +106,7 @@ let DefaultTabUnloaderMethods = {
@@ -105,7 +105,7 @@ let DefaultTabUnloaderMethods = {
*iterateTabs() {
for (let win of Services.wm.getEnumerator("navigator:browser")) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/browser-ctrlTab.js b/browser/components/tabbrowser/content/browser-ctrlTab.js
index b435917892ac77fb433ea709f2524db2f2347a1d..fcbfeb92f3ae4effbfd3333514ed4d412e3063c6 100644
index 727e21f1754b0842080d8f3e29060baad445df66..ee9df3a311fc72954e064a2cbc56b716d116314a 100644
--- a/browser/components/tabbrowser/content/browser-ctrlTab.js
+++ b/browser/components/tabbrowser/content/browser-ctrlTab.js
@@ -252,7 +252,8 @@ var ctrlTab = {
@@ -30,7 +30,7 @@ index b435917892ac77fb433ea709f2524db2f2347a1d..fcbfeb92f3ae4effbfd3333514ed4d41
return;
}
@@ -751,7 +752,7 @@ var ctrlTab = {
@@ -759,7 +760,7 @@ var ctrlTab = {
_initRecentlyUsedTabs() {
this._recentlyUsedTabs = Array.prototype.filter.call(
gBrowser.tabs,

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/drag-and-drop.js b/browser/components/tabbrowser/content/drag-and-drop.js
index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad3229ebdc2d2 100644
index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c85280e74993 100644
--- a/browser/components/tabbrowser/content/drag-and-drop.js
+++ b/browser/components/tabbrowser/content/drag-and-drop.js
@@ -35,6 +35,9 @@
@@ -47,7 +47,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
event.stopPropagation();
+ if (draggedTab && dropEffect == "move") {
+ this.handle_drop_transition?.(draggedTab._dragData.dropElement, draggedTab, movingTabs, draggedTab._dragData.dropBefore);
+ gZenPinnedTabManager.moveToAnotherTabContainerIfNecessary(event, draggedTab, movingTabs, this._getDropIndex(event));
+ [draggedTab, movingTabs] = gZenPinnedTabManager.moveToAnotherTabContainerIfNecessary(event, draggedTab, movingTabs, this._getDropIndex(event));
+ }
if (draggedTab && dropEffect == "copy") {
let duplicatedDraggedTab;
@@ -73,7 +73,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
if (this._tabbrowserTabs.isContainerVerticalPinnedGrid(draggedTab)) {
// Update both translate axis for pinned vertical expanded tabs
@@ -390,11 +401,13 @@
@@ -392,11 +403,13 @@
this._dragToPinPromoCard,
];
let shouldPin =
@@ -87,7 +87,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
isTab(draggedTab) &&
draggedTab.pinned &&
this._tabbrowserTabs.arrowScrollbox.contains(event.target);
@@ -458,6 +471,7 @@
@@ -466,6 +479,7 @@
}
}
@@ -95,7 +95,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
if (shouldTranslate) {
let translationPromises = [];
for (let item of movingTabs) {
@@ -469,7 +483,7 @@
@@ -477,7 +491,7 @@
item.removeAttribute("tabdrop-samewindow");
resolve();
};
@@ -104,7 +104,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -544,7 +558,7 @@
@@ -552,7 +566,7 @@
if (tab.selected) {
selectedTab = tab;
indexForSelectedTab = newIndex;
@@ -113,7 +113,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
const droppedIntoPinnedArea = dropIndex < gBrowser.pinnedTabCount;
const newSplitView = gBrowser.adoptSplitView(tab, {
elementIndex: droppedIntoPinnedArea
@@ -569,7 +583,7 @@
@@ -577,7 +591,7 @@
}
}
}
@@ -122,7 +122,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
const newTab = gBrowser.adoptTab(selectedTab, {
elementIndex: indexForSelectedTab,
selectTab: selectedTab == draggedTab,
@@ -603,10 +617,6 @@
@@ -611,10 +625,6 @@
this._tabbrowserTabs.dragAndDropElements[
gBrowser.pinnedTabCount + unpinnedSplitViews.length - 1
];
@@ -133,7 +133,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
}
}
} else {
@@ -655,6 +665,7 @@
@@ -664,6 +674,7 @@
let nextItem = this._tabbrowserTabs.dragAndDropElements[newIndex];
let tabGroup = isTab(nextItem) && nextItem.group;
@@ -141,7 +141,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
gBrowser.loadTabs(urls, {
inBackground,
replace,
@@ -696,7 +707,16 @@
@@ -705,7 +716,16 @@
this._expandGroupOnDrop(draggedTab);
}
this._resetTabsAfterDrop(draggedTab.ownerDocument);
@@ -159,7 +159,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
if (
dt.mozUserCancelled ||
dt.dropEffect != "none" ||
@@ -909,11 +929,10 @@
@@ -918,11 +938,10 @@
return this.#getHorizontalScrollboxDragTarget(event, ignoreSides);
}
while (target) {
@@ -175,7 +175,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
break;
}
target = target.parentNode;
@@ -943,6 +962,9 @@
@@ -952,6 +971,9 @@
return null;
}
}
@@ -185,7 +185,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
return target;
}
@@ -1002,7 +1024,8 @@
@@ -1011,7 +1033,8 @@
isTabGroupLabel(draggedTab) &&
draggedTab._dragData?.expandGroupOnDrop
) {
@@ -195,7 +195,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
}
}
@@ -1186,7 +1209,6 @@
@@ -1195,7 +1218,6 @@
// using updateDragImage. On Linux, we can use a panel.
if (platform == "win" || platform == "macosx") {
captureListener = function () {
@@ -203,7 +203,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
};
} else {
// Create a panel to use it in setDragImage
@@ -1224,7 +1246,6 @@
@@ -1233,7 +1255,6 @@
);
dragImageOffset = dragImageOffset * scale;
}
@@ -211,7 +211,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
// _dragData.offsetX/Y give the coordinates that the mouse should be
// positioned relative to the corner of the new window created upon
@@ -1243,7 +1264,7 @@
@@ -1252,7 +1273,7 @@
let dropEffect = this.getDropEffectForTabDrag(event);
let isMovingInTabStrip = !fromTabList && dropEffect == "move";
let collapseTabGroupDuringDrag =
@@ -220,7 +220,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
tab._dragData = {
offsetX: this._tabbrowserTabs.verticalMode
@@ -1253,7 +1274,7 @@
@@ -1262,7 +1283,7 @@
? event.screenY - window.screenY - tabOffset
: event.screenY - window.screenY,
scrollPos:
@@ -229,7 +229,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
? this._tabbrowserTabs.pinnedTabsContainer.scrollPosition
: this._tabbrowserTabs.arrowScrollbox.scrollPosition,
screenX: event.screenX,
@@ -1300,6 +1321,7 @@
@@ -1309,6 +1330,7 @@
if (tabStripItemElement.hasAttribute("dragtarget")) {
return;
}
@@ -237,7 +237,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
let isPinned = tab.pinned;
let dragAndDropElements = this._tabbrowserTabs.dragAndDropElements;
let isGrid = this._tabbrowserTabs.isContainerVerticalPinnedGrid(tab);
@@ -1666,23 +1688,6 @@
@@ -1675,23 +1697,6 @@
// Slide the relevant tabs to their new position.
// non-moving tabs adjust for RTL
@@ -261,7 +261,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
// moving tabs don't adjust for RTL
for (let item of selectedElements) {
if (
@@ -1731,7 +1736,6 @@
@@ -1740,7 +1745,6 @@
for (let item of this._tabbrowserTabs.dragAndDropElements) {
delete item._moveTogetherSelectedTabsData;
item = elementToMove(item);
@@ -269,7 +269,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
item.removeAttribute("multiselected-move-together");
}
}
@@ -2578,7 +2582,6 @@
@@ -2587,7 +2591,6 @@
tab.style.top = "";
tab.style.maxWidth = "";
tab.style.pointerEvents = "";
@@ -277,7 +277,7 @@ index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad322
tab.removeAttribute("small-stack");
tab.removeAttribute("big-stack");
}
@@ -2587,11 +2590,9 @@
@@ -2596,11 +2599,9 @@
)) {
label.style.width = "";
label.style.maxWidth = "";

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index 2e02bad1a7c89b4c3b5aee1e14c13bb953a64eb6..3ac8d2facb224ae39d2199f2c5ec08b77e0c1dfd 100644
index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d645641cd 100644
--- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js
@@ -21,6 +21,7 @@
@@ -140,7 +140,16 @@ index 2e02bad1a7c89b4c3b5aee1e14c13bb953a64eb6..3ac8d2facb224ae39d2199f2c5ec08b7
event.target.classList.contains("tab-icon-overlay") ||
event.target.classList.contains("tab-audio-button")
) {
@@ -594,6 +629,10 @@
@@ -572,7 +607,7 @@
}
} else if (
event.altKey &&
- Services.prefs.getBoolPref("browser.tabs.splitView.enabled", false)
+ true
) {
eventMaySelectTab = false;
} else if (!this.selected && this.multiselected) {
@@ -597,6 +632,10 @@
this.style.MozUserFocus = "";
}
@@ -151,7 +160,7 @@ index 2e02bad1a7c89b4c3b5aee1e14c13bb953a64eb6..3ac8d2facb224ae39d2199f2c5ec08b7
on_click(event) {
if (event.button != 0) {
return;
@@ -617,14 +656,23 @@
@@ -620,14 +659,31 @@
trigger: "alt_click",
});
}
@@ -159,9 +168,17 @@ index 2e02bad1a7c89b4c3b5aee1e14c13bb953a64eb6..3ac8d2facb224ae39d2199f2c5ec08b7
+ !event.target.classList.contains("tab-close-button") &&
+ !event.target.classList.contains("tab-icon-overlay") &&
+ !event.target.classList.contains("tab-audio-button") &&
+ !this.splitView
+ Services.prefs.getBoolPref("zen.splitView.enable-tab-click-split", false)
+ ) {
+ gZenViewSplitter.contextSplitTabs(this);
+ if (!this.splitView) {
+ gZenViewSplitter.contextSplitTabs(this);
+ } else {
+ gBrowser.selectedTab = this;
+ gZenViewSplitter.removeTabFromGroup(this, undefined, {
+ forUnsplit: true,
+ changeTab: false
+ });
+ }
+ }
return;
}
@@ -176,7 +193,7 @@ index 2e02bad1a7c89b4c3b5aee1e14c13bb953a64eb6..3ac8d2facb224ae39d2199f2c5ec08b7
gBrowser.multiSelectedTabsCount > 0 &&
!event.target.classList.contains("tab-close-button") &&
!event.target.classList.contains("tab-icon-overlay") &&
@@ -636,8 +684,9 @@
@@ -639,8 +695,9 @@
}
if (
@@ -188,7 +205,7 @@ index 2e02bad1a7c89b4c3b5aee1e14c13bb953a64eb6..3ac8d2facb224ae39d2199f2c5ec08b7
) {
if (this.activeMediaBlocked) {
if (this.multiselected) {
@@ -655,7 +704,7 @@
@@ -658,7 +715,7 @@
return;
}
@@ -197,7 +214,7 @@ index 2e02bad1a7c89b4c3b5aee1e14c13bb953a64eb6..3ac8d2facb224ae39d2199f2c5ec08b7
if (this.multiselected) {
gBrowser.removeMultiSelectedTabs(
lazy.TabMetrics.userTriggeredContext(
@@ -675,6 +724,14 @@
@@ -678,6 +735,14 @@
// (see tabbrowser-tabs 'click' handler).
gBrowser.tabContainer._blockDblClick = true;
}
@@ -212,7 +229,7 @@ index 2e02bad1a7c89b4c3b5aee1e14c13bb953a64eb6..3ac8d2facb224ae39d2199f2c5ec08b7
}
on_dblclick(event) {
@@ -698,6 +755,8 @@
@@ -701,6 +766,8 @@
animate: true,
triggeringEvent: event,
});

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff606d98f1e 100644
index 43fb79a3060e20f671ae6ffc26350c7abf497702..146b1559b8430773bd4ec173a8f4fe88f4eec282 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -413,6 +413,7 @@
@@ -502,6 +502,7 @@
* @type {MozBrowser[]}
*/
get splitViewBrowsers() {
@@ -10,7 +10,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
const browsers = [];
if (this.#activeSplitView) {
for (const tab of this.#activeSplitView.tabs) {
@@ -486,15 +487,66 @@
@@ -575,15 +576,66 @@
return this.tabContainer.visibleTabs;
}
@@ -79,7 +79,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
set selectedTab(val) {
if (
gSharedTabWarning.willShowSharedTabWarning(val) ||
@@ -570,6 +622,10 @@
@@ -659,6 +711,10 @@
userContextId = parseInt(tabArgument.getAttribute("usercontextid"), 10);
}
@@ -90,7 +90,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (tabArgument && tabArgument.linkedBrowser) {
remoteType = tabArgument.linkedBrowser.remoteType;
initialBrowsingContextGroupId =
@@ -662,6 +718,8 @@
@@ -751,6 +807,8 @@
this.tabpanels.appendChild(panel);
let tab = this.tabs[0];
@@ -99,7 +99,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
tab.linkedPanel = uniqueId;
this._selectedTab = tab;
this._selectedBrowser = browser;
@@ -1032,13 +1090,18 @@
@@ -1121,13 +1179,18 @@
}
this.showTab(aTab);
@@ -119,7 +119,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
aTab.setAttribute("pinned", "true");
this._updateTabBarForPinnedTabs();
@@ -1051,11 +1114,19 @@
@@ -1140,11 +1203,19 @@
}
this.#handleTabMove(aTab, () => {
@@ -140,7 +140,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
});
aTab.style.marginInlineStart = "";
@@ -1232,6 +1303,9 @@
@@ -1321,6 +1392,9 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
@@ -150,7 +150,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (
aIconURL &&
!LOCAL_PROTOCOLS.some(protocol => aIconURL.startsWith(protocol))
@@ -1241,6 +1315,9 @@
@@ -1330,6 +1404,9 @@
);
return;
}
@@ -160,7 +160,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL;
@@ -1563,7 +1640,6 @@
@@ -1652,7 +1729,6 @@
// Preview mode should not reset the owner
if (!this._previewMode && !oldTab.selected) {
@@ -168,7 +168,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
let lastRelatedTab = this._lastRelatedTabMap.get(oldTab);
@@ -1654,6 +1730,7 @@
@@ -1743,6 +1819,7 @@
if (!this._previewMode) {
newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed();
@@ -176,7 +176,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -1868,6 +1945,9 @@
@@ -1957,6 +2034,9 @@
}
let activeEl = document.activeElement;
@@ -186,7 +186,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// If focus is on the old tab, move it to the new tab.
if (activeEl == oldTab) {
newTab.focus();
@@ -1906,7 +1986,7 @@
@@ -1995,7 +2075,7 @@
// Focus the location bar if it was previously focused for that tab.
// In full screen mode, only bother making the location bar visible
// if the tab is a blank one.
@@ -195,7 +195,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
let selectURL = () => {
if (this._asyncTabSwitching) {
// Set _awaitingSetURI flag to suppress popup notification
@@ -2194,7 +2274,12 @@
@@ -2283,7 +2363,12 @@
return this._setTabLabel(aTab, aLabel);
}
@@ -206,10 +206,10 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
+ }
+ aLabel = (typeof aTab.zenStaticLabel === "string" && aTab.zenStaticLabel) ? aTab.zenStaticLabel : aLabel;
+ gZenPinnedTabManager.onTabLabelChanged(aTab);
if (!aLabel || aLabel.includes("about:reader?")) {
if (!aLabel || (isURL && /^about:reader\?url=/.test(aLabel))) {
return false;
}
@@ -2319,7 +2404,7 @@
@@ -2408,7 +2493,7 @@
newIndex = this.selectedTab._tPos + 1;
}
@@ -218,7 +218,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (this.isTabGroupLabel(targetTab)) {
throw new Error(
"Replacing a tab group label with a tab is not supported"
@@ -2599,6 +2684,7 @@
@@ -2685,6 +2770,7 @@
uriIsAboutBlank,
userContextId,
skipLoad,
@@ -226,7 +226,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
} = {}) {
let b = document.createXULElement("browser");
// Use the JSM global to create the permanentKey, so that if the
@@ -2672,8 +2758,7 @@
@@ -2758,8 +2844,7 @@
// we use a different attribute name for this?
b.setAttribute("name", name);
}
@@ -236,7 +236,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
b.setAttribute("transparent", "true");
}
@@ -2843,7 +2928,7 @@
@@ -2929,7 +3014,7 @@
let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID();
@@ -245,7 +245,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary.
@@ -2903,8 +2988,8 @@
@@ -2989,8 +3074,8 @@
// If we transitioned from one browser to two browsers, we need to set
// hasSiblings=false on both the existing browser and the new browser.
if (this.tabs.length == 2) {
@@ -256,7 +256,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
} else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
}
@@ -3089,7 +3174,6 @@
@@ -3175,7 +3260,6 @@
this.selectedTab = this.addTrustedTab(BROWSER_NEW_TAB_URL, {
tabIndex: tab._tPos + 1,
userContextId: tab.userContextId,
@@ -264,7 +264,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
focusUrlBar: true,
});
resolve(this.selectedBrowser);
@@ -3199,6 +3283,9 @@
@@ -3285,6 +3369,9 @@
schemelessInput,
hasValidUserGestureActivation = false,
textDirectiveUserActivation = false,
@@ -274,7 +274,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
} = {}
) {
// all callers of addTab that pass a params object need to pass
@@ -3209,10 +3296,17 @@
@@ -3295,10 +3382,17 @@
);
}
@@ -292,7 +292,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// If we're opening a foreground tab, set the owner by default.
ownerTab ??= inBackground ? null : this.selectedTab;
@@ -3220,6 +3314,7 @@
@@ -3306,6 +3400,7 @@
if (this.selectedTab.owner) {
this.selectedTab.owner = null;
}
@@ -300,7 +300,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// Find the tab that opened this one, if any. This is used for
// determining positioning, and inherited attributes such as the
@@ -3272,6 +3367,22 @@
@@ -3358,6 +3453,22 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -323,7 +323,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (insertTab) {
// Insert the tab into the tab container in the correct position.
this.#insertTabAtIndex(t, {
@@ -3280,6 +3391,7 @@
@@ -3366,6 +3477,7 @@
ownerTab,
openerTab,
pinned,
@@ -331,7 +331,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
bulkOrderedOpen,
tabGroup: tabGroup ?? openerTab?.group,
});
@@ -3298,6 +3410,7 @@
@@ -3384,6 +3496,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
@@ -339,7 +339,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}));
if (focusUrlBar) {
@@ -3422,6 +3535,12 @@
@@ -3508,6 +3621,12 @@
}
}
@@ -352,7 +352,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// Additionally send pinned tab events
if (pinned) {
this.#notifyPinnedStatus(t);
@@ -3729,6 +3848,7 @@
@@ -3750,6 +3869,7 @@
isAdoptingGroup = false,
isUserTriggered = false,
telemetryUserCreateSource = "unknown",
@@ -360,7 +360,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
} = {}
) {
if (
@@ -3739,9 +3859,6 @@
@@ -3760,9 +3880,6 @@
!this.isSplitViewWrapper(tabOrSplitView)
)
) {
@@ -370,7 +370,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
if (!color) {
@@ -3762,9 +3879,14 @@
@@ -3783,9 +3900,14 @@
label,
isAdoptingGroup
);
@@ -387,7 +387,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
);
group.addTabs(tabsAndSplitViews);
@@ -3885,7 +4007,7 @@
@@ -3906,7 +4028,7 @@
}
this.#handleTabMove(tab, () =>
@@ -396,7 +396,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
);
}
@@ -3969,6 +4091,7 @@
@@ -3990,6 +4112,7 @@
color: group.color,
insertBefore: newTabs[0],
isAdoptingGroup: true,
@@ -404,7 +404,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
});
}
@@ -4179,6 +4302,7 @@
@@ -4200,6 +4323,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
@@ -412,7 +412,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
) {
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
@@ -4248,6 +4372,7 @@
@@ -4269,6 +4393,7 @@
openWindowInfo,
name,
skipLoad,
@@ -420,7 +420,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
});
}
@@ -4461,9 +4586,9 @@
@@ -4482,9 +4607,9 @@
}
// Add a new tab if needed.
@@ -432,7 +432,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
let url = "about:blank";
if (tabData.entries?.length) {
@@ -4500,8 +4625,10 @@
@@ -4521,8 +4646,10 @@
insertTab: false,
skipLoad: true,
preferredRemoteType,
@@ -444,7 +444,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (select) {
tabToSelect = tab;
}
@@ -4523,7 +4650,8 @@
@@ -4544,7 +4671,8 @@
this.pinTab(tab);
// Then ensure all the tab open/pinning information is sent.
this._fireTabOpen(tab, {});
@@ -454,7 +454,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
let { groupId } = tabData;
const tabGroup = tabGroupWorkingData.get(groupId);
// if a tab refers to a tab group we don't know, skip any group
@@ -4543,7 +4671,10 @@
@@ -4564,7 +4692,10 @@
tabGroup.stateData.id,
tabGroup.stateData.color,
tabGroup.stateData.collapsed,
@@ -466,7 +466,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
);
tabsFragment.appendChild(tabGroup.node);
}
@@ -4598,9 +4729,23 @@
@@ -4619,9 +4750,21 @@
// to remove the old selected tab.
if (tabToSelect) {
let leftoverTab = this.selectedTab;
@@ -482,15 +482,13 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
+ gZenWorkspaces._initialTab._shouldRemove = true;
+ }
+ }
+ } else {
+ gZenWorkspaces._keepSelectedTab = !window.__isNewZenWindow;
}
+ delete window.__isNewZenWindow;
+ this._hasAlreadyInitializedZenSessionStore = true;
if (tabs.length > 1 || !tabs[0].selected) {
this._updateTabsAfterInsert();
@@ -4791,11 +4936,14 @@
@@ -4812,11 +4955,14 @@
if (ownerTab) {
tab.owner = ownerTab;
}
@@ -506,7 +504,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (
!bulkOrderedOpen &&
((openerTab &&
@@ -4807,7 +4955,7 @@
@@ -4828,7 +4974,7 @@
let lastRelatedTab =
openerTab && this._lastRelatedTabMap.get(openerTab);
let previousTab = lastRelatedTab || openerTab || this.selectedTab;
@@ -515,7 +513,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
tabGroup = previousTab.group;
}
if (
@@ -4823,7 +4971,7 @@
@@ -4844,7 +4990,7 @@
previousTab.splitview
) + 1;
} else if (previousTab.visible) {
@@ -524,7 +522,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
} else if (previousTab == FirefoxViewHandler.tab) {
elementIndex = 0;
}
@@ -4851,14 +4999,14 @@
@@ -4872,14 +5018,14 @@
}
// Ensure index is within bounds.
if (tab.pinned) {
@@ -543,7 +541,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (pinned && !itemAfter?.pinned) {
itemAfter = null;
@@ -4875,7 +5023,7 @@
@@ -4896,7 +5042,7 @@
this.tabContainer._invalidateCachedTabs();
@@ -552,7 +550,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (
(this.isTab(itemAfter) && itemAfter.group == tabGroup) ||
this.isSplitViewWrapper(itemAfter)
@@ -4906,7 +5054,11 @@
@@ -4927,7 +5073,11 @@
const tabContainer = pinned
? this.tabContainer.pinnedTabsContainer
: this.tabContainer;
@@ -564,7 +562,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
if (tab.group?.collapsed) {
@@ -4921,6 +5073,7 @@
@@ -4942,6 +5092,7 @@
if (pinned) {
this._updateTabBarForPinnedTabs();
}
@@ -572,7 +570,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
TabBarVisibility.update();
}
@@ -5469,6 +5622,7 @@
@@ -5490,6 +5641,7 @@
telemetrySource,
} = {}
) {
@@ -580,7 +578,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs
// can be considered equivalent to closing the window.
if (
@@ -5558,6 +5712,7 @@
@@ -5579,6 +5731,7 @@
if (lastToClose) {
this.removeTab(lastToClose, aParams);
}
@@ -588,7 +586,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
} catch (e) {
console.error(e);
}
@@ -5603,6 +5758,14 @@
@@ -5624,6 +5777,14 @@
return;
}
@@ -603,7 +601,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
let isVisibleTab = aTab.visible;
// We have to sample the tab width now, since _beginRemoveTab might
// end up modifying the DOM in such a way that aTab gets a new
@@ -5610,6 +5773,9 @@
@@ -5631,6 +5792,9 @@
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
let isLastTab = this.#isLastTabInWindow(aTab);
@@ -613,7 +611,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -5621,13 +5787,14 @@
@@ -5642,13 +5806,14 @@
telemetrySource,
})
) {
@@ -629,7 +627,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
let lockTabSizing =
!this.tabContainer.verticalMode &&
!aTab.pinned &&
@@ -5658,7 +5825,13 @@
@@ -5679,7 +5844,13 @@
// We're not animating, so we can cancel the animation stopwatch.
Glean.browserTabclose.timeAnim.cancel(aTab._closeTimeAnimTimerId);
aTab._closeTimeAnimTimerId = null;
@@ -644,7 +642,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
return;
}
@@ -5792,7 +5965,7 @@
@@ -5813,7 +5984,7 @@
closeWindowWithLastTab != null
? closeWindowWithLastTab
: !window.toolbar.visible ||
@@ -653,7 +651,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -5816,6 +5989,7 @@
@@ -5837,6 +6008,7 @@
newTab = true;
}
@@ -661,7 +659,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -5856,13 +6030,7 @@
@@ -5877,13 +6049,7 @@
aTab._mouseleave();
if (newTab) {
@@ -676,7 +674,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
} else {
TabBarVisibility.update();
}
@@ -5995,6 +6163,7 @@
@@ -6016,6 +6182,7 @@
this.tabs[i]._tPos = i;
}
@@ -684,7 +682,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (!this._windowIsClosing) {
// update tab close buttons state
this.tabContainer._updateCloseButtons();
@@ -6180,6 +6349,7 @@
@@ -6201,6 +6368,7 @@
memory_after: await getTotalMemoryUsage(),
time_to_unload_in_ms: timeElapsed,
});
@@ -692,7 +690,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
/**
@@ -6225,6 +6395,7 @@
@@ -6246,6 +6414,7 @@
}
let excludeTabs = new Set(aExcludeTabs);
@@ -700,7 +698,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// If this tab has a successor, it should be selectable, since
// hiding or closing a tab removes that tab as a successor.
@@ -6237,15 +6408,22 @@
@@ -6258,15 +6427,22 @@
!excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) {
@@ -725,7 +723,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
let tab = this.tabContainer.findNextTab(aTab, {
direction: 1,
filter: _tab => remainingTabs.includes(_tab),
@@ -6259,7 +6437,7 @@
@@ -6280,7 +6456,7 @@
}
if (tab) {
@@ -734,7 +732,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
// If no qualifying visible tab was found, see if there is a tab in
@@ -6280,7 +6458,7 @@
@@ -6301,7 +6477,7 @@
});
}
@@ -743,7 +741,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
_blurTab(aTab) {
@@ -6291,7 +6469,7 @@
@@ -6312,7 +6488,7 @@
* @returns {boolean}
* False if swapping isn't permitted, true otherwise.
*/
@@ -752,7 +750,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// Do not allow transfering a private tab to a non-private window
// and vice versa.
if (
@@ -6345,6 +6523,7 @@
@@ -6366,6 +6542,7 @@
// fire the beforeunload event in the process. Close the other
// window if this was its last tab.
if (
@@ -760,7 +758,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
!remoteBrowser._beginRemoveTab(aOtherTab, {
adoptedByTab: aOurTab,
closeWindowWithLastTab: true,
@@ -6356,7 +6535,7 @@
@@ -6377,7 +6554,7 @@
// If this is the last tab of the window, hide the window
// immediately without animation before the docshell swap, to avoid
// about:blank being painted.
@@ -769,7 +767,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (closeWindow) {
let win = aOtherTab.ownerGlobal;
win.windowUtils.suppressAnimation(true);
@@ -6484,11 +6663,13 @@
@@ -6511,11 +6688,13 @@
}
// Finish tearing down the tab that's going away.
@@ -783,7 +781,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
this.setTabTitle(aOurTab);
@@ -6690,10 +6871,10 @@
@@ -6717,10 +6896,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -796,7 +794,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -6753,7 +6934,8 @@
@@ -6780,7 +6959,8 @@
* @param {object} [aOptions={}]
* Key-value pairs that will be serialized into the features string.
*/
@@ -806,7 +804,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
if (this.tabs.length == 1) {
return null;
}
@@ -6770,7 +6952,7 @@
@@ -6797,7 +6977,7 @@
// tell a new window to take the "dropped" tab
let args = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
args.appendElement(aTab.splitview ?? aTab);
@@ -815,7 +813,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
private: PrivateBrowsingUtils.isWindowPrivate(window),
features: Object.entries(aOptions)
.map(([key, value]) => `${key}=${value}`)
@@ -6778,6 +6960,8 @@
@@ -6805,6 +6985,8 @@
openerWindow: window,
args,
});
@@ -824,7 +822,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
/**
@@ -6890,7 +7074,7 @@
@@ -6917,7 +7099,7 @@
* `true` if element is a `<tab-group>`
*/
isTabGroup(element) {
@@ -833,7 +831,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
/**
@@ -6975,8 +7159,8 @@
@@ -7002,8 +7184,8 @@
}
// Don't allow mixing pinned and unpinned tabs.
@@ -844,7 +842,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
} else {
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
}
@@ -7005,13 +7189,19 @@
@@ -7049,8 +7231,8 @@
this.#handleTabMove(
element,
() => {
@@ -855,7 +853,9 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
neighbor = neighbor.group;
}
if (neighbor?.splitview) {
neighbor = neighbor.splitview;
@@ -7061,6 +7243,12 @@
return;
}
}
+ if (element.group?.hasAttribute("split-view-group")) {
+ element = element.group;
@@ -863,10 +863,10 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
+ if (element.group?.hasAttribute("split-view-group") && neighbor == element.group) {
+ return;
+ }
let useAfter = false;
if (this.isTab(element)) {
useAfter = neighbor && tabIndex > element._tPos;
@@ -7076,23 +7266,31 @@
if (movingForwards && neighbor) {
neighbor.after(element);
@@ -7119,23 +7307,31 @@
#moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) {
if (this.isTabGroupLabel(targetElement)) {
targetElement = targetElement.group;
@@ -904,7 +904,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
} else if (!element.pinned && targetElement && targetElement.pinned) {
// If the caller asks to move an unpinned element next to a pinned
// tab, move the unpinned element to be the first unpinned element
@@ -7105,12 +7303,35 @@
@@ -7148,12 +7344,35 @@
// move the tab group right before the first unpinned tab.
// 4. Moving a tab group and the first unpinned tab is grouped:
// move the tab group right before the first unpinned tab's tab group.
@@ -941,7 +941,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// We want to include the splitview wrapper if it's the targetElement, but
// not in the case where we want to reverse tabs within the same splitview.
@@ -7119,6 +7340,7 @@
@@ -7162,6 +7381,7 @@
}
let getContainer = () =>
@@ -949,7 +949,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
element.pinned
? this.tabContainer.pinnedTabsContainer
: this.tabContainer;
@@ -7127,11 +7349,15 @@
@@ -7170,11 +7390,15 @@
element,
() => {
if (moveBefore) {
@@ -966,7 +966,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
},
metricsContext
@@ -7205,11 +7431,15 @@
@@ -7248,11 +7472,15 @@
* @param {TabMetricsContext} [metricsContext]
*/
moveTabToExistingGroup(aTab, aGroup, metricsContext) {
@@ -985,7 +985,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
if (aTab.group && aTab.group.id === aGroup.id) {
return;
@@ -7281,6 +7511,7 @@
@@ -7324,6 +7552,7 @@
let state = {
tabIndex: tab._tPos,
@@ -993,7 +993,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
};
if (tab.visible) {
state.elementIndex = tab.elementIndex;
@@ -7312,7 +7543,7 @@
@@ -7355,7 +7584,7 @@
let changedSplitView =
previousTabState.splitViewId != currentTabState.splitViewId;
@@ -1002,7 +1002,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
tab.dispatchEvent(
new CustomEvent("TabMove", {
bubbles: true,
@@ -7354,6 +7585,10 @@
@@ -7402,6 +7631,10 @@
moveActionCallback();
@@ -1013,7 +1013,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// Clear tabs cache after moving nodes because the order of tabs may have
// changed.
this.tabContainer._invalidateCachedTabs();
@@ -7404,7 +7639,22 @@
@@ -7452,7 +7685,22 @@
* @returns {object}
* The new tab in the current window, null if the tab couldn't be adopted.
*/
@@ -1037,7 +1037,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
// Swap the dropped tab with a new one we create and then close
// it in the other window (making it seem to have moved between
// windows). We also ensure that the tab we create to swap into has
@@ -7447,6 +7697,8 @@
@@ -7495,6 +7743,8 @@
}
params.skipLoad = true;
let newTab = this.addWebTab("about:blank", params);
@@ -1046,7 +1046,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
aTab.container.tabDragAndDrop.finishAnimateTabMove();
@@ -8149,7 +8401,7 @@
@@ -8205,7 +8455,7 @@
// preventDefault(). It will still raise the window if appropriate.
return;
}
@@ -1055,7 +1055,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
window.focus();
aEvent.preventDefault();
}
@@ -8166,7 +8418,6 @@
@@ -8222,7 +8472,6 @@
on_TabGroupCollapse(aEvent) {
aEvent.target.tabs.forEach(tab => {
@@ -1063,7 +1063,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
});
}
@@ -8500,7 +8751,9 @@
@@ -8556,7 +8805,9 @@
let filter = this._tabFilters.get(tab);
if (filter) {
@@ -1073,7 +1073,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
let listener = this._tabListeners.get(tab);
if (listener) {
@@ -9306,6 +9559,7 @@
@@ -9359,6 +9610,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
@@ -1081,7 +1081,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
}
@@ -9386,6 +9640,7 @@
@@ -9439,6 +9691,7 @@
// known defaults. Note we use the original URL since about:newtab
// redirects to a prerendered page.
const shouldRemoveFavicon =
@@ -1089,7 +1089,7 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
!this.mBrowser.mIconURL &&
!ignoreBlank &&
!(originalLocation.spec in FAVICON_DEFAULTS);
@@ -9560,13 +9815,6 @@
@@ -9613,13 +9866,6 @@
this.mBrowser.originalURI = aRequest.originalURI;
}
@@ -1103,11 +1103,12 @@ index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..d16fe62c8a67913dd1499b2665a22ff6
}
let userContextId = this.mBrowser.getAttribute("usercontextid") || 0;
@@ -10450,7 +10698,7 @@ var TabContextMenu = {
@@ -10507,7 +10753,8 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !this.multiselected;
-
+ gZenViewSplitter.updateContextMenuItems();
+ gZenPinnedTabManager.updatePinnedTabContextMenu(this.contextTab);
// Build Ask Chat items
TabContextMenu.GenAI.buildTabMenu(

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js
index 65c89aab0902cb33ad33fc523d3e0b954618778e..b42298457fdd2f8df6ff202c804122ffc999d409 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 65c89aab0902cb33ad33fc523d3e0b954618778e..b42298457fdd2f8df6ff202c804122ff
});
}
@@ -478,13 +511,65 @@
@@ -478,13 +511,68 @@
* @returns {MozTabbrowserTab[]}
*/
get tabs() {
@@ -162,8 +162,9 @@ index 65c89aab0902cb33ad33fc523d3e0b954618778e..b42298457fdd2f8df6ff202c804122ff
+ 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 65c89aab0902cb33ad33fc523d3e0b954618778e..b42298457fdd2f8df6ff202c804122ff
+ result.push(labelContainer);
+ }
+ result.push(...item.childGroupsAndTabs);
}
}
- return childrenArray.filter(node => node.matches("tab"));
+ }
+ }
+ return result;
+ }
+
@@ -210,6 +210,9 @@ index 65c89aab0902cb33ad33fc523d3e0b954618778e..b42298457fdd2f8df6ff202c804122ff
+ return false;
+ }
+ }
+ if (this.pinned && gZenWorkspaces.activeWorkspaceElement?.hasCollapsedPinnedTabs) {
+ return false;
+ }
+ return true;
+ }
+
@@ -218,7 +221,7 @@ index 65c89aab0902cb33ad33fc523d3e0b954618778e..b42298457fdd2f8df6ff202c804122ff
}
/**
@@ -592,7 +677,6 @@
@@ -592,7 +680,6 @@
);
} else {
if (tabOrSplitView.pinned) {
@@ -226,7 +229,7 @@ index 65c89aab0902cb33ad33fc523d3e0b954618778e..b42298457fdd2f8df6ff202c804122ff
}
let tabToMove =
this.ownerGlobal === tabOrSplitView.ownerGlobal
@@ -661,7 +745,7 @@
@@ -661,7 +748,7 @@
*/
on_click(event) {
let isToggleElement =
@@ -235,7 +238,7 @@ index 65c89aab0902cb33ad33fc523d3e0b954618778e..b42298457fdd2f8df6ff202c804122ff
event.target === this.#overflowCountLabel;
if (isToggleElement && event.button === 0) {
event.preventDefault();
@@ -740,5 +824,6 @@
@@ -740,5 +827,6 @@
}
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarController.sys.mjs b/browser/components/urlbar/UrlbarController.sys.mjs
index da0a9c73118886d535d574810de8141cb96e54ba..104062e2c0142bd08a4498e7ca282fc46cda09be 100644
index bb0189fbfc91b3fc3b399b077a35f7b60a3f985f..c4dd60c6fb6d7eb2288a033708836f9983530e2c 100644
--- a/browser/components/urlbar/UrlbarController.sys.mjs
+++ b/browser/components/urlbar/UrlbarController.sys.mjs
@@ -304,7 +304,6 @@ export class UrlbarController {
@@ -305,7 +305,6 @@ export class UrlbarController {
const isMac = AppConstants.platform == "macosx";
// Handle readline/emacs-style navigation bindings on Mac.
if (
@@ -10,7 +10,7 @@ index da0a9c73118886d535d574810de8141cb96e54ba..104062e2c0142bd08a4498e7ca282fc4
this.view.isOpen &&
event.ctrlKey &&
(event.key == "n" || event.key == "p")
@@ -455,6 +454,8 @@ export class UrlbarController {
@@ -456,6 +455,8 @@ export class UrlbarController {
});
}
event.preventDefault();

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
index 136c66310f37bda3229b82eef32a4a22a716a0b0..4ca15850002cefda0484179839280e58eaf42cfa 100644
index 16041c10755adced9d665539796737a9f55712de..2232bdcc02e20dbb384ca0529a8bd8ce73dc6284 100644
--- a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
+++ b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
@@ -837,11 +837,16 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
@@ -19,7 +19,7 @@ index 136c66310f37bda3229b82eef32a4a22a716a0b0..4ca15850002cefda0484179839280e58
// Discard the result if a tab-to-search result was added already.
if (!state.canAddTabToSearch) {
return false;
@@ -1490,7 +1495,9 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
@@ -1491,7 +1496,9 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
usedLimits.maxResultCount++;
}

View File

@@ -1,12 +1,21 @@
diff --git a/browser/components/urlbar/UrlbarPrefs.sys.mjs b/browser/components/urlbar/UrlbarPrefs.sys.mjs
index 2d21248256c6c2bfb8dac958133c10e3251ef564..6645211ef09518b41cb737e3186fbd0162ecf700 100644
index 2d21248256c6c2bfb8dac958133c10e3251ef564..f788bd10ec2c08e4b27b77cd3bb0489fb04e8b7a 100644
--- a/browser/components/urlbar/UrlbarPrefs.sys.mjs
+++ b/browser/components/urlbar/UrlbarPrefs.sys.mjs
@@ -799,6 +799,7 @@ function makeDefaultResultGroups({ showSearchSuggestionsFirst }) {
@@ -462,6 +462,7 @@ const PREF_URLBAR_DEFAULTS = /** @type {PreferenceDefinition[]} */ ([
["shortcuts.tabs", true],
["shortcuts.history", true],
["shortcuts.actions", true],
+ ["shortcuts.workspaces", true],
// Boolean to determine if the providers defined in `exposureResults`
// should be displayed in search results. This can be set by a
@@ -799,6 +800,8 @@ function makeDefaultResultGroups({ showSearchSuggestionsFirst }) {
*/
let rootGroup = {
children: [
+ { children: [{ group: lazy.UrlbarUtils.RESULT_GROUP.ZEN_ACTION }] },
+ { children: [{ group: lazy.UrlbarUtils.RESULT_GROUP.ZEN_WORKSPACE }] },
// heuristic
{
maxResultCount: 1,

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
index 08455d8d5da233639ccebc0e77c0810fb4f674c3..78d0e875978b568b79646489c28b125a44ea79fa 100644
index d9048a3b8b1f18745c01e40e12f529db3cfaa79e..1ba124a710fcf734ea11f7ccfd4f2f6ebe53e7d2 100644
--- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
+++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
@@ -913,6 +913,7 @@ export class Query {
@@ -10,3 +10,26 @@ index 08455d8d5da233639ccebc0e77c0810fb4f674c3..78d0e875978b568b79646489c28b125a
(!this.context.trimmedSearchString ||
(!this.context.searchMode.engineName && !result.autofill))
) {
@@ -1043,6 +1044,7 @@ function updateSourcesIfEmpty(context) {
lazy.UrlbarTokenizer.TYPE.RESTRICT_TITLE,
lazy.UrlbarTokenizer.TYPE.RESTRICT_URL,
lazy.UrlbarTokenizer.TYPE.RESTRICT_ACTION,
+ lazy.UrlbarTokenizer.TYPE.RESTRICT_WORKSPACE,
].includes(t.type)
);
@@ -1100,6 +1102,14 @@ function updateSourcesIfEmpty(context) {
acceptedSources.push(source);
}
break;
+ case lazy.UrlbarUtils.RESULT_SOURCE.WORKSPACES:
+ if (
+ restrictTokenType === lazy.UrlbarTokenizer.TYPE.RESTRICT_WORKSPACE ||
+ !restrictTokenType
+ ) {
+ acceptedSources.push(source);
+ }
+ break;
case lazy.UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL:
case lazy.UrlbarUtils.RESULT_SOURCE.ADDON:
default:

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarResult.sys.mjs b/browser/components/urlbar/UrlbarResult.sys.mjs
index 65b8fb67b51c8959fe1d47b98efbb2bca591eafc..c52c50a87b37ca1c885c55b36e5beccc8dd7c5fb 100644
index 21f7938f76375e7230f9509e4932cafa4d0e57f2..ab96b160b6c65da3bf267d9fe2f1f35c7507466e 100644
--- a/browser/components/urlbar/UrlbarResult.sys.mjs
+++ b/browser/components/urlbar/UrlbarResult.sys.mjs
@@ -181,6 +181,10 @@ export class UrlbarResult {

View File

@@ -0,0 +1,28 @@
diff --git a/browser/components/urlbar/UrlbarTokenizer.sys.mjs b/browser/components/urlbar/UrlbarTokenizer.sys.mjs
index d4af0ee5138a69139b94d898fb07e2345172f025..f750aae3f9f0a849ca009784510575b2b7119e6d 100644
--- a/browser/components/urlbar/UrlbarTokenizer.sys.mjs
+++ b/browser/components/urlbar/UrlbarTokenizer.sys.mjs
@@ -66,6 +66,7 @@ export var UrlbarTokenizer = {
// `looksLikeOrigin()` returned `LOOKS_LIKE_ORIGIN.OTHER` for this token. It
// may or may not be an origin.
POSSIBLE_ORIGIN_BUT_SEARCH_ALLOWED: 12,
+ RESTRICT_WORKSPACE: 13,
}),
// The special characters below can be typed into the urlbar to restrict
@@ -83,6 +84,7 @@ export var UrlbarTokenizer = {
TITLE: "#",
URL: "$",
ACTION: ">",
+ WORKSPACE: "`",
}),
// The keys of characters in RESTRICT that will enter search mode.
@@ -97,6 +99,7 @@ export var UrlbarTokenizer = {
if (lazy.UrlbarPrefs.get("scotchBonnet.enableOverride")) {
keys.push(this.RESTRICT.ACTION);
}
+ keys.push(this.RESTRICT.WORKSPACE);
return new Set(keys);
},

View File

@@ -1,29 +1,50 @@
diff --git a/browser/components/urlbar/UrlbarUtils.sys.mjs b/browser/components/urlbar/UrlbarUtils.sys.mjs
index 64afd613f454edd7786fcc1e2f307a582e4d5f51..b4af9cc2fbddba2c5229e8ffee7b9c0c06c3e1d0 100644
index 62367c5a77614e5973791abacd068b39e0f3ab34..c930943b5bfa8a2e6dee43f0ec7a10274a7c7638 100644
--- a/browser/components/urlbar/UrlbarUtils.sys.mjs
+++ b/browser/components/urlbar/UrlbarUtils.sys.mjs
@@ -85,6 +85,7 @@ export var UrlbarUtils = {
@@ -109,6 +109,8 @@ export var UrlbarUtils = {
RESTRICT_SEARCH_KEYWORD: "restrictSearchKeyword",
SUGGESTED_INDEX: "suggestedIndex",
TAIL_SUGGESTION: "tailSuggestion",
+ ZEN_ACTION: "zenAction",
+ ZEN_WORKSPACE: "zenWorkspace",
}),
// Defines provider types.
@@ -146,6 +147,7 @@ export var UrlbarUtils = {
@@ -170,6 +172,8 @@ export var UrlbarUtils = {
OTHER_NETWORK: 6,
ADDON: 7,
ACTIONS: 8,
+ ZEN_ACTIONS: 9,
+ WORKSPACES: 10,
}),
// Per-result exposure telemetry.
@@ -587,6 +589,8 @@ export var UrlbarUtils = {
@@ -319,6 +323,14 @@ export var UrlbarUtils = {
telemetryLabel: "actions",
uiLabel: "urlbar-searchmode-actions2",
},
+ {
+ source: this.RESULT_SOURCE.WORKSPACES,
+ restrict: lazy.UrlbarTokenizer.RESTRICT.WORKSPACE,
+ icon: "chrome://browser/skin/zen-icons/selectable/layers.svg",
+ pref: "shortcuts.workspaces",
+ telemetryLabel: "workspaces",
+ uiLabel: "urlbar-search-mode-workspaces",
+ },
]);
},
@@ -611,6 +623,12 @@ export var UrlbarUtils = {
return this.RESULT_GROUP.HEURISTIC_FALLBACK;
case "UrlbarProviderHistoryUrlHeuristic":
return this.RESULT_GROUP.HEURISTIC_HISTORY_URL;
+ case "ZenUrlbarProviderGlobalActions":
+ return this.RESULT_GROUP.ZEN_ACTION;
+ if (result.source == this.RESULT_SOURCE.WORKSPACES) {
+ return this.RESULT_GROUP.ZEN_WORKSPACE;
+ } else {
+ return this.RESULT_GROUP.ZEN_ACTION;
+ }
case "UrlbarProviderOmnibox":
return this.RESULT_GROUP.HEURISTIC_OMNIBOX;
case "UrlbarProviderRestrictKeywordsAutofill":

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
index f28d277764158566bc9406ce0e6160d92d346a63..82dd5f8568ec1b12e87676e5c2b243824628b5af 100644
index 344a9a5b969e679040a650dad311c7413f52bbbd..24111cef5e476253f4e69c4d99f6f220bfd8cd7e 100644
--- a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
+++ b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
@@ -77,7 +77,7 @@ export class UrlbarValueFormatter {
@@ -11,7 +11,26 @@ index f28d277764158566bc9406ce0e6160d92d346a63..82dd5f8568ec1b12e87676e5c2b24382
});
}
@@ -371,7 +371,7 @@ export class UrlbarValueFormatter {
@@ -105,6 +105,18 @@ export class UrlbarValueFormatter {
}
#ensureFormattedHostVisible(urlMetaData) {
+ // Make sure the domain is visible even with long subdomains when the single sidebar is being used
+ if (
+ this.#window.gZenVerticalTabsManager?._hasSetSingleToolbar
+ && Services.prefs.getBoolPref("zen.urlbar.show-domain-only-in-sidebar")
+ ) {
+ // also compare the difference in width from this and the urlbar input, to avoid scrolling
+ // when urlbar buttons are showing.
+ const urlbarInputWidth = this.#window.windowUtils.getBoundsWithoutFlushing(this.#window.gURLBar).width;
+ const inputFieldWidth = this.#window.windowUtils.getBoundsWithoutFlushing(this.#inputField).width;
+ this.#inputField.scrollLeft = (this.#inputField.scrollLeftMax - (urlbarInputWidth - inputFieldWidth) );
+ return;
+ }
// Make sure the host is always visible. Since it is aligned on
// the first strong directional character, we set scrollLeft
// appropriately to ensure the domain stays visible in case of an
@@ -371,7 +383,7 @@ export class UrlbarValueFormatter {
* @returns {boolean}
* True if formatting was applied and false if not.
*/
@@ -20,7 +39,7 @@ index f28d277764158566bc9406ce0e6160d92d346a63..82dd5f8568ec1b12e87676e5c2b24382
let urlMetaData = this.#getUrlMetaData();
if (!urlMetaData) {
return false;
@@ -640,6 +640,7 @@ export class UrlbarValueFormatter {
@@ -640,6 +652,7 @@ export class UrlbarValueFormatter {
this.#window.requestAnimationFrame(() => {
if (instance == this.#resizeInstance) {
this.#ensureFormattedHostVisible();

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
index b665adb1a1ce8bbae8df4cbea6c3248c3e4fb431..7a73907957d38caba5b650749abf80a01b51559d 100644
index b665adb1a1ce8bbae8df4cbea6c3248c3e4fb431..1de7f9461b8ccbd4680b917e6dd5ba3c02f69a94 100644
--- a/browser/components/urlbar/UrlbarView.sys.mjs
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
@@ -640,7 +640,7 @@ export class UrlbarView {
@@ -11,7 +11,18 @@ index b665adb1a1ce8bbae8df4cbea6c3248c3e4fb431..7a73907957d38caba5b650749abf80a0
// Try to reuse the cached top-sites context. If it's not cached, then
// there will be a gap of time between when the input is focused and
// when the view opens that can be perceived as flicker.
@@ -2988,6 +2988,8 @@ export class UrlbarView {
@@ -777,10 +777,6 @@ export class UrlbarView {
}
// If search mode isn't active, close the view.
- if (!this.input.searchMode) {
- this.close();
- return;
- }
// Search mode is active. If the one-offs should be shown, make sure they
// are enabled and show the view.
@@ -2988,6 +2984,8 @@ export class UrlbarView {
if (row?.hasAttribute("row-selectable")) {
row?.toggleAttribute("selected", true);
}
@@ -20,7 +31,7 @@ index b665adb1a1ce8bbae8df4cbea6c3248c3e4fb431..7a73907957d38caba5b650749abf80a0
if (element != row) {
row?.toggleAttribute("descendant-selected", true);
}
@@ -3477,7 +3479,7 @@ export class UrlbarView {
@@ -3477,7 +3475,7 @@ export class UrlbarView {
}
#enableOrDisableRowWrap() {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/content/UrlbarInput.mjs b/browser/components/urlbar/content/UrlbarInput.mjs
index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f5c811a82 100644
index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..e1128b0d7f5accfd48af27f99e3b2e6463b45191 100644
--- a/browser/components/urlbar/content/UrlbarInput.mjs
+++ b/browser/components/urlbar/content/UrlbarInput.mjs
@@ -90,6 +90,13 @@ const lazy = XPCOMUtils.declareLazy({
@@ -98,6 +98,13 @@ const lazy = XPCOMUtils.declareLazy({
logger: () => lazy.UrlbarUtils.getLogger({ prefix: "Input" }),
});
@@ -16,7 +16,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
const UNLIMITED_MAX_RESULTS = 99;
let getBoundsWithoutFlushing = element =>
@@ -708,7 +715,16 @@ export class UrlbarInput extends HTMLElement {
@@ -743,7 +750,16 @@ ${
// See _on_select(). HTMLInputElement.select() dispatches a "select"
// event but does not set the primary selection.
this._suppressPrimaryAdjustment = true;
@@ -33,7 +33,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
this._suppressPrimaryAdjustment = false;
}
@@ -782,6 +798,10 @@ export class UrlbarInput extends HTMLElement {
@@ -817,6 +833,10 @@ ${
hideSearchTerms = false,
isSameDocument = false,
} = {}) {
@@ -44,7 +44,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
if (!this.#isAddressbar) {
throw new Error(
"Cannot set URI for UrlbarInput that is not an address bar"
@@ -1071,8 +1091,16 @@ export class UrlbarInput extends HTMLElement {
@@ -1106,8 +1126,16 @@ ${
return;
}
}
@@ -62,7 +62,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
}
/**
@@ -1496,7 +1524,11 @@ export class UrlbarInput extends HTMLElement {
@@ -1551,7 +1579,11 @@ ${
}
if (!this.#providesSearchMode(result)) {
@@ -75,7 +75,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
}
if (isCanonized) {
@@ -2696,6 +2728,42 @@ export class UrlbarInput extends HTMLElement {
@@ -2858,6 +2890,42 @@ ${
await this.#updateLayoutBreakoutDimensions();
}
@@ -118,7 +118,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
startLayoutExtend() {
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
// Do not expand if the Urlbar does not support being expanded or it is
@@ -2710,6 +2778,13 @@ export class UrlbarInput extends HTMLElement {
@@ -2872,6 +2940,13 @@ ${
this.setAttribute("breakout-extend", "true");
@@ -132,7 +132,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
// Enable the animation only after the first extend call to ensure it
// doesn't run when opening a new window.
if (!this.hasAttribute("breakout-extend-animate")) {
@@ -2729,6 +2804,27 @@ export class UrlbarInput extends HTMLElement {
@@ -2891,6 +2966,27 @@ ${
return;
}
@@ -160,7 +160,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
this.removeAttribute("breakout-extend");
this.#updateTextboxPosition();
}
@@ -2759,7 +2855,7 @@ export class UrlbarInput extends HTMLElement {
@@ -2921,7 +3017,7 @@ ${
forceUnifiedSearchButtonAvailable = false
) {
let prevState = this.getAttribute("pageproxystate");
@@ -169,7 +169,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
this.setAttribute("pageproxystate", state);
this._inputContainer.setAttribute("pageproxystate", state);
this._identityBox?.setAttribute("pageproxystate", state);
@@ -3031,10 +3127,12 @@ export class UrlbarInput extends HTMLElement {
@@ -3198,10 +3294,12 @@ ${
return;
}
this.style.top = px(
@@ -182,7 +182,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
);
}
@@ -3093,9 +3191,10 @@ export class UrlbarInput extends HTMLElement {
@@ -3260,9 +3358,10 @@ ${
return;
}
@@ -194,7 +194,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
);
this.style.setProperty(
"--urlbar-height",
@@ -3597,6 +3696,7 @@ export class UrlbarInput extends HTMLElement {
@@ -3768,6 +3867,7 @@ ${
}
_toggleActionOverride(event) {
@@ -202,7 +202,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
if (
event.keyCode == KeyEvent.DOM_VK_SHIFT ||
event.keyCode == KeyEvent.DOM_VK_ALT ||
@@ -3709,8 +3809,8 @@ export class UrlbarInput extends HTMLElement {
@@ -3880,8 +3980,8 @@ ${
if (!this.#isAddressbar) {
return val;
}
@@ -213,7 +213,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
: val;
// Only trim value if the directionality doesn't change to RTL and we're not
// showing a strikeout https protocol.
@@ -4006,6 +4106,7 @@ export class UrlbarInput extends HTMLElement {
@@ -4180,6 +4280,7 @@ ${
resultDetails = null,
browser = this.window.gBrowser.selectedBrowser
) {
@@ -221,7 +221,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
if (this.#isAddressbar) {
this.#prepareAddressbarLoad(
url,
@@ -4117,6 +4218,10 @@ export class UrlbarInput extends HTMLElement {
@@ -4291,6 +4392,10 @@ ${
}
reuseEmpty = true;
}
@@ -232,7 +232,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
if (
where == "tab" &&
reuseEmpty &&
@@ -4124,6 +4229,9 @@ export class UrlbarInput extends HTMLElement {
@@ -4298,6 +4403,9 @@ ${
) {
where = "current";
}
@@ -242,7 +242,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
return where;
}
@@ -4378,6 +4486,7 @@ export class UrlbarInput extends HTMLElement {
@@ -4552,6 +4660,7 @@ ${
this.setResultForCurrentValue(null);
this.handleCommand();
this.controller.clearLastQueryContextCache();
@@ -250,7 +250,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
this._suppressStartQuery = false;
});
@@ -4385,7 +4494,6 @@ export class UrlbarInput extends HTMLElement {
@@ -4559,7 +4668,6 @@ ${
contextMenu.addEventListener("popupshowing", () => {
// Close the results pane when the input field contextual menu is open,
// because paste and go doesn't want a result selection.
@@ -258,7 +258,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
let controller =
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
@@ -4541,7 +4649,11 @@ export class UrlbarInput extends HTMLElement {
@@ -4715,7 +4823,11 @@ ${
if (!engineName && !source && !this.hasAttribute("searchmode")) {
return;
}
@@ -271,7 +271,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
if (this._searchModeIndicatorTitle) {
this._searchModeIndicatorTitle.textContent = "";
this._searchModeIndicatorTitle.removeAttribute("data-l10n-id");
@@ -4851,6 +4963,7 @@ export class UrlbarInput extends HTMLElement {
@@ -5031,6 +5143,7 @@ ${
this.document.l10n.setAttributes(
this.inputField,
@@ -279,7 +279,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
l10nId,
l10nId == "urlbar-placeholder-with-name"
? { name: engineName }
@@ -4964,6 +5077,11 @@ export class UrlbarInput extends HTMLElement {
@@ -5156,6 +5269,11 @@ ${
}
_on_click(event) {
@@ -291,7 +291,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
switch (event.target) {
case this.inputField:
case this._inputContainer:
@@ -5042,7 +5160,7 @@ export class UrlbarInput extends HTMLElement {
@@ -5242,7 +5360,7 @@ ${
}
}
@@ -300,7 +300,7 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
this.view.autoOpen({ event });
} else {
if (this._untrimOnFocusAfterKeydown) {
@@ -5082,9 +5200,16 @@ export class UrlbarInput extends HTMLElement {
@@ -5282,9 +5400,16 @@ ${
}
_on_mousedown(event) {
@@ -318,27 +318,27 @@ index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f
if (
event.composedTarget != this.inputField &&
event.composedTarget != this._inputContainer
@@ -5094,6 +5219,10 @@ export class UrlbarInput extends HTMLElement {
@@ -5294,6 +5419,10 @@ ${
this.focusedViaMousedown = !this.focused;
this._preventClickSelectsAll = this.focused;
this.#preventClickSelectsAll = this.focused;
+ if (isProbablyFloating) {
+ this.focusedViaMousedown = !this.hasAttribute("breakout-extend");
+ this._preventClickSelectsAll = this.hasAttribute("breakout-extend");
+ this.#preventClickSelectsAll = this.hasAttribute("breakout-extend");
+ }
// Keep the focus status, since the attribute may be changed
// upon calling this.focus().
@@ -5129,7 +5258,7 @@ export class UrlbarInput extends HTMLElement {
@@ -5329,7 +5458,7 @@ ${
}
// Don't close the view when clicking on a tab; we may want to keep the
// view open on tab switch, and the TabSelect event arrived earlier.
- if (event.target.closest("tab")) {
+ if (event.target.closest("tab") || event.target.closest("#tabs-newtab-button")) {
- if (event.target.closest?.("tab")) {
+ if (event.target.closest?.("tab") || event.target.closest?.("#tabs-newtab-button")) {
break;
}
@@ -5411,7 +5540,7 @@ export class UrlbarInput extends HTMLElement {
@@ -5636,7 +5765,7 @@ ${
// When we are in actions search mode we can show more results so
// increase the limit.
let maxResults =

View File

@@ -0,0 +1,14 @@
diff --git a/browser/components/urlbar/content/enUS-searchFeatures.ftl b/browser/components/urlbar/content/enUS-searchFeatures.ftl
index e405f0f8844eea7081e4302cc35ccd8d8124aa90..90baec46971c6bd3ec738a338834af0351872d14 100644
--- a/browser/components/urlbar/content/enUS-searchFeatures.ftl
+++ b/browser/components/urlbar/content/enUS-searchFeatures.ftl
@@ -2,6 +2,9 @@
# 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/.
+urlbar-search-mode-workspaces = Spaces
+urlbar-search-mode-workspaces-en = Spaces
+
### These strings are related to the Firefox Suggest feature. Firefox Suggest
### shows recommended and sponsored third-party results in the address bar
### panel. It also shows headings/labels above different groups of results. For

View File

@@ -1,8 +1,8 @@
diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
index daf4e1dca839a6e882edf598bd82f13f1bf4eadd..ebb584e058c0a15f5a5fa0bd80bdce42636c9ba0 100644
index edb61ebece92f53d6edc8522c0dfea01159121dc..fd57751828254ebf9b05af13c26afa55ffa7ed00 100644
--- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
+++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
@@ -287,7 +287,7 @@ export const PREFS_CONFIG = new Map([
@@ -347,7 +347,7 @@ export const PREFS_CONFIG = new Map([
"showSponsoredTopSites",
{
title: "Show sponsored top sites",

View File

@@ -1,17 +1,8 @@
diff --git a/browser/installer/windows/nsis/defines.nsi.in b/browser/installer/windows/nsis/defines.nsi.in
index c6bb41695d70d17e5691e0d1856b79f7111d5026..8a9393a79a60aca23f80fc989fe2ae333ba54e39 100644
index a9bf2d67ce522054442be664bda1434c63609ea1..16e03732d78207ce602066a4bccc0d2c2385ca91 100644
--- a/browser/installer/windows/nsis/defines.nsi.in
+++ b/browser/installer/windows/nsis/defines.nsi.in
@@ -90,7 +90,7 @@
!define BETA_UPDATE_CHANNEL
!endif
-!define BaseURLStubPing "http://download-stats.mozilla.org/stub"
+!define BaseURLStubPing ""
# ARCH is used when it is necessary to differentiate the x64 registry keys from
# the x86 registry keys (e.g. the uninstall registry key).
@@ -152,7 +152,7 @@ VIAddVersionKey "ProductVersion" "${AppVersion}"
@@ -147,7 +147,7 @@ VIAddVersionKey "ProductVersion" "${AppVersion}"
!define APPROXIMATE_REQUIRED_SPACE_MB "145"
# Constants for parts of the telemetry submission URL

View File

@@ -1,20 +1,20 @@
diff --git a/browser/installer/windows/nsis/installer.nsi b/browser/installer/windows/nsis/installer.nsi
index b3459f8233b2509744e27bfe33884c6a92164e36..76b71e0882381f8f6becaf88bc4e3cc56f8d8ad4 100755
index 36fbee18edd138036c23ee77806f47cd10efce55..f70893700c54bdbc6d6fc5b760fd9a3654eb39e7 100755
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -842,7 +842,7 @@ Section "-InstallEndCleanup"
@@ -845,7 +845,7 @@ Section "-InstallEndCleanup"
; When we're using the GUI, .onGUIEnd sends the ping, but of course that isn't
; invoked when we're running silently.
${If} ${Silent}
- Call SendPing
+ ; Call SendPing
- Call SendPingIfApplicable
+ ; Call SendPingIfApplicable
${EndIf}
SectionEnd
@@ -1978,5 +1978,5 @@ FunctionEnd
@@ -1800,5 +1800,5 @@ FunctionEnd
Function .onGUIEnd
${OnEndCommon}
- Call SendPing
+ ; Call SendPing
- Call SendPingIfApplicable
+ ; Call SendPingIfApplicable
FunctionEnd

View File

@@ -1,10 +1,10 @@
diff --git a/browser/installer/windows/nsis/uninstaller.nsi b/browser/installer/windows/nsis/uninstaller.nsi
old mode 100755
new mode 100644
index a193a94e4893a8b07111d83ebdd2a6488a98be7a..ab7d84abbf6d9442cbc299194c4ffb74c5785723
index 0e2f7fa874b865b2a354c5ca612c5714f6ac5b69..0b1182279336972705bc3ff47e69353b997eb1bd
--- a/browser/installer/windows/nsis/uninstaller.nsi
+++ b/browser/installer/windows/nsis/uninstaller.nsi
@@ -515,6 +515,7 @@ Section "Uninstall"
@@ -516,6 +516,7 @@ Section "Uninstall"
${un.RegCleanFileHandler} ".svg" "FirefoxHTML-$AppUserModelID"
${un.RegCleanFileHandler} ".webp" "FirefoxHTML-$AppUserModelID"
${un.RegCleanFileHandler} ".avif" "FirefoxHTML-$AppUserModelID"

View File

@@ -1,8 +1,8 @@
diff --git a/browser/modules/BrowserDOMWindow.sys.mjs b/browser/modules/BrowserDOMWindow.sys.mjs
index e951af5edb966718ee20422c8e46d868c177cd1c..cd41305a4da8e675417eca7df5cd4a1ecee90c3d 100644
index 29c5b1510696cfdd993388957115709b1a149d7c..6616edbc5f992ffdf3df65028cd26c17ef13f315 100644
--- a/browser/modules/BrowserDOMWindow.sys.mjs
+++ b/browser/modules/BrowserDOMWindow.sys.mjs
@@ -437,7 +437,7 @@ export class BrowserDOMWindow {
@@ -436,7 +436,7 @@ export class BrowserDOMWindow {
// Passing a null-URI to only create the content window,
// and pass true for aSkipLoad to prevent loading of
// about:blank
@@ -11,7 +11,7 @@ index e951af5edb966718ee20422c8e46d868c177cd1c..cd41305a4da8e675417eca7df5cd4a1e
null,
aParams,
aWhere,
@@ -445,6 +445,10 @@ export class BrowserDOMWindow {
@@ -444,6 +444,10 @@ export class BrowserDOMWindow {
aName,
true
);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/modules/URILoadingHelper.sys.mjs b/browser/modules/URILoadingHelper.sys.mjs
index a005dbdf84609622ef8054f73f78c0c290e76125..d5bf6fb51c9af5e60f69a73612ee91598080730a 100644
index ed6b9fda700b2b4b35836a77a4da953377a72f4b..22acedcf1006f994ec8b6bf8991b4202e12a6f39 100644
--- a/browser/modules/URILoadingHelper.sys.mjs
+++ b/browser/modules/URILoadingHelper.sys.mjs
@@ -224,6 +224,7 @@ function openInWindow(url, params, sourceWindow) {
@@ -28,8 +28,8 @@ index a005dbdf84609622ef8054f73f78c0c290e76125..d5bf6fb51c9af5e60f69a73612ee9159
for (let i = 0; i < browsers.length; i++) {
let browser = browsers[i];
let browserCompare = cleanURL(
@@ -1030,7 +1031,7 @@ export const URILoadingHelper = {
);
@@ -1026,7 +1027,7 @@ export const URILoadingHelper = {
aSplitView.replaceTab(tabToReplace, tabToMove);
aSplitView.ownerGlobal.focus();
} else {
- aWindow.gBrowser.tabContainer.selectedIndex = i;

View File

@@ -1,12 +1,12 @@
diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
index b82fa7229ad637a08563c06fa2c2abdf99998d7c..b5ee3aa9679244222a0e9eed4be54a41ec6a11f9 100644
index a99181fc249a7086e9886d86d85e8650595a0a0c..dd59739078080738d28bf59a1bb26fc0783bcac6 100644
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -14,7 +14,6 @@
@media (-moz-gtk-theme-family) {
--tabs-navbar-separator-style: none;
@media (prefers-color-scheme: light) {
- --urlbar-box-bgcolor: #fafafa;
- --urlbar-box-background-color: #fafafa;
}
}
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css
index 8fe643be3f60da00760775c918ba3228fbd2b610..d634c09685065b4096a74a93e0373e4942fd2a29 100644
index 92162e2893f7c8aea92c354f3a12cccf48f7576e..3189d75c8e47f3f76ddc1227d3cffee6b09402eb 100644
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -37,7 +37,7 @@

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/browser-shared.css b/browser/themes/shared/browser-shared.css
index d1b11a65e527cf7c13f42b3f980f2f09592c5e53..44fb86b570c69f7d7003d3949e330e08722fbbb8 100644
index 70571d8f32d60d10e59e33cb83e38229de026fc6..8e420ed6f6838499553c55265a1e35f5c3801d35 100644
--- a/browser/themes/shared/browser-shared.css
+++ b/browser/themes/shared/browser-shared.css
@@ -250,13 +250,13 @@ body {
@@ -253,13 +253,13 @@ body {
@media (-moz-platform: macos) and (not (-moz-mac-rtl)) {
&:-moz-locale-dir(ltr) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/identity-block/identity-block.css b/browser/themes/shared/identity-block/identity-block.css
index c867b8602c5b3bdce335b932a3a1cd0c538e4ad6..2dc1cf17603bcdd9b8d81a6f46ed8b6ed75b2763 100644
index 72b6673094b80e9c109ae6f125cd25c3e00260ef..d116ab9671b02bbb05eddec8318e1f2835c29f32 100644
--- a/browser/themes/shared/identity-block/identity-block.css
+++ b/browser/themes/shared/identity-block/identity-block.css
@@ -7,7 +7,7 @@
@@ -17,7 +17,7 @@ index c867b8602c5b3bdce335b932a3a1cd0c538e4ad6..2dc1cf17603bcdd9b8d81a6f46ed8b6e
-#identity-box[pageproxystate="valid"]:is(.notSecureText, .chromeUI, .extensionPage) > .identity-box-button,
-#urlbar-label-box {
- background-color: var(--urlbar-box-bgcolor);
- background-color: var(--urlbar-box-background-color);
- color: var(--urlbar-box-text-color);
- padding-inline: 8px;
- border-radius: var(--urlbar-inner-border-radius);

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
index 3a12a7a33c33cec463b3d38647bdf647827784f8..4844da4b56b3172b333f5c5eb31fcd74f43fd0b0 100644
index e59fb7f095161348e442626997bbb6dc4e1e999e..488c540b07e5ce73048cebec0d75dd33f9dcabd4 100644
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -334,3 +334,5 @@
@@ -343,3 +343,5 @@
skin/classic/browser/illustrations/market-opt-in.svg (../shared/illustrations/market-opt-in.svg)
skin/classic/browser/illustrations/yelpRealtime-opt-in.svg (../shared/illustrations/yelpRealtime-opt-in.svg)

View File

@@ -6,10 +6,6 @@
@namespace html "http://www.w3.org/1999/xhtml";
:root {
--in-content-box-background: var(--zen-colors-tertiary) !important;
}
.pane-container {
margin: auto;
}
@@ -58,10 +54,6 @@ groupbox h2 {
font-size: 15px;
}
#categories {
margin: 0 !important;
}
#categories > .category {
margin-left: 0 !important;
min-height: 40px !important;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/tabbrowser/content-area.css b/browser/themes/shared/tabbrowser/content-area.css
index 13403bf438be18b5bcc9f3d497c94636b5fb5f6f..0505582a7efa212813cf39835c12d34d4d38eb4e 100644
index 05c1261f0085794e5e81dc8c1ef24fe1a9c5ec82..d0a1938b629338184bc462b4da1e10e1a4d6a4e7 100644
--- a/browser/themes/shared/tabbrowser/content-area.css
+++ b/browser/themes/shared/tabbrowser/content-area.css
@@ -85,7 +85,6 @@
@@ -10,7 +10,7 @@ index 13403bf438be18b5bcc9f3d497c94636b5fb5f6f..0505582a7efa212813cf39835c12d34d
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("sidebar.revamp") {
@@ -141,7 +140,6 @@
@@ -146,7 +145,6 @@
}
browser:is([blank], [pendingpaint]) {
@@ -18,7 +18,7 @@ index 13403bf438be18b5bcc9f3d497c94636b5fb5f6f..0505582a7efa212813cf39835c12d34d
}
/* Exclude browsers with smartwindow-content attribute which inherit
@@ -427,7 +425,7 @@ split-view-footer {
@@ -440,7 +438,7 @@ split-view-footer {
.dialogStack {
z-index: var(--browser-stack-z-index-dialog-stack);
@@ -27,7 +27,7 @@ index 13403bf438be18b5bcc9f3d497c94636b5fb5f6f..0505582a7efa212813cf39835c12d34d
inset: 0;
/* --browser-with-dialog set on browser[tabDialogShowing], we want to position the overlay
only on the top of the <browser> element so it doesn't overlap the DevTools toolbox */
@@ -594,7 +592,7 @@ split-view-footer {
@@ -607,7 +605,7 @@ split-view-footer {
.dialogOverlay[topmost="true"],
#window-modal-dialog::backdrop {

View File

@@ -1,29 +1,17 @@
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d1669f2e1a4 100644
index 2ce8b135dcf087a2e2cb75c3417be8c9ba4178e6..3c297614afd323e210ebf0018d4aca22c000e105 100644
--- a/browser/themes/shared/tabbrowser/tabs.css
+++ b/browser/themes/shared/tabbrowser/tabs.css
@@ -24,7 +24,7 @@
@@ -25,7 +25,7 @@
--tab-group-line-thickness: 2px;
--tab-group-line-toolbar-border-distance: 1px;
/* Collapsed tabs should be square, so set width to match the min height */
- --tab-collapsed-background-width: var(--tab-min-height);
+ --tab-collapsed-background-width: 48px;
--tab-collapsed-width: calc(var(--tab-collapsed-background-width) + 2 * var(--tab-inner-inline-margin));
--tab-inner-inline-margin: var(--space-medium);
--tab-inline-padding: 8px;
@@ -38,9 +38,9 @@
--tab-block-margin: 4px;
--tab-icon-end-margin: 5.5px;
--tab-label-line-height: 1.7;
- --tab-loading-fill: #0a84ff;
+ --tab-loading-fill: var(--zen-primary-color);
--tab-hover-background-color: color-mix(in srgb, currentColor 11%, transparent);
- --tab-selected-textcolor: var(--toolbar-color);
+ --tab-selected-textcolor: currentColor;
--tab-selected-bgcolor: var(--toolbar-bgcolor);
--tab-selected-color-scheme: var(--toolbar-color-scheme);
&[lwt-tab-selected="light"] {
@@ -298,7 +298,6 @@ tab-split-view-wrapper[dragtarget] {
--tab-pinned-min-width-expanded: calc(var(--tab-pinned-expanded-background-width) + 2 * var(--tab-pinned-margin-inline-expanded));
--tab-note-icon-end-margin: var(--dimension-4);
@@ -276,7 +276,6 @@ tab-split-view-wrapper[dragtarget] {
}
:root:not([uidensity="compact"], [sidebar-expand-on-hover]) &[pinned] {
@@ -31,7 +19,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
}
&:is([selected], [multiselected]) {
@@ -312,6 +311,7 @@ tab-split-view-wrapper[dragtarget] {
@@ -290,6 +289,7 @@ tab-split-view-wrapper[dragtarget] {
border-radius: inherit;
position: relative;
overflow: hidden;
@@ -39,7 +27,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
&::before {
position: absolute;
@@ -511,10 +511,6 @@ tab-split-view-wrapper[dragtarget] {
@@ -489,10 +489,6 @@ tab-split-view-wrapper[dragtarget] {
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("browser.tabs.fadeOutUnloadedTabs") {
&[pending] {
@@ -50,7 +38,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -531,10 +527,6 @@ tab-split-view-wrapper[dragtarget] {
@@ -509,10 +505,6 @@ tab-split-view-wrapper[dragtarget] {
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("browser.tabs.fadeOutExplicitlyUnloadedTabs") {
&[pending][discarded] {
@@ -61,7 +49,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -603,7 +595,7 @@ tab-split-view-wrapper[dragtarget] {
@@ -581,7 +573,7 @@ tab-split-view-wrapper[dragtarget] {
z-index: 1; /* Overlay tab title */
#tabbrowser-tabs[orient="vertical"] & {
@@ -70,7 +58,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
}
&[crashed] {
@@ -611,7 +603,7 @@ tab-split-view-wrapper[dragtarget] {
@@ -589,7 +581,7 @@ tab-split-view-wrapper[dragtarget] {
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]),
@@ -79,7 +67,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
&[soundplaying] {
list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg");
}
@@ -666,7 +658,7 @@ tab-split-view-wrapper[dragtarget] {
@@ -644,7 +636,7 @@ tab-split-view-wrapper[dragtarget] {
}
}
@@ -88,7 +76,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
&[crashed] {
display: revert;
}
@@ -832,7 +824,7 @@ tab-split-view-wrapper[dragtarget] {
@@ -810,7 +802,7 @@ tab-split-view-wrapper[dragtarget] {
has not been added to root. There are certain scenarios when that attribute is temporarily
removed from root such as when toggling the sidebar to expand with the toolbar button. */
#tabbrowser-tabs[orient="horizontal"] &:not([pinned]):not([crashed]),
@@ -97,7 +85,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
&:is([soundplaying], [muted], [activemedia-blocked]) {
display: flex;
}
@@ -1048,7 +1040,6 @@ tab-split-view-wrapper[dragtarget] {
@@ -1026,7 +1018,6 @@ tab-split-view-wrapper[dragtarget] {
.tabbrowser-tab:is([image], [pinned]) > .tab-stack > .tab-content[attention]:not([selected]),
.tabbrowser-tab > .tab-stack > .tab-content[pinned][titlechanged]:not([selected]),
#tabbrowser-tabs[orient="vertical"] .tabbrowser-tab > .tab-stack > .tab-content[titlechanged]:not([selected]) {
@@ -105,16 +93,16 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
background-position: center bottom 6.5px;
background-size: 4px 4px;
background-repeat: no-repeat;
@@ -1614,7 +1605,7 @@ tab-group {
@@ -1635,7 +1626,7 @@ tab-group {
}
#tabbrowser-tabs[orient="vertical"][expanded] {
- tab-group > :is(.tab-group-label-container, .tabbrowser-tab),
+ tab-group > :is(.tab-group-label-container, .tab-group-container, .tabbrowser-tab),
&[movingtab][movingtab-addToGroup]:not([movingtab-group], [movingtab-ungroup]) tab-group > .tabbrowser-tab:is(:active, [multiselected]) {
&[movingtab][movingtab-addToGroup]:not([movingtab-group], [movingtab-ungroup]) .tabbrowser-tab:is(:active, [multiselected]) {
margin-inline-start: var(--space-medium);
}
@@ -2089,7 +2080,7 @@ tab-group {
@@ -2128,7 +2119,7 @@ tab-group {
}
}
@@ -123,7 +111,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
#vertical-tabs-newtab-button {
appearance: none;
min-height: var(--tab-min-height);
@@ -2100,7 +2091,7 @@ tab-group {
@@ -2139,7 +2130,7 @@ tab-group {
margin-inline: var(--tab-inner-inline-margin);
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text {
@@ -132,7 +120,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
}
&:hover {
@@ -2124,7 +2115,7 @@ tab-group {
@@ -2163,7 +2154,7 @@ tab-group {
* flex container. #tabs-newtab-button is a child of the arrowscrollbox where
* we don't want a gap (between tabs), so we have to add some margin.
*/
@@ -141,7 +129,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
margin-block: var(--tab-block-margin);
}
@@ -2312,7 +2303,6 @@ tab-group {
@@ -2351,7 +2342,6 @@ tab-group {
&:not([expanded]) {
.tabbrowser-tab[pinned] {
@@ -149,7 +137,7 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
}
.tab-background {
@@ -2352,8 +2342,8 @@ tab-group {
@@ -2391,8 +2381,8 @@ tab-group {
display: block;
position: absolute;
inset: auto;
@@ -160,17 +148,17 @@ index 203b546933842f4b0134188fda020c4db4dcd0d2..0d67deabac2984574636248a16e58d16
&:-moz-window-inactive {
background-image:
@@ -2438,9 +2428,6 @@ tab-group {
:root:not([privatebrowsingmode]) :is(toolbarbutton, toolbarpaletteitem) ~ #tabbrowser-tabs,
:root[privatebrowsingmode] :is(toolbarbutton:not(#firefox-view-button), toolbarpaletteitem:not(#wrapper-firefox-view-button)) ~ #tabbrowser-tabs {
- border-inline-start: var(--tabstrip-inner-border);
- padding-inline-start: 2px;
- margin-inline-start: 2px;
@@ -2480,9 +2470,6 @@ tab-group {
~ #tabbrowser-tabs[orient="horizontal"]::before {
display: flex;
content: "";
- border-inline-start: var(--tabstrip-inner-border);
- padding-inline-start: 2px;
- margin-inline-start: 2px;
}
}
:root[privatebrowsingmode] :is(#firefox-view-button, #menu_openFirefoxView) {
@@ -2472,7 +2459,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
@@ -2515,7 +2502,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
list-style-image: url(chrome://global/skin/icons/plus.svg);
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/toolbarbuttons.css b/browser/themes/shared/toolbarbuttons.css
index 8c02df47ca003fa5094de0e7802cd8c10ef1bf2a..a16e8d7d3a00af8df648946950b7bb1c3f30efbb 100644
index 829501008d7b6fd6bddf899f3cf599a68ff216a0..cbdc770d56c4053d0b9afc13322f072c3376eb30 100644
--- a/browser/themes/shared/toolbarbuttons.css
+++ b/browser/themes/shared/toolbarbuttons.css
@@ -13,20 +13,6 @@
@@ -23,7 +23,7 @@ index 8c02df47ca003fa5094de0e7802cd8c10ef1bf2a..a16e8d7d3a00af8df648946950b7bb1c
&:where([uidensity="compact"]) {
--toolbarbutton-inner-padding: var(--toolbarbutton-inner-padding-compact);
--bookmark-block-padding: 1px;
@@ -65,9 +51,7 @@
@@ -123,9 +109,7 @@
#TabsToolbar {
/* Override the inner padding to ensure the dimensions match the tabs, but also making sure
different types of buttons (combined-buttons-dropmarker or text) still look correct. */
@@ -33,7 +33,7 @@ index 8c02df47ca003fa5094de0e7802cd8c10ef1bf2a..a16e8d7d3a00af8df648946950b7bb1c
}
/* Primary toolbar buttons */
@@ -146,8 +130,8 @@ toolbar .toolbarbutton-1 {
@@ -204,8 +188,8 @@ toolbar .toolbarbutton-1 {
> .toolbarbutton-icon {
/* horizontal padding + actual icon width */
@@ -44,7 +44,7 @@ index 8c02df47ca003fa5094de0e7802cd8c10ef1bf2a..a16e8d7d3a00af8df648946950b7bb1c
}
> .toolbarbutton-text {
@@ -157,7 +141,7 @@ toolbar .toolbarbutton-1 {
@@ -215,7 +199,7 @@ toolbar .toolbarbutton-1 {
* height as the button icons and the same vertical padding, but as a minimum,
* because otherwise an increase in text sizes would break things.
*/
@@ -53,7 +53,7 @@ index 8c02df47ca003fa5094de0e7802cd8c10ef1bf2a..a16e8d7d3a00af8df648946950b7bb1c
@media (-moz-platform: macos) {
padding-top: calc(var(--toolbarbutton-inner-padding) + 1px);
@@ -277,7 +261,7 @@ toolbar .toolbaritem-combined-buttons {
@@ -325,7 +309,7 @@ toolbar .toolbaritem-combined-buttons {
#nav-bar-overflow-button {
list-style-image: url("chrome://global/skin/icons/chevron.svg");
@@ -62,7 +62,7 @@ index 8c02df47ca003fa5094de0e7802cd8c10ef1bf2a..a16e8d7d3a00af8df648946950b7bb1c
display: none;
}
@@ -487,7 +471,7 @@ toolbarbutton.bookmark-item:not(.subviewbutton) {
@@ -535,7 +519,7 @@ toolbarbutton.bookmark-item:not(.subviewbutton) {
*/
align-items: stretch;
> .toolbarbutton-icon {

View File

@@ -1,17 +1,17 @@
diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css
index 0ee35cfe67c9bce37a844d4b7d9715d4fb50f709..5cdb8037e49a68ea4126af349690af8a16b5e59b 100644
index 3f46c918e125f9531a536a09358c980b2c923864..cba6f00318ce5dc7b6717b6c9afd2ee916715f8f 100644
--- a/browser/themes/shared/urlbar-searchbar.css
+++ b/browser/themes/shared/urlbar-searchbar.css
@@ -10,7 +10,7 @@
@@ -11,7 +11,7 @@
/* Usually we wouldn't need snapping border widths manually, but we use this
* for other layout calculations too */
--urlbar-container-border-width: max(env(hairline), round(down, 1px, env(hairline)));
- --urlbar-container-padding: round(up, 1px, env(hairline));
+ --urlbar-container-padding: 2px;
--urlbar-container-border-padding: calc(var(--urlbar-container-border-width) + var(--urlbar-container-padding));
--urlbar-margin-inline: 5px;
--urlbar-padding-block: 4px;
@@ -55,7 +55,7 @@ toolbar[inactive="true"] .urlbar,
--urlbar-container-inset: calc(var(--urlbar-container-border-width) + var(--urlbar-container-padding));
@media (max-width: 770px) {
@@ -54,7 +54,7 @@ toolbar[inactive="true"] .urlbar,
.urlbar:not([usertyping]) > .urlbar-input-container > .urlbar-go-button,
.urlbar:not(#searchbar-new, [focused]) > .urlbar-input-container > .urlbar-go-button,
#urlbar-revert-button-container {
@@ -20,7 +20,18 @@ index 0ee35cfe67c9bce37a844d4b7d9715d4fb50f709..5cdb8037e49a68ea4126af349690af8a
}
/* Document Picture-in-Picture API window */
@@ -333,10 +333,14 @@ toolbar[inactive="true"] .urlbar,
@@ -201,6 +201,10 @@ toolbar[inactive="true"] .urlbar,
mask-image: linear-gradient(to right, transparent var(--urlbar-scheme-size), black calc(var(--urlbar-scheme-size) + 3ch));
}
+ #navigator-toolbox[zen-has-implicit-hover="true"] .urlbar:not([focused])[textoverflow="left"] > .urlbar-input-container > .urlbar-input-box > & {
+ mask-image: linear-gradient(to right, transparent, black 3ch, black calc(100% - 3ch), transparent);
+ }
+
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("browser.nova.enabled") {
&::selection {
@@ -343,10 +347,14 @@ toolbar[inactive="true"] .urlbar,
.urlbar[breakout][breakout-extend] {
height: auto;

View File

@@ -1,7 +1,7 @@
diff --git a/browser/themes/shared/urlbar-variables.css b/browser/themes/shared/urlbar-variables.css
index 0710bcc11e8040750ff826e3d3551454fdad61c6..2be2fa3e386ad9d4296d73ee8814e09750382a0d 100644
--- a/browser/themes/shared/urlbar-variables.css
+++ b/browser/themes/shared/urlbar-variables.css
diff --git a/browser/themes/shared/urlbar/variables.css b/browser/themes/shared/urlbar/variables.css
index 34ab3df5ed433dafed00799c902afc276a722862..1e71860631f33839bdc7e1ec3a1e877bef744b55 100644
--- a/browser/themes/shared/urlbar/variables.css
+++ b/browser/themes/shared/urlbar/variables.css
@@ -9,7 +9,7 @@
:root {
--identity-box-margin-inline: 4px;

View File

@@ -0,0 +1,21 @@
diff --git a/browser/themes/shared/urlbar/view-proton.css b/browser/themes/shared/urlbar/view-proton.css
index 9e041b67988f590bdbea48514937b1fa25c9785c..05507782b91858dff3e181843314af7956528ba9 100644
--- a/browser/themes/shared/urlbar/view-proton.css
+++ b/browser/themes/shared/urlbar/view-proton.css
@@ -14,7 +14,7 @@
--urlbarView-small-font-size: 0.85em;
- --urlbarView-results-padding: 7px;
+ --urlbarView-results-padding: 8px;
--urlbarView-row-gutter: var(--space-xxsmall);
--urlbarView-item-inline-padding: var(--urlbar-icon-padding);
--urlbarView-item-block-padding: 6px;
@@ -168,7 +168,6 @@
min-height: 32px;
}
:root[uidensity="touch"] & {
- padding-block: 11px;
}
}

View File

@@ -1,21 +0,0 @@
diff --git a/browser/themes/shared/urlbarView.css b/browser/themes/shared/urlbarView.css
index 2d6a63328642969e23da0a41ca6c7bb23eb96e8e..3060ba3f52ae7ab2f8fc36ff546d358724909b3e 100644
--- a/browser/themes/shared/urlbarView.css
+++ b/browser/themes/shared/urlbarView.css
@@ -21,7 +21,7 @@
--urlbarView-small-font-size: 0.85em;
- --urlbarView-results-padding: 7px;
+ --urlbarView-results-padding: 8px;
--urlbarView-row-gutter: 2px;
--urlbarView-item-inline-padding: var(--urlbar-icon-padding);
--urlbarView-item-block-padding: 6px;
@@ -172,7 +172,6 @@
min-height: 32px;
}
:root[uidensity="touch"] & {
- padding-block: 11px;
}
}

View File

@@ -8,7 +8,8 @@
#zen-welcome-start-button,
.zen-toast button,
.zen-current-workspace-indicator-chevron,
.pinned-tabs-container-separator toolbarbutton {
.pinned-tabs-container-separator toolbarbutton,
.zen-permission-popup-boost-editor-button {
-moz-context-properties: fill, fill-opacity !important;
fill: currentColor !important;
}
@@ -39,10 +40,21 @@
.close-icon,
.zen-glance-sidebar-close,
.zen-theme-picker-custom-list-item-remove,
#appMenu-quit-button2 {
#appMenu-quit-button2,
#zen-boost-delete {
list-style-image: url("close.svg") !important;
}
#PanelUI-zen-emojis-picker-none,
#zen-emojis-picker-none {
list-style-image: url("trash.svg");
}
#PanelUI-zen-gradient-generator-color-remove,
#zen-gradient-generator-color-remove {
list-style-image: url("unpin.svg") !important;
}
#PanelUI-zen-emojis-picker-none {
list-style-image: url("trash.svg");
}
@@ -117,7 +129,8 @@
}
.zen-current-workspace-indicator-chevron,
#PanelUI-zen-gradient-generator-color-page-right {
#PanelUI-zen-gradient-generator-color-page-right,
.zen-permission-popup-boost-editor-button {
list-style-image: url("arrow-right.svg");
}
@@ -412,7 +425,8 @@
}
.panel-header > .subviewbutton-back,
#PanelUI-zen-gradient-generator-color-page-left {
#PanelUI-zen-gradient-generator-color-page-left,
#zen-boost-back {
list-style-image: url("arrow-left.svg") !important;
}
@@ -504,6 +518,30 @@
&:where([starred]) image {
list-style-image: url("permissions-fill.svg");
}
&[boosting] image {
color: var(--color-accent-primary);
list-style-image: url("permissions-fill.svg");
}
position: relative;
& .zen-site-data-boost-animation {
display: none;
}
}
@media not (prefers-reduced-motion: reduce) {
#zen-site-data-icon-button[boosting] .zen-site-data-boost-animation {
position: absolute;
display: flex;
width: 100%;
height: 100%;
color: var(--color-accent-primary);
list-style-image: url("chrome://browser/content/zen-images/boost-indicator.svg");
transform: translateX(-20%);
z-index: 0;
pointer-events: none;
}
}
.geo-icon {
@@ -758,7 +796,8 @@
--fp-enabled: 1;
}
#alltabs-button {
#alltabs-button,
#urlbar-engine-one-off-item-workspaces {
list-style-image: url("chrome://browser/skin/tabs.svg") !important;
}
@@ -878,6 +917,36 @@
fill: currentColor;
}
#zen-site-data-boost {
border-radius: 6px;
appearance: none;
padding: 6px 10px 6px 10px;
position: relative;
list-style-image: url("boost.svg");
& .toolbarbutton-text {
display: none;
}
@media -moz-pref("zen.boosts.enabled", false) {
display: none;
}
& image {
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
width: 14px;
fill-opacity: 0.7;
}
}
.boost-brush {
list-style-image: url("boost.svg") !important;
padding: 10px;
}
#zen-site-data-security-info {
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
@@ -937,3 +1006,83 @@
list-style-image: url("link.svg");
fill-opacity: 0.65;
}
#zen-boost-case[case-mode="none"] {
list-style-image: none;
}
#zen-boost-case[case-mode="capitalize"] {
list-style-image: url("text-title-case.svg");
}
#zen-boost-case[case-mode="uppercase"] {
list-style-image: url("text-uppercase.svg");
}
#zen-boost-case[case-mode="lowercase"] {
list-style-image: url("text-lowercase.svg");
}
#zen-boost-code {
list-style-image: url("brackets-curly.svg");
}
#zen-boost-zap {
list-style-image: url("bolt.svg");
}
#zen-boost-controls {
list-style-image: url("sliders.svg");
}
#zen-boost-invert {
list-style-image: url("lightbulb.svg");
}
#zen-boost-disable {
list-style-image: url("block.svg");
}
#zen-boost-close {
list-style-image: url("close.svg");
@media (-moz-platform: macos) {
list-style-image: url("close-filled-round.svg");
}
@media (-moz-platform: windows) {
list-style-image: none;
list-style: none;
display: inline-flex;
&::before {
font-family: "Segoe Fluent Icons", "Segoe MDL2 Assets";
content: "\e8bb";
font-size: 12px;
}
}
}
#zen-boost-magic-theme {
list-style-image: url("sparkles.svg");
}
#zen-boost-shuffle {
list-style-image: url("dice.svg");
}
#zen-boost-css-picker {
list-style-image: url("eyedropper.svg");
}
#zen-boost-css-inspector {
list-style-image: url("hammer.svg");
}
#zen-boost-save {
list-style-image: url("downloads.svg");
}
#zen-boost-load {
list-style-image: url("open.svg");
}

Some files were not shown because too many files have changed in this diff Show More