Compare commits

...
Sign in to create a new pull request.

245 commits

Author SHA1 Message Date
LeMoonStar
7c7a911d1e Undo essentials limit 2025-05-29 00:30:55 +02:00
mr. m
663243264b
feat: Prevent zen's session restore from being removed, b=(no-bug), c=common 2025-05-28 18:19:49 +02:00
mr. m
03ca00748c
fix: Fixed inserting changed titles into pinned database, b=(no-bug), c=tabs 2025-05-28 17:59:51 +02:00
mr. m
cbb1a4bc44
feat: Remove border from menu popups, b=(no-bug), c=common 2025-05-28 17:13:21 +02:00
mr. m
21f3ab23d3
feat: Inherti the split view type when opening a new link, b=(no-bug), c=split-view 2025-05-28 14:17:20 +02:00
mr. m
18944d5ed8
fix: Fixed pinned tab icons not appearing at startup, b=(no-bug), c=tabs 2025-05-28 10:17:33 +02:00
Mr. M
5c6e5f7361
fix: Fixed import mods button not working, b=(no-bug), c=mods, split-view 2025-05-27 21:03:40 +02:00
Mr. M
bd72aebd98
chore: Only export global variable for mods, not the class, b=(no-bug), c=mods 2025-05-27 20:17:06 +02:00
Mr. M
0278aea4f7
chore: Remove support links that target mozilla's support page on the about dialog, b=(bug #8634), c=no-component 2025-05-27 20:14:34 +02:00
Mr. M
3c01004641
fix: Fixed workspace transition animations and icons not appearing on new profiles, b=(no-bug), c=tabs, workspaces 2025-05-27 17:59:26 +02:00
Mr. M
b8213569e5
feat: Disable opening link on split view if the limit is reached, b=(no-bug), c=common, split-view 2025-05-27 17:14:10 +02:00
Mr. M
4d27f9d741
chore: Updated to firefox 139.0, b=(no-bug), c=no-component 2025-05-27 16:53:31 +02:00
Mr. M
3b56abf090
fix: Small fixes for split view and glance, b=(no-bug), c=common, compact-mode, split-view, tabs 2025-05-27 16:51:35 +02:00
Jai A P
590ba6de1b
Finally fix positioning of popups (#8532)
Co-authored-by: mr. m <91018726+mauro-balades@users.noreply.github.com>
2025-05-27 15:29:41 +02:00
Mr. M
4aa215e091
fix: Fixed changing tab having the wrong focus on the website, b=(closes #8587), c=workspaces 2025-05-27 13:38:16 +02:00
Mr. M
de175bff11
fix: Fixer resizing the sidebar break the urlbar formatting, b=(no-bug), c=common, workspaces 2025-05-27 13:38:10 +02:00
Mr. M
a6bc8d7105
chore: Cleanup calls to updateSplitViewButton, b=(no-bug), c=split-view 2025-05-27 13:02:28 +02:00
Mr. M
e48e7caef1
test: Fixed test test_Glance_Basic_Close, b=(no-bug), c=split-view 2025-05-27 12:51:17 +02:00
Mr. M
015cdad2df
feat: Made 'search test on <search engine>' open tabs in glance, b=(no-bug), c=common, glance, split-view, tests 2025-05-27 12:49:12 +02:00
Mr. M
ef6cf5fae1
chore: Remove icons from context menus, b=(no-bug), c=common 2025-05-27 12:11:58 +02:00
Bryan Galdámez
797152da89
refactor(mods): rework ZenMods module (#8618)
Co-authored-by: mr. m <mr.m@tuta.com>
Co-authored-by: mr. m <91018726+mauro-balades@users.noreply.github.com>
2025-05-27 12:02:59 +02:00
Mr. M
316ff45859
feat: Remove titlebar option on context menu, b=(no-bug), c=tabs 2025-05-27 10:43:55 +02:00
Mr. M
e0ac9ba424
chore: Added licenses to remanining files, b=(no-bug), c=common, compact-mode, folders, glance, media, mods, tabs, tests, workspaces 2025-05-25 17:15:19 +02:00
Mr. M
09ca430b88
feat: Improved tab transitions and fixed a couple of issues with glance, b=(no-bug), c=tabs, common, glance, split-view, workspaces 2025-05-25 17:06:22 +02:00
Mr. M
dda1dab6f3
fix: Fixed menu items being missaligned on windows, b=(closes #8590), c=no-component 2025-05-25 11:22:44 +02:00
mr. m
fbf411c096
Merge pull request #8578 from zen-browser/restore-fix 2025-05-24 17:21:40 +02:00
Mr. M
a3de3e221c
fix: Fixed restoring previous sesions from empty tabs, b=(no-bug), c=no-component 2025-05-24 17:07:21 +02:00
mr. m
4b0c6f2ca5
Merge pull request #8512 from zen-browser/firefox-139 2025-05-24 09:34:46 +02:00
Mr. M
c32dc7ecd2
feat: Added unload preference to settings, b=(no-bug), c=no-component 2025-05-24 09:33:13 +02:00
Mr. M
d6e14ca88c
Merge branch 'firefox-139' of https://github.com/zen-browser/desktop into firefox-139 2025-05-23 21:01:48 +02:00
Mr. M
ebfc885745
feat: Replace zen's tab unloader with firefox's one. Also added more tests, b=(no-bug), c=common, tabs, tests, glance 2025-05-23 21:01:33 +02:00
mr. m
89d7b29b12
Merge branch 'dev' into firefox-139 2025-05-23 19:39:42 +02:00
Mr. M
6f5d20fd49
Merge branch 'firefox-139' of https://github.com/zen-browser/desktop into firefox-139 2025-05-22 20:22:21 +02:00
Mr. M
15bd0b2675
test: Added more glance tests, b=(no-bug), c=tests, glance, workspaces 2025-05-22 20:22:10 +02:00
mr. m
9132019cb3
fix: Fixed unpining split view group still marking a tab as changed, b=(no-bug), c=folders 2025-05-22 20:08:56 +02:00
mr. m
a87cbfd7a3
Merge branch 'dev' into firefox-139 2025-05-22 20:01:27 +02:00
mr. m
d2c6c8b734
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-22 19:59:36 +02:00
mr. m
6c5be98173
feat: Remove default icon from private workspaces, b=(no-bug), c=workspaces 2025-05-22 19:59:14 +02:00
mr. m
d51838caf9
Merge branch 'dev' into firefox-139 2025-05-22 19:36:20 +02:00
mr. m
a61dd0ab87
Fixed tabs patch
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-22 19:30:11 +02:00
mr. m
d15b1f3c1e
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-22 19:17:17 +02:00
mr. m
40d38b3961
feat: Added new private window looks, b=(no-bug), c=common, tabs, workspaces 2025-05-22 19:17:10 +02:00
Mr. M
addc318f29
test: Added more tests for glance, b=(no-bug), c=tests, scripts, tabs, glance, workspaces 2025-05-22 16:57:27 +02:00
Mr. M
ad124c9d95
chore: Recalcultae patches, b=(no-bug), c=tests, scripts, tabs, glance 2025-05-22 13:57:30 +02:00
Mr. M
4d48395c19
chore: Updated language packs, b=(no-bug), c=no-component 2025-05-22 13:46:11 +02:00
Mr. M
9eb0aa0de4
fix: Completed migrating to firefox 139, b=(no-bug), c=tabs, common, compact-mode, glance 2025-05-22 13:45:31 +02:00
mr. m
452b7e0e54
Merge pull request #8513 from timothebot/patch-1
fix: Faulty HTML comment hiding whole README
2025-05-22 12:55:06 +02:00
tiimo
e10a16bc0d
fix: Faulty HTML comment hiding whole README
Signed-off-by: tiimo <65387160+timothebot@users.noreply.github.com>
2025-05-22 12:31:23 +02:00
mr. m
b26da26192
Merge branch 'dev' into firefox-139 2025-05-22 12:13:37 +02:00
mr. m
be55a26a94
feat: Only dispatch elements to the tab browser if we are on the active workspace, b=(no-bug), c=workspaces 2025-05-22 12:13:18 +02:00
mr. m
22d4b22c53
Merge branch 'dev' into firefox-139 2025-05-22 12:10:30 +02:00
Mr. M
00a86df321
chore: Started to update to firefox 139, b=(no-bug), c=no-component 2025-05-22 12:08:44 +02:00
mr. m
b03cdba607
fix: Fixed notifications not appearing until hovering the top-bar, b=(closes #8510), c=common 2025-05-22 11:44:33 +02:00
mr. m
cce90e6ddc
feat: Initially hide essentials that wont be required on the current workspace, b=(no-bug), c=workspaces 2025-05-22 11:26:19 +02:00
mr. m
b6fc0e4db7
feat: Added support to drag-and-drop split views into glance, b=(no-bug), c=tabs, common, glance, split-view 2025-05-22 11:26:13 +02:00
mr. m
50ed1f0a64
feat: Wait for a new frame before animating workspace backgrounds, b=(no-bug), c=workspaces 2025-05-22 10:23:52 +02:00
mr. m
f40b780b95
fix: Fixed dragging tab to an essential, b=(bug #8465), c=no-component 2025-05-21 15:57:12 +02:00
mr. m
0f37364586
feat: Allow double click only on empty parts of the sidebar, b=(no-bug), c=tabs 2025-05-21 11:48:28 +02:00
mr. m
8cfff0e0bd
fix: Added a min size for welcome window, b=(no-bug), c=welcome 2025-05-21 09:19:43 +02:00
mr. m
e61963454c
fix: Fixed pressing arrow scroll canceling tab rename, b=(closes #8475), c=common 2025-05-21 09:08:01 +02:00
mr. m
eac698d846
fix: Fixed moving tabs into a glanced tab, b=(bug #8465), c=glance 2025-05-21 08:56:26 +02:00
mr. m
b536f98d94
fix: Fixed initializing workspaces, b=(closes #8476), c=workspaces 2025-05-21 08:31:26 +02:00
Mr. M
469f94bddf
fix: Make the appcontent navbar be a flexbox only when needed, b=(no-bug), c=tabs 2025-05-21 06:14:19 +02:00
Mr. M
7af0c64c30
fix: Make the appcontent navbar be a flexbox, b=(no-bug), c=tabs 2025-05-21 06:07:36 +02:00
Mr. M
8e6808ea61
style: Format, b=(no-bug), c=compact-mode 2025-05-20 22:23:22 +02:00
Mr. M
153c0e2fc5
fix: Fixed reordering tabs with glance, b=(bug #8465), c=tabs 2025-05-20 22:21:29 +02:00
Mr. M
b18e946869
feat: Added experimental (unfinished) compact mode animation when hovering, b=(no-bug), c=compact-mode 2025-05-20 22:10:48 +02:00
mr. m
e3a341c88d
feat: Transition grain changes, b=(no-bug), c=common 2025-05-20 21:35:35 +02:00
Mr. M
7671266633
feat: Improved gradient switching transitions, b=(no-bug), c=common, workspaces 2025-05-20 21:17:42 +02:00
Mr. M
1e1f02c764
feat: Animate background from numbers, not strings, b=(no-bug), c=workspaces 2025-05-20 19:38:54 +02:00
Mr. M
d3ec41d73f
fix: Fixed an issue with top toolbar not able to be hovered, b=(no-bug), c=common, compact-mode, tabs, workspaces 2025-05-20 19:02:44 +02:00
Mr. M
9982b1af34
feat: Better animations for app background, b=(no-bug), c=common, workspaces 2025-05-20 18:05:49 +02:00
Mr. M
133cce8bf8
feat: Prevent rebuilding workspaces when customizing items, b=(no-bug), c=workspaces 2025-05-20 17:27:58 +02:00
Mr. M
bb78fc165b
test: Added double click to open tab test, b=(no-bug), c=tabs, workspaces, tests 2025-05-20 17:18:09 +02:00
mr. m
adfc235865
fix: Fixed compact mode being available in popup windows, b=(no-bug), c=compact-mode 2025-05-20 08:53:03 +02:00
Mr. M
0392d60352
fix: Fixed compact mode double toolbar, b=(no-bug), c=compact-mode, workspaces 2025-05-20 07:46:53 +02:00
Mr. M
53ea662ef7
feat: Added migration method for customizable UI, b=(no-bug), c=common 2025-05-20 00:46:37 +02:00
Mr. M
7a846fa458
feat: Added better support for customizable UI, b=(no-bug), c=common, workspaces 2025-05-19 20:28:27 +02:00
Mr. M
273d7ce5d5
fix: Fixed adding more than 12 tabs to essentials, b=(no-bug), c=tabs 2025-05-19 20:04:06 +02:00
Mr. M
c378bf3842
fix: Fixed adding more than 12 tabs to essentials, b=(no-bug), c=tabs 2025-05-19 19:55:55 +02:00
Mr. M
e4de07d773
feat: Dont trim the urlbar when it's open, b=(no-bug), c=common 2025-05-19 19:37:43 +02:00
Mr. M
6dfb05e242
feat: Dont unload webviews when exiting glance on a split view, b=(no-bug), c=glance 2025-05-19 19:27:01 +02:00
Mr. M
3e9d98233c
fix: Fixed restoring tabs not showing the separator correctly, b=(no-bug), c=workspaces 2025-05-19 19:11:49 +02:00
mr. m
8536634fa4
feat: Correctly identify pinned tabs, b=(no-bug), c=tabs 2025-05-19 15:51:15 +02:00
mr. m
23b17b2635
feat: Correctly identify glance tabs, b=(no-bug), c=tabs, glance 2025-05-19 15:36:38 +02:00
mr. m
afcf49b25d
Fixed tabs patch
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-19 14:01:43 +02:00
mr. m
c54ad93db6
fix: Fixed adding glance on a pinned split view, b=(no-bug), c=tabs 2025-05-19 13:49:43 +02:00
mr. m
8d99a97a9e
chore: Small details to split view, b=(no-bug), c=split-view, tabs 2025-05-19 13:31:18 +02:00
mr. m
66003832b2
feat: Dont show scrollbar to all workspaces when swiping, b=(no-bug), c=workspaces 2025-05-19 13:12:52 +02:00
mr. m
32b7af5834
fix: Fixed tabs being clipped when there's too much element separation, b=(closes #8412), c=compact-mode 2025-05-19 13:02:21 +02:00
mr. m
b4f61e48de
fix: Fixed tab label margin, b=(no-bug), c=tabs 2025-05-19 09:33:41 +02:00
mr. m
97e76a9cf2
fix: Fixed tab label margin, b=(no-bug), c=tabs 2025-05-19 09:32:33 +02:00
mr. m
52bfac98be
fix: Fixed compact mode height, b=(no-bug), c=compact-mode 2025-05-19 09:31:06 +02:00
mr. m
0ebe4b4f0a
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-19 09:22:43 +02:00
mr. m
1561525d47
fix: Fixed canceling gesture not showing scrollbar, b=(no-bug), c=workspaces 2025-05-19 09:22:38 +02:00
Mr. M
d9c9e74cc8
fix: Fixed resizing workspaces at startup, b=(no-bug), c=workspaces 2025-05-19 01:32:49 +02:00
Mr. M
e3193c54f4
fix: Improved compact mode for multiple toolbar, b=(no-bug), c=compact-mode, tabs 2025-05-19 01:09:27 +02:00
Mr. M
90b0849308
style: Small style changes before release, b=(no-bug), c=common, compact-mode, workspaces 2025-05-19 00:18:10 +02:00
Mr. M
01e3cc1374
chore: Make sure to always apply shadow to urlbar, b=(no-bug), c=common 2025-05-18 23:53:56 +02:00
Mr. M
e5294908ec
style: Changed shadow for the urlbar, b=(no-bug), c=common 2025-05-18 23:52:01 +02:00
Mr. M
3ed15335fe
style: Use default scrollbar instad of thin for the workspace scrollbox, b=(no-bug), c=workspaces 2025-05-18 23:46:17 +02:00
mr. m
094fbb4ec8
fix: Fixed arrow scrollbox patch export, b=(no-bug), c=no-component 2025-05-18 23:25:19 +02:00
Mr. M
190f1f0cb5
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-18 23:12:29 +02:00
Mr. M
d908700a9c
fix: Fixed selecting tab not scrolling, b=(no-bug), c=tabs, workspaces 2025-05-18 23:12:23 +02:00
mr. m
b669f81926
fix: Fixed swipe gestures when there's a scrollbar, b=(no-bug), c=workspaces 2025-05-18 23:09:42 +02:00
Mr. M
76c22cc896
fix: Fixed closing glance not removing unload attribute from the tab, b=(closes #7655), c=glance 2025-05-18 19:52:46 +02:00
Mr. M
d0d78d2953
fix: Fixed marking the scroll indicator for workspace periferies, b=(no-bug), c=workspaces 2025-05-18 18:33:12 +02:00
Mr. M
8b5e26759f
fix: Fixed moving tabs around with scrollbox overflowing, b=(no-bug), c=tabs, workspaces 2025-05-18 15:34:44 +02:00
mr. m
e4eb6d6fdd
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-18 15:19:13 +02:00
mr. m
1a0ce0df7c
fix: Fixed issues with the XUL rendering, b=(no-bug), c=compact-mode, workspaces 2025-05-18 15:19:07 +02:00
mr. m
c95f0fce88
Merge pull request #8384 from JosueGalRe/bugfix/mods-page-empty-on-invalid-preferences
bugfix(mods): add file download retry and try catchs to fallback on f…
2025-05-18 15:19:05 +02:00
Bryan Galdámez
2abd23b344 bugfix(mods): add file download retry and try catchs to fallback 2025-05-18 06:55:42 -06:00
mr. m
ccb1bc521c
fix: Fixed single toolbar mode having labels on buttons, b=(no-bug), c=common, tabs 2025-05-18 14:43:11 +02:00
mr. m
26163c62da
fix: Fixed background tab toast showing when not hiding the sidebar, b=(no-bug), c=compact-mode 2025-05-18 14:22:05 +02:00
mr. m
8818d45d05
fix: Fixed all tabs button not having text, b=(no-bug), c=tabs 2025-05-18 13:50:41 +02:00
Mr. M
46941fe25a
fix: Fixed opening a new link in split view while having glance, b=(no-bug), c=split-view 2025-05-18 12:42:57 +02:00
Mr. M
44ffc842d3
chore: Update firefox version on the README, b=(no-bug), c=no-component 2025-05-18 12:31:47 +02:00
Mr. M
4641b8b590
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-18 12:29:42 +02:00
Mr. M
148a5eebc2
fix: Improved workspace icons generation, b=(no-bug), c=common, mods, workspaces 2025-05-18 12:29:26 +02:00
mr. m
523c1fadbc
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-18 12:22:47 +02:00
mr. m
820652bd5e
feat: Added support for swiping when scrolling on workspaces, b=(no-bug), c=workspaces 2025-05-18 12:22:11 +02:00
Mr. M
246e3b25a4
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-18 11:27:06 +02:00
Mr. M
fe0e5a9101
feat: Apply padding top when animating elements, b=(no-bug), c=workspaces 2025-05-18 11:26:59 +02:00
mr. m
d9a6bb5b2d
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-18 11:26:05 +02:00
mr. m
c9f632c1b8
fix: Small fixes for workspaces icons, b=(no-bug), c=common, tabs, workspaces 2025-05-18 11:26:00 +02:00
Mr. M
ab69ab8f80
chore: Updated firefox 138.0.4, b=(no-bug), c=no-component 2025-05-18 11:04:58 +02:00
Mr. M
297a95986c
fix: Fixed scrolling issues with workspaces, b=(no-bug), c=tabs, common, compact-mode, media, workspaces 2025-05-18 10:53:14 +02:00
Mr. M
7c1bdbfa68
fix: Fixed rearranging tabs from pinned to normal, b=(no-bug), c=workspaces 2025-05-17 23:29:25 +02:00
Mr. M
e712e8204d
test: Updated tests to the new names, b=(no-bug), c=tests, glance, workspaces, common 2025-05-17 14:12:43 +02:00
Mr. M
8e28e1a630
fix: Fixed reordering tabs and adding new essentials when the limit is reached, b=(no-bug), c=tabs 2025-05-17 00:28:38 +02:00
Mr. M
6d1742761c
fix: Fixed menu popups having an invisible background and color, b=(closes #7430), c=common 2025-05-17 00:17:22 +02:00
Mr. M
1c84a32a3c
fix: Fixed pinned tabs reordering on twilight, b=(no-bug), c=tabs, workspaces 2025-05-16 20:12:39 +02:00
mr. m
b07824489b
fix: Fixed workspaces import, b=(no-bug), c=no-component 2025-05-16 12:16:38 +02:00
mr. m
619a8d39be
Merge pull request #8346 from zen-browser/ultimate-sidebar-revamp 2025-05-16 08:43:39 +02:00
mr. m
9b8195d666
Update src/browser/base/content/zen-sidebar-icons.inc.xhtml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-16 01:22:45 +02:00
Mr. M
22d04ad729
chore: Changed ZenWorkspaces to gZenWorkspaces, b=(no-bug), c=tabs, common, folders, glance, media, tests, welcome, workspaces 2025-05-16 01:17:11 +02:00
Mr. M
bac3e38318
feat: Re-implemented workspace icons, b=(no-bug), c=common, tabs, workspaces 2025-05-15 23:36:10 +02:00
Mr. M
1d8e0fc3d7
feat: Revamped the sidebar for complete stability over future releases, b=(no-bug), c=common, tabs, workspaces 2025-05-15 21:25:54 +02:00
mr. m
086d1633df
Merge pull request #8340 from SO9010/Fix-#7609
Fix #7609 by changing to orange when white.
2025-05-15 13:45:30 +02:00
Samuel Oldham
b260942e22 Fix #7609 by changing to orange when white. 2025-05-15 12:24:58 +00:00
mr. m
d7bf8b24fd
fix: Try to fix alignment issues for audio icons, b=(no-bug), c=tabs 2025-05-15 00:35:55 +02:00
Mr. M
0ded78eb06
fix: Fixed all tabs button appearing on the sidebar, b=(no-bug), c=common, tabs 2025-05-14 16:10:28 +02:00
mr. m
c2d484a725
fix: Fixed a bunch of small styling issues, b=(no-bug), c=common, compact-mode 2025-05-14 15:49:44 +02:00
mr. m
7ca3a9e377
Create funding-manifest-urls
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 12:45:40 +02:00
Mr. M
2bd548fe41 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-14 08:45:15 +02:00
mr. m
d9d3076e2e
Merge pull request #8300 from zen-browser/revert-8286-alert-autofix-9
Revert "Potential fix for code scanning alert no. 9: Workflow does not contain permissions"
2025-05-14 10:42:54 +02:00
mr. m
b8254fdd36
Revert "Potential fix for code scanning alert no. 9: Workflow does not contain permissions" 2025-05-14 10:42:46 +02:00
mr. m
562274a161
Merge pull request #8299 from zen-browser/revert-8282-alert-autofix-16
Revert "Potential fix for code scanning alert no. 16: Workflow does not contain permissions"
2025-05-14 10:41:33 +02:00
mr. m
19f96241e5
Merge pull request #8298 from zen-browser/revert-8291-alert-autofix-11
Revert "Potential fix for code scanning alert no. 11: Workflow does not contain permissions"
2025-05-14 10:41:25 +02:00
mr. m
d735a1fa91
Merge pull request #8297 from zen-browser/revert-8293-alert-autofix-20
Revert "Potential fix for code scanning alert no. 20: Workflow does not contain permissions"
2025-05-14 10:41:21 +02:00
mr. m
40baf2627c
Revert "Potential fix for code scanning alert no. 16: Workflow does not contain permissions" 2025-05-14 10:41:14 +02:00
mr. m
5880636b3a
Revert "Potential fix for code scanning alert no. 20: Workflow does not contain permissions" 2025-05-14 10:41:11 +02:00
mr. m
531f569f3a
Revert "Potential fix for code scanning alert no. 11: Workflow does not contain permissions" 2025-05-14 10:41:06 +02:00
mr. m
00fcd74552
Merge pull request #8296 from zen-browser/revert-8294-alert-autofix-6
Revert "Potential fix for code scanning alert no. 6: Workflow does not contain permissions"
2025-05-14 10:39:35 +02:00
mr. m
f594a0b5c0
Revert "Potential fix for code scanning alert no. 6: Workflow does not contain permissions" 2025-05-14 10:39:27 +02:00
mr. m
94779133ec
Merge pull request #8295 from zen-browser/revert-8285-alert-autofix-13
Revert "Potential fix for code scanning alert no. 13: Workflow does not contain permissions"
2025-05-14 10:37:33 +02:00
mr. m
a2b1b38e0c
Revert "Potential fix for code scanning alert no. 13: Workflow does not contain permissions" 2025-05-14 10:37:24 +02:00
mr. m
cd3823f180
Merge pull request #8294 from zen-browser/alert-autofix-6
Potential fix for code scanning alert no. 6: Workflow does not contain permissions
2025-05-14 10:31:15 +02:00
mr. m
8451a71af7
Potential fix for code scanning alert no. 6: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:31:08 +02:00
mr. m
455a2c005b
Merge pull request #8293 from zen-browser/alert-autofix-20
Potential fix for code scanning alert no. 20: Workflow does not contain permissions
2025-05-14 10:29:04 +02:00
mr. m
4ad29e0ca5
Potential fix for code scanning alert no. 20: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:28:57 +02:00
mr. m
52b19fc137
Merge pull request #8292 from zen-browser/alert-autofix-8
Potential fix for code scanning alert no. 8: Workflow does not contain permissions
2025-05-14 10:26:48 +02:00
mr. m
7958417f96
Merge pull request #8291 from zen-browser/alert-autofix-11
Potential fix for code scanning alert no. 11: Workflow does not contain permissions
2025-05-14 10:26:30 +02:00
mr. m
744618ac25
Potential fix for code scanning alert no. 8: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:26:26 +02:00
mr. m
07296f19a6
Potential fix for code scanning alert no. 11: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:26:23 +02:00
mr. m
db271db087
Merge pull request #8287 from zen-browser/alert-autofix-5
Potential fix for code scanning alert no. 5: Workflow does not contain permissions
2025-05-14 10:25:37 +02:00
mr. m
d30a24e768
Merge pull request #8289 from zen-browser/alert-autofix-1
Potential fix for code scanning alert no. 1: Workflow does not contain permissions
2025-05-14 10:25:00 +02:00
mr. m
2b359ea451
Merge pull request #8288 from zen-browser/alert-autofix-2
Potential fix for code scanning alert no. 2: Workflow does not contain permissions
2025-05-14 10:24:53 +02:00
mr. m
8af3faea16
Merge pull request #8290 from zen-browser/alert-autofix-12
Potential fix for code scanning alert no. 12: Workflow does not contain permissions
2025-05-14 10:24:31 +02:00
mr. m
0c5716fb81
Merge pull request #8286 from zen-browser/alert-autofix-9
Potential fix for code scanning alert no. 9: Workflow does not contain permissions
2025-05-14 10:20:15 +02:00
mr. m
d19a484cb0
Potential fix for code scanning alert no. 12: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:19:55 +02:00
mr. m
38bf9bebc8
Merge pull request #8285 from zen-browser/alert-autofix-13
Potential fix for code scanning alert no. 13: Workflow does not contain permissions
2025-05-14 10:19:47 +02:00
mr. m
d79b89f79b
Merge pull request #8284 from zen-browser/alert-autofix-14
Potential fix for code scanning alert no. 14: Workflow does not contain permissions
2025-05-14 10:19:23 +02:00
mr. m
7855d657fd
Merge pull request #8283 from zen-browser/alert-autofix-15
Potential fix for code scanning alert no. 15: Workflow does not contain permissions
2025-05-14 10:19:16 +02:00
mr. m
67a52ae02c
Potential fix for code scanning alert no. 1: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:18:37 +02:00
mr. m
4b14c1e2f8
Potential fix for code scanning alert no. 2: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:18:35 +02:00
mr. m
fc908f9d4a
Potential fix for code scanning alert no. 5: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:18:30 +02:00
mr. m
77bc3ced5d
Potential fix for code scanning alert no. 9: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:18:25 +02:00
mr. m
34dc835631
Potential fix for code scanning alert no. 13: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:18:15 +02:00
mr. m
81b279be5f
Potential fix for code scanning alert no. 14: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:18:13 +02:00
mr. m
828c7bea19
Potential fix for code scanning alert no. 15: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:18:12 +02:00
mr. m
b4a49636d7
Merge pull request #8282 from zen-browser/alert-autofix-16
Potential fix for code scanning alert no. 16: Workflow does not contain permissions
2025-05-14 10:17:45 +02:00
mr. m
1caa6d9aa5
Potential fix for code scanning alert no. 16: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:17:24 +02:00
mr. m
ecc6df3301
Merge pull request #8281 from zen-browser/alert-autofix-17
Potential fix for code scanning alert no. 17: Overly permissive regular expression range
2025-05-14 10:17:11 +02:00
mr. m
0310e89c39
Potential fix for code scanning alert no. 17: Overly permissive regular expression range
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:16:59 +02:00
mr. m
252af87d9b
Merge pull request #8280 from zen-browser/alert-autofix-19
Potential fix for code scanning alert no. 19: Overly permissive regular expression range
2025-05-14 10:16:48 +02:00
mr. m
6732a69c2b
Potential fix for code scanning alert no. 19: Overly permissive regular expression range
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:16:36 +02:00
mr. m
3868f8e30f
Merge pull request #8279 from zen-browser/alert-autofix-18
Potential fix for code scanning alert no. 18: Overly permissive regular expression range
2025-05-14 10:14:55 +02:00
mr. m
937408f3f6
Potential fix for code scanning alert no. 18: Overly permissive regular expression range
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:14:16 +02:00
mr. m
e53a95e297
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-14 10:13:05 +02:00
mr. m
b74153290b
chore: Remove remaining bits from zen rices, b=(no-bug), c=workspaces 2025-05-14 10:12:51 +02:00
mr. m
0021c3522f
Added security instructions for new reports
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-14 10:03:06 +02:00
Mr. M
367ad74fba chore: Use npm for surfer CI windows signing, b=(no-bug), c=no-component 2025-05-14 08:45:07 +02:00
Mr. M
0abf17cb6b
fix: Fixed an issue with opening bookmarks with different containers, b=(no-bug), c=common 2025-05-13 20:00:31 +02:00
mr. m
be76e751e7
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-13 19:43:11 +02:00
mr. m
f8a893e6de
fix: Small fixes for toast notifications, b=(no-bug), c=common 2025-05-13 19:43:00 +02:00
Mr. M
89dfc86bfb
fix: Fixed missaligment on mute/unmute icon, b=(no-bug), c=tabs 2025-05-13 17:33:07 +02:00
Mr. M
bc894f8beb
style: Improved URL bar styles, b=(no-bug), c=common 2025-05-13 17:00:58 +02:00
Mr. M
20120ecf27
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-13 16:35:38 +02:00
Mr. M
a9c344d385
fix: Fixed background tabs opening when a tab is created by an addon, b=(no-bug), c=tabs, common, compact-mode 2025-05-13 16:35:24 +02:00
mr. m
3cbfae7a8f
fix: Fixed macos close buttons being misaligned on collapsed sidebar, b=(closes #7129), c=tabs 2025-05-13 16:12:15 +02:00
Mr. M
90876532b9
fix: Fixed the download animation appearing on all the windows, b=(closes #8247), c=no-component 2025-05-13 16:07:24 +02:00
Mr. M
641d4d0f87
chore: Updated to firefox 138.0.3, b=(no-bug), c=scripts, common 2025-05-13 15:58:39 +02:00
mr. m
7c12ad72b8
Merge pull request #8266 from zen-browser/haptic-feedback 2025-05-13 13:39:54 +02:00
Mr. M
66e0dde1ed
fix: Make sure to remove the stylesheets before removing the file, b=(no-bug), c=mods 2025-05-13 13:38:47 +02:00
mr. m
5a4877a141
chore: Minor changes before merge of haptic feedback, b=(no-bug), c=workspaces 2025-05-13 13:37:36 +02:00
mr. m
f9b0f8c436
feat: Finished haptic feedback support, b=(no-bug), c=common, tabs, workspaces 2025-05-13 13:31:03 +02:00
Mr. M
6552ec5f02
test: Added tests for closing glance, b=(no-bug), c=glance, tests 2025-05-13 12:00:39 +02:00
Mr. M
337b1aec53
fix: Fixed top toolbar staying at the top when clicking on the urlbar, b=(no-bug), c=compact-mode 2025-05-13 11:31:07 +02:00
mr. m
33fff9e19b
Merge branch 'haptic-feedback' of https://github.com/zen-browser/desktop into haptic-feedback 2025-05-13 10:40:48 +02:00
Mr. M
2cdaf4850d
feat: Compile the function even if we are not on mac, b=(no-bug), c=common 2025-05-13 10:40:41 +02:00
mr. m
561da4b6ef
chore: Format, b=(no-bug), c=common 2025-05-13 10:39:47 +02:00
Mr. M
3a8767ea5f
fix: Fixed windows API build, b=(no-bug), c=tabs, common 2025-05-13 10:37:36 +02:00
Mr. M
4947b4c9a3
feat: Addded haptic feedback support, b=(no-bug), c=common 2025-05-13 10:33:24 +02:00
mr. m
0f140b706e
Merge pull request #8265 from kritishd8/dev
Added workspace color bg to search mode indicators
2025-05-13 09:59:48 +02:00
Obscure.
b4812e8182
Added workspace color bg to search mode indicators
Signed-off-by: Obscure. <69711181+kritishd8@users.noreply.github.com>
2025-05-13 08:29:19 +05:45
mr. m
7d94cad876
Merge pull request #8243 from zen-browser/new-share-api
New share API and implementation
2025-05-13 02:55:26 +02:00
mr. m
866e6987a2
feat: Added last details, b=(no-bug), c=common 2025-05-13 02:54:59 +02:00
Mr. M
524f34a461
chore: Bump version, b=(no-bug), c=no-component 2025-05-13 01:11:57 +02:00
Mr. M
949d93d546
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-13 01:10:23 +02:00
Mr. M
bd638022df
test: Added tests for glance, b=(no-bug), c=tabs, glance, tests 2025-05-13 01:10:18 +02:00
mr. m
26e6d704f5
Merge pull request #8261 from SO9010/Fix-#7910 2025-05-13 00:31:48 +02:00
mr. m
1be8b20b64
Make use of lazy preferences
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-13 00:31:17 +02:00
Samuel Oldham
c8150ccdcc
Fix for #7910
This fixes #7910 by adding a conditional check for whether the sidebar is on the right and adjusting the CSS accordingly. 

Signed-off-by: Samuel Oldham <77629938+SO9010@users.noreply.github.com>
2025-05-12 23:26:16 +01:00
Mr. M
77bac52b07 fix: Completed windows API, b=(no-bug), c=no-component 2025-05-13 00:23:33 +02:00
Mr. M
fdb71c6b0e
feat: Make sure switching woprkspaces from browsers always selects the tab first, b=(no-bug), c=common, workspaces 2025-05-12 22:48:09 +02:00
Mr. M
ffea12305d
fix: Fixed urlbar shifting when focusing on it, b=(no-bug), c=common 2025-05-12 22:30:57 +02:00
Mr. M
e90f20e1d4
fix: Fixed search engine suggestions being half the height, b=(closes #8258), c=welcome 2025-05-12 21:59:35 +02:00
mr. m
fea0e9b864
Merge pull request #8256 from SO9010/Fix-#7810 2025-05-12 18:04:15 +02:00
mr. m
7a7fb01928
Merge branch 'dev' into Fix-#7810 2025-05-12 18:04:01 +02:00
mr. m
d4575841df
Merge pull request #8253 from SO9010/Fix-#7701 2025-05-12 18:03:11 +02:00
Samuel Oldham
d7e634fcfd
Undo change to firefox-js.patch
Signed-off-by: Samuel Oldham <77629938+SO9010@users.noreply.github.com>
2025-05-12 15:53:46 +00:00
Samuel Oldham
b1e3df783d
Update disablemozilla.inc to remove firefox mobile app advert
Signed-off-by: Samuel Oldham <77629938+SO9010@users.noreply.github.com>
2025-05-12 15:50:42 +00:00
mr. m
80dfcf5eaa
Merge branch 'dev' into Fix-#7701 2025-05-12 17:45:40 +02:00
Mr. M
c0d66ee649
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-12 17:13:21 +02:00
Mr. M
93e8f6bbd6
fix: Did common fixes for mods, b=(no-bug), c=mods 2025-05-12 17:13:15 +02:00
Samuel Oldham
cdbdaac913
Fix #7701 complete
Added the lock to the pref section.

Signed-off-by: Samuel Oldham <77629938+SO9010@users.noreply.github.com>
2025-05-12 15:12:11 +00:00
Samuel Oldham
9bec7a88fe
Lint
Signed-off-by: Samuel Oldham <77629938+SO9010@users.noreply.github.com>
2025-05-12 15:53:21 +01:00
Samuel Oldham
50342e945d
Add fix for #7810
Signed-off-by: Samuel Oldham <77629938+SO9010@users.noreply.github.com>
2025-05-12 15:35:49 +01:00
Samuel Oldham
c087493f38
Set browser.contentblocking.report.show_mobile_app to false
Signed-off-by: Samuel Oldham <77629938+SO9010@users.noreply.github.com>
2025-05-12 14:31:36 +00:00
Samuel Oldham
df3c554f27
Delete src/browser/components/protections directory
Signed-off-by: Samuel Oldham <77629938+SO9010@users.noreply.github.com>
2025-05-12 14:26:56 +00:00
Samuel Oldham
e81994a748
Add patch fix #7701
This fixes this issue by just setting it to removed in the preferences automatically, meaning that the users will never see it. This made more sense than having it rewritten just for this page. But if we think linking to Firefox mobile here is necessary, please let me know.

Signed-off-by: Samuel Oldham <77629938+SO9010@users.noreply.github.com>
2025-05-12 14:03:11 +01:00
mr. m
0d1d75588d
fix: Fixed gradient having wrong percentages, b=(no-bug), c=workspaces 2025-05-12 13:36:06 +02:00
mr. m
5ddedbbd50
Disable acrylic pref for now
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-05-12 00:14:21 -07:00
Mr. M
fcc823c33a
feat: Add experimental acrylic components for linux and windows, b=(no-bug), c=common, compact-mode, workspaces 2025-05-12 00:52:56 +02:00
225 changed files with 4633 additions and 3932 deletions

View file

@ -5,6 +5,9 @@ on:
- cron: '59 4 * * 2' - cron: '59 4 * * 2'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
check_candidates: check_candidates:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View file

@ -10,6 +10,9 @@ on:
branches: branches:
- dev - dev
permissions:
contents: read
jobs: jobs:
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View file

@ -1,4 +1,7 @@
name: Monthly issue metrics name: Monthly issue metrics
permissions:
contents: write
issues: read
on: on:
workflow_dispatch: workflow_dispatch:
schedule: schedule:

View file

@ -1,4 +1,6 @@
name: macOS Release Build name: macOS Release Build
permissions:
contents: read
on: on:
workflow_call: workflow_call:

View file

@ -1,4 +1,6 @@
name: Pull request test name: Pull request test
permissions:
contents: read
on: on:
pull_request: pull_request:

View file

@ -1,5 +1,8 @@
name: Windows PGO Builds name: Windows PGO Builds
permissions:
contents: read
on: on:
workflow_call: workflow_call:
inputs: inputs:

View file

@ -1,5 +1,8 @@
name: Windows Release Build name: Windows Release Build
permissions:
contents: read
on: on:
workflow_call: workflow_call:
inputs: inputs:

View file

@ -9,6 +9,8 @@ engine/
**/*.svg **/*.svg
**/*.inc.css
surfer.json surfer.json
src/browser/app/profile/*.js src/browser/app/profile/*.js
@ -26,4 +28,6 @@ src/zen/tabs/zen-tabs.css
src/zen/compact-mode/zen-compact-mode.css src/zen/compact-mode/zen-compact-mode.css
src/zen/common/ZenEmojies.mjs src/zen/common/ZenEmojies.mjs
src/zen/workspaces/zen-workspaces.css
*.inc *.inc

31
.vscode/settings.json vendored
View file

@ -1,31 +0,0 @@
{
"files.associations": {
"*.inc": "cpp",
"typeindex": "cpp",
"typeinfo": "cpp",
"functional": "cpp",
"array": "cpp",
"*.tcc": "cpp",
"memory": "cpp",
"future": "cpp",
"istream": "cpp",
"tuple": "cpp",
"utility": "cpp",
"variant": "cpp",
"compare": "cpp",
"thread": "cpp",
"string": "cpp",
"string_view": "cpp",
"span": "cpp",
"vector": "cpp",
"charconv": "cpp",
"chrono": "cpp",
"optional": "cpp",
"format": "cpp",
"ratio": "cpp",
"system_error": "cpp",
"regex": "cpp",
"type_traits": "cpp"
},
"git.ignoreLimitWarning": true
}

View file

@ -0,0 +1 @@
https://zen-browser.app/funding.json

View file

@ -1,3 +1,4 @@
<!-- TODO: Get a job -->
<img src="./docs/assets/zen-dark.svg" width="100px" align="left"> <img src="./docs/assets/zen-dark.svg" width="100px" align="left">
### `Zen Browser` ### `Zen Browser`
@ -28,9 +29,9 @@
## 🖥️ Compatibility ## 🖥️ Compatibility
Zen is currently built using Firefox version `138.0.1`! 🚀 Zen is currently built using Firefox version `139.0`! 🚀
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 138.0.1`! - [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 139.0`!
- Check out the latest [release notes](https://zen-browser.app/release-notes)! - Check out the latest [release notes](https://zen-browser.app/release-notes)!
- Part of our mission is to keep Zen up-to-date with the latest version of Firefox, so you can enjoy the latest features and security updates! - Part of our mission is to keep Zen up-to-date with the latest version of Firefox, so you can enjoy the latest features and security updates!

5
SECURITY.md Normal file
View file

@ -0,0 +1,5 @@
# Security Policy
## Reporting a Vulnerability
Please report security vulnerabilities [here](https://github.com/zen-browser/desktop/security/advisories/new)

View file

@ -1 +1 @@
8113a66aeeec42dca9739c7b742a3408cb5b7cf7 da30619f3ea895b356ded705b8dff9e4f271198f

View file

@ -30,8 +30,8 @@ Start-Job -Name "DownloadGitl10n" -ScriptBlock {
Start-Job -Name "SurferInit" -ScriptBlock { Start-Job -Name "SurferInit" -ScriptBlock {
param($PWD) param($PWD)
cd $PWD cd $PWD
surfer -- ci --brand release
npm run import -- --verbose npm run import -- --verbose
npm run surfer -- ci --brand release
} -Verbose -ArgumentList $PWD -Debug } -Verbose -ArgumentList $PWD -Debug
echo "Downloading artifacts info" echo "Downloading artifacts info"

2
l10n

@ -1 +1 @@
Subproject commit 102a19cdee3cee5e6f963902f1546e61a0283954 Subproject commit ebecb32da8929e4f14f9a20f40acb9dab401101c

8
package-lock.json generated
View file

@ -9,7 +9,7 @@
"version": "1.0.0", "version": "1.0.0",
"license": "MPL-2.0", "license": "MPL-2.0",
"dependencies": { "dependencies": {
"@zen-browser/surfer": "^1.11.12" "@zen-browser/surfer": "^1.11.13"
}, },
"devDependencies": { "devDependencies": {
"@babel/preset-typescript": "^7.27.0", "@babel/preset-typescript": "^7.27.0",
@ -817,9 +817,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@zen-browser/surfer": { "node_modules/@zen-browser/surfer": {
"version": "1.11.12", "version": "1.11.13",
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.11.12.tgz", "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.11.13.tgz",
"integrity": "sha512-wny52xOFvZe5aPXxLVxEcAzDNEiWWoDiCZFlzsNxkyQ5Lw6vzqroMWpjQPJwBRJOc/JssgiXMdd1uwl2LLnovQ==", "integrity": "sha512-D0TyunAWYtTdJkuUkYeOc6VBXzE9aoDs58kWu/Oi/aU3vd8IbqXPbZZfYwj5FWPWDReMrJUNkkKAEdbL44y9aw==",
"license": "MPL-2.0", "license": "MPL-2.0",
"dependencies": { "dependencies": {
"@resvg/resvg-js": "^1.4.0", "@resvg/resvg-js": "^1.4.0",

View file

@ -8,7 +8,7 @@
"scripts": { "scripts": {
"build": "surfer build", "build": "surfer build",
"build:ui": "surfer build --ui", "build:ui": "surfer build --ui",
"start": "cd engine && ./mach run --noprofile --marionette", "start": "cd engine && ./mach run --noprofile",
"import": "surfer import", "import": "surfer import",
"export": "surfer export", "export": "surfer export",
"init": "npm run download && npm run bootstrap && npm run import", "init": "npm run download && npm run bootstrap && npm run import",
@ -23,7 +23,9 @@
"lint": "npx prettier . --check && autopep8 --diff scripts/ src/", "lint": "npx prettier . --check && autopep8 --diff scripts/ src/",
"prepare": "husky", "prepare": "husky",
"reset-ff": "surfer reset", "reset-ff": "surfer reset",
"surfer": "surfer" "surfer": "surfer",
"test": "python3 scripts/run_tests.py",
"test:dbg": "python3 scripts/run_tests.py --jsdebugger --debug-on-failure"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -40,7 +42,7 @@
}, },
"homepage": "https://github.com/zen-browser/desktop#readme", "homepage": "https://github.com/zen-browser/desktop#readme",
"dependencies": { "dependencies": {
"@zen-browser/surfer": "^1.11.12" "@zen-browser/surfer": "^1.11.13"
}, },
"devDependencies": { "devDependencies": {
"@babel/preset-typescript": "^7.27.0", "@babel/preset-typescript": "^7.27.0",

View file

@ -38,7 +38,7 @@ def get_rc_response() -> Optional[str]:
for tag_dict in data["tags"]: for tag_dict in data["tags"]:
tag = tag_dict["tag"] tag = tag_dict["tag"]
if (tag.startswith("FIREFOX") and tag.endswith("_BUILD1") if (tag.startswith("FIREFOX") and tag.endswith("_BUILD1")
and "ESR" not in tag and "b" not in tag): and "ESR" not in tag and "b" not in tag and "ANDROID" not in tag):
return (tag.replace("FIREFOX_", "").replace("_BUILD1", return (tag.replace("FIREFOX_", "").replace("_BUILD1",
"").replace("_", ".")) "").replace("_", "."))
except (FileNotFoundError, json.JSONDecodeError) as e: except (FileNotFoundError, json.JSONDecodeError) as e:

45
scripts/run_tests.py Normal file
View file

@ -0,0 +1,45 @@
import os
import sys
import subprocess
from pathlib import Path
def main():
project_root = Path(__file__).resolve().parent.parent
package_json = project_root / 'package.json'
# Ensure script is run from project root
if not package_json.exists():
print("Please run this script from the root of the project", file=sys.stderr)
sys.exit(1)
args = sys.argv[1:]
path = ""
for arg in args:
if not arg.startswith("--"):
path = arg
break
# Collect any additional arguments
other_args = [arg for arg in args if arg != path]
engine_dir = project_root / 'engine'
os.chdir(engine_dir)
def run_mach_with_paths(test_paths):
command = ['./mach', 'mochitest'] + other_args + test_paths
subprocess.run(command, check=True)
if path in ("", "all"):
test_dirs = [p for p in Path("zen/tests").iterdir() if p.is_dir()]
test_paths = [str(p) for p in test_dirs]
run_mach_with_paths(test_paths)
else:
run_mach_with_paths([f"zen/tests/{path}"])
# Return to original directory
os.chdir(project_root)
if __name__ == "__main__":
main()

View file

@ -1,8 +1,8 @@
diff --git a/Cargo.lock b/Cargo.lock diff --git a/Cargo.lock b/Cargo.lock
index 38508fffccbce801a02d4a4211f368674307c4d3..5ce56c36da2e242ad81621c2032eb68dcd26e960 100644 index f7ebed9b2a71da90c5751cfd5d5f018cc8b73612..96e881c7782198f1e58be2578f167c7079a8191e 100644
--- a/Cargo.lock --- a/Cargo.lock
+++ b/Cargo.lock +++ b/Cargo.lock
@@ -3931,8 +3931,6 @@ dependencies = [ @@ -4014,8 +4014,6 @@ dependencies = [
[[package]] [[package]]
name = "mime_guess" name = "mime_guess"
version = "2.0.4" version = "2.0.4"

View file

@ -1,8 +1,8 @@
diff --git a/Cargo.toml b/Cargo.toml diff --git a/Cargo.toml b/Cargo.toml
index d3d529b487f80d4b4f3bfa13cdd3f62946352db8..b35a9e0e3339d48d1cd0cab7b22d030f330e40d1 100644 index 8c6b99bc629ec26e01ab3746f2ae46174bfaa0b1..5791c7470923c7c15986089b40357ce80365e942 100644
--- a/Cargo.toml --- a/Cargo.toml
+++ b/Cargo.toml +++ b/Cargo.toml
@@ -217,6 +217,9 @@ rure = { path = "third_party/rust/rure" } @@ -233,6 +233,9 @@ rure = { path = "third_party/rust/rure" }
# Patch `plist` to work with `indexmap` 2.* # Patch `plist` to work with `indexmap` 2.*
plist = { path = "third_party/rust/plist" } plist = { path = "third_party/rust/plist" }

View file

@ -1,5 +1,5 @@
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
index 40e3a057a1d4b2f9bcfb73fa5ff96b2555865434..a92bed06766dd930bd336d56cd9ddcf3c6c0eeca 100644 index 4ed2dd19207fc38b9e5cc22ea2947aba94b2f5ad..ffc88d62dc46683399c68cdfd35f1b1efde70902 100644
--- a/browser/actors/WebRTCParent.sys.mjs --- a/browser/actors/WebRTCParent.sys.mjs
+++ b/browser/actors/WebRTCParent.sys.mjs +++ b/browser/actors/WebRTCParent.sys.mjs
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent { @@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {

View file

@ -9,10 +9,14 @@ pref("browser.tabs.closeWindowWithLastTab", false);
pref("browser.tabs.loadBookmarksInTabs", false); pref("browser.tabs.loadBookmarksInTabs", false);
pref("browser.tabs.hoverPreview.enabled", false); pref("browser.tabs.hoverPreview.enabled", false);
pref("browser.tabs.dragdrop.moveOverThresholdPercent", 50); pref("browser.tabs.dragdrop.moveOverThresholdPercent", 50);
pref("browser.tabs.unloadTabInContextMenu", true);
pref("browser.tabs.fadeOutExplicitlyUnloadedTabs", true);
pref('browser.toolbars.bookmarks.visibility', 'never'); pref('browser.toolbars.bookmarks.visibility', 'never');
pref("browser.bookmarks.openInTabClosesMenu", false); pref("browser.bookmarks.openInTabClosesMenu", false);
pref("browser.menu.showViewImageInfo", true); pref("browser.menu.showViewImageInfo", true);
pref("findbar.highlightAll", true); pref("findbar.highlightAll", true);
pref("layout.word_select.eat_space_to_next_word", false); pref("layout.word_select.eat_space_to_next_word", false);
// Better Windows theming // Better Windows theming

View file

@ -8,3 +8,4 @@ pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false); pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
pref("browser.preferences.moreFromMozilla", false, locked); pref("browser.preferences.moreFromMozilla", false, locked);
pref("browser.aboutwelcome.enabled", false); pref("browser.aboutwelcome.enabled", false);
pref("browser.contentblocking.report.show_mobile_app", false, locked);

View file

@ -19,13 +19,20 @@ pref('zen.view.show-newtab-button-top', true);
pref('zen.mediacontrols.enabled', true); pref('zen.mediacontrols.enabled', true);
// Exposure:
pref('zen.haptic-feedback.enabled', true);
pref('zen.mods.auto-update-days', 20); // In days
#ifdef MOZILLA_OFFICIAL #ifdef MOZILLA_OFFICIAL
pref('zen.mods.auto-update', true);
pref('zen.rice.api.url', 'https://share.zen-browser.app', locked); pref('zen.rice.api.url', 'https://share.zen-browser.app', locked);
pref('zen.injections.match-urls', 'https://zen-browser.app/*,https://share.zen-browser.app/*', locked); pref('zen.injections.match-urls', 'https://zen-browser.app/*,https://share.zen-browser.app/*', locked);
#else #else
pref('zen.mods.auto-update', false);
pref('zen.rice.api.url', "http://localhost", locked); pref('zen.rice.api.url', "http://localhost", locked);
pref('zen.injections.match-urls', 'http://localhost/*', locked); pref('zen.injections.match-urls', 'http://localhost/*', locked);
#endif #endif
pref('zen.rice.share.notice.accepted', false); pref('zen.rice.share.notice.accepted', false);
#ifdef XP_MACOSX #ifdef XP_MACOSX
@ -34,6 +41,12 @@ pref('zen.theme.border-radius', 10); // In pixels
pref('zen.theme.border-radius', 8); // In pixels pref('zen.theme.border-radius', 8); // In pixels
#endif #endif
#ifdef XP_MACOSX
pref('zen.theme.acrylic-elements', false);
#else
pref('zen.theme.acrylic-elements', false);
#endif
pref('zen.theme.color-prefs.use-workspace-colors', true); pref('zen.theme.color-prefs.use-workspace-colors', true);
pref('zen.view.compact.hide-tabbar', true); pref('zen.view.compact.hide-tabbar', true);
@ -55,14 +68,6 @@ pref('zen.urlbar.show-domain-only-in-sidebar', true);
pref('zen.urlbar.hide-one-offs', true); pref('zen.urlbar.hide-one-offs', true);
pref('zen.urlbar.enable-overrides', false); pref('zen.urlbar.enable-overrides', false);
// Exoerimental: Apply a blend mode to the websites so they can render rounded corners
// IMPORTANT: Remove once firefox 139 is released
#ifdef XP_MACOSX
pref('zen.view.experimental-rounded-view', false);
#else
pref('zen.view.experimental-rounded-view', true);
#endif
// Glance // Glance
pref('zen.glance.enabled', true); pref('zen.glance.enabled', true);
pref('zen.glance.hold-duration', 300); // in ms pref('zen.glance.hold-duration', 300); // in ms
@ -90,18 +95,12 @@ pref('zen.view.grey-out-inactive-windows', true);
pref('zen.view.hide-window-controls', true); pref('zen.view.hide-window-controls', true);
pref('zen.view.experimental-no-window-controls', false); pref('zen.view.experimental-no-window-controls', false);
pref('zen.tabs.dim-pending', true);
pref('zen.keyboard.shortcuts.enabled', true); pref('zen.keyboard.shortcuts.enabled', true);
pref('zen.keyboard.shortcuts.version', 0); // Empty string means default shortcuts pref('zen.keyboard.shortcuts.version', 0); // Empty string means default shortcuts
pref('zen.keyboard.shortcuts.disable-mainkeyset-clear', false); // for debugging pref('zen.keyboard.shortcuts.disable-mainkeyset-clear', false); // for debugging
pref('zen.themes.updated-value-observer', false); pref('zen.themes.updated-value-observer', false);
pref('zen.tab-unloader.enabled', true);
pref('zen.tab-unloader.timeout-minutes', 40);
pref('zen.tab-unloader.excluded-urls', "example.com,example.org");
pref('zen.pinned-tab-manager.debug', false); pref('zen.pinned-tab-manager.debug', false);
pref('zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url', false); pref('zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url', false);
pref('zen.pinned-tab-manager.close-shortcut-behavior', 'reset-unload-switch'); pref('zen.pinned-tab-manager.close-shortcut-behavior', 'reset-unload-switch');

View file

@ -1,8 +1,8 @@
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index 89b8b830e8f53582dd9910b0172098d31a8d8967..51bdc847823cb95f811b7e9d2d864b9aacf0e364 100644 index beced8067e6c8b5c8cf8e3f6060ba259ec9a294d..33a264e7f9cf97944da3888bdb957fa6e7c4c346 100644
--- a/browser/app/profile/firefox.js --- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js
@@ -3375,3 +3375,5 @@ pref("toolkit.contentRelevancy.enabled", false); @@ -3398,3 +3398,5 @@ pref("toolkit.contentRelevancy.enabled", false);
pref("toolkit.contentRelevancy.ingestEnabled", false); pref("toolkit.contentRelevancy.ingestEnabled", false);
// Pref to enable extra logging for the content relevancy feature // Pref to enable extra logging for the content relevancy feature
pref("toolkit.contentRelevancy.log", false); pref("toolkit.contentRelevancy.log", false);

View file

@ -12,6 +12,19 @@ pref("gfx.canvas.accelerated", true);
pref("media.hardware-video-decoding.enabled", true); pref("media.hardware-video-decoding.enabled", true);
pref("layers.gpu-process.enabled", true); pref("layers.gpu-process.enabled", true);
#ifdef XP_MACOSX
// Pref to control the reponse taken on macOS when the OS is under memory
// pressure. Changes to the pref take effect immediately. Browser restart not
// required. The pref value is a bitmask:
// 0x0: No response (other than recording for telemetry, crash reporting)
// 0x1: Use the tab unloading feature to reduce memory use. Requires that
// the above "browser.tabs.unloadOnLowMemory" pref be set to true for tab
// unloading to occur.
// 0x2: Issue the internal "memory-pressure" notification to reduce memory use
// 0x3: Both 0x1 and 0x2.
pref("browser.lowMemoryResponseMask", 3);
#endif
// Prefetching: // Prefetching:
pref("network.dns.disablePrefetch", false); pref("network.dns.disablePrefetch", false);
pref("network.prefetch-next", true); pref("network.prefetch-next", true);

View file

@ -1,5 +1,5 @@
diff --git a/browser/base/content/aboutDialog.js b/browser/base/content/aboutDialog.js diff --git a/browser/base/content/aboutDialog.js b/browser/base/content/aboutDialog.js
index f6e1391baf12abb91c85a95107bb3923118746c0..76c7b75a4e29056110f1631a50047c4ddd8b1f4a 100644 index f6e1391baf12abb91c85a95107bb3923118746c0..cac04aa288e8a305d0c8b28e0c919abce87658e5 100644
--- a/browser/base/content/aboutDialog.js --- a/browser/base/content/aboutDialog.js
+++ b/browser/base/content/aboutDialog.js +++ b/browser/base/content/aboutDialog.js
@@ -52,7 +52,7 @@ function init() { @@ -52,7 +52,7 @@ function init() {
@ -20,3 +20,18 @@ index f6e1391baf12abb91c85a95107bb3923118746c0..76c7b75a4e29056110f1631a50047c4d
versionIdKey += "-nightly"; versionIdKey += "-nightly";
let buildID = Services.appinfo.appBuildID; let buildID = Services.appinfo.appBuildID;
let year = buildID.slice(0, 4); let year = buildID.slice(0, 4);
@@ -125,14 +125,6 @@ function init() {
window.close();
});
if (AppConstants.MOZ_UPDATER) {
- document
- .getElementById("aboutDialogHelpLink")
- .addEventListener("click", () => {
- openHelpLink("firefox-help");
- });
- document
- .getElementById("submit-feedback")
- .addEventListener("click", openFeedbackPage);
document
.getElementById("checkForUpdatesButton")
.addEventListener("command", () => {

View file

@ -1,5 +1,5 @@
diff --git a/browser/base/content/aboutDialog.xhtml b/browser/base/content/aboutDialog.xhtml diff --git a/browser/base/content/aboutDialog.xhtml b/browser/base/content/aboutDialog.xhtml
index c64980810570fcea84e33fdc2d66ac42a79f4e46..b7198e810a7510fa82cc6801cfd01c88a08d42c1 100644 index c64980810570fcea84e33fdc2d66ac42a79f4e46..6ef9bf4b88f0a0539d833f662c4dd890fd1fde93 100644
--- a/browser/base/content/aboutDialog.xhtml --- a/browser/base/content/aboutDialog.xhtml
+++ b/browser/base/content/aboutDialog.xhtml +++ b/browser/base/content/aboutDialog.xhtml
@@ -35,6 +35,7 @@ @@ -35,6 +35,7 @@
@ -10,7 +10,18 @@ index c64980810570fcea84e33fdc2d66ac42a79f4e46..b7198e810a7510fa82cc6801cfd01c88
</linkset> </linkset>
<html:div id="aboutDialogContainer"> <html:div id="aboutDialogContainer">
@@ -125,21 +126,23 @@ @@ -102,10 +103,6 @@
<label id="version" class="update"/>
<label id="releasenotes" is="text-link" hidden="true" data-l10n-id="releaseNotes-link"/>
</hbox>
- <description class="text-blurb">
- <label id="aboutDialogHelpLink" is="text-link" data-l10n-id="aboutdialog-help-user"/>
- <label id="submit-feedback" is="text-link" data-l10n-id="aboutdialog-submit-feedback"/>
- </description>
</vbox>
#endif
</hbox>
@@ -125,21 +122,17 @@
</description> </description>
</vbox> </vbox>
<description class="text-blurb" id="communityDesc" data-l10n-id="community-2"> <description class="text-blurb" id="communityDesc" data-l10n-id="community-2">
@ -18,12 +29,10 @@ index c64980810570fcea84e33fdc2d66ac42a79f4e46..b7198e810a7510fa82cc6801cfd01c88
+ <label is="text-link" href="https://github.com/zen-browser/desktop" data-l10n-name="community-mozillaLink"/> + <label is="text-link" href="https://github.com/zen-browser/desktop" data-l10n-name="community-mozillaLink"/>
<label is="text-link" useoriginprincipal="true" href="about:credits" data-l10n-name="community-creditsLink"/> <label is="text-link" useoriginprincipal="true" href="about:credits" data-l10n-name="community-creditsLink"/>
</description> </description>
+#if 0 - <description class="text-blurb" id="contributeDesc" data-l10n-id="helpus">
<description class="text-blurb" id="contributeDesc" data-l10n-id="helpus"> - <label is="text-link" href="https://foundation.mozilla.org/?form=firefox-about" data-l10n-name="helpus-donateLink"/>
<label is="text-link" href="https://foundation.mozilla.org/?form=firefox-about" data-l10n-name="helpus-donateLink"/> - <label is="text-link" href="https://www.mozilla.org/contribute/?utm_source=firefox-browser&#38;utm_medium=firefox-desktop&#38;utm_campaign=about-dialog" data-l10n-name="helpus-getInvolvedLink"/>
<label is="text-link" href="https://www.mozilla.org/contribute/?utm_source=firefox-browser&#38;utm_medium=firefox-desktop&#38;utm_campaign=about-dialog" data-l10n-name="helpus-getInvolvedLink"/> - </description>
</description>
+#endif
</vbox> </vbox>
</vbox> </vbox>
</hbox> </hbox>

View file

@ -1,15 +0,0 @@
diff --git a/browser/base/content/appmenu-viewcache.inc.xhtml b/browser/base/content/appmenu-viewcache.inc.xhtml
index 3c5c4f29b1de25a4ce17089502f2251a27e5c7f5..dfa3260ed3c2bb6067745696fbf103c7e56c639a 100644
--- a/browser/base/content/appmenu-viewcache.inc.xhtml
+++ b/browser/base/content/appmenu-viewcache.inc.xhtml
@@ -421,6 +421,10 @@
class="subviewbutton"
data-l10n-id="appmenu-customizetoolbar"
command="cmd_CustomizeToolbars"/>
+ <toolbarbutton id="appmenu-zen-share-rice"
+ class="subviewbutton"
+ data-l10n-id="appmenu-zen-share-rice"
+ oncommand="gZenThemePicker.shareTheme()" />
<toolbarseparator/>
<html:h2 id="appmenu-developer-tools"
data-l10n-id="appmenu-developer-tools-subheader"

View file

@ -1,8 +1,35 @@
diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js
index 992d07daaef1abc4554a43aa654888f66963c575..73e620b70b7ed14e9d140e875c2cd5f5ac31456b 100644 index 73593191936cc345ee8e2c28cb251dc13f4c2fd4..e6c459c1ebc60a1f3930a55e212570f696bf07a0 100644
--- a/browser/base/content/browser-addons.js --- a/browser/base/content/browser-addons.js
+++ b/browser/base/content/browser-addons.js +++ b/browser/base/content/browser-addons.js
@@ -2105,18 +2105,20 @@ var gUnifiedExtensions = { @@ -735,7 +735,7 @@ var gXPInstallObserver = {
persistent: true,
hideClose: true,
popupOptions: {
- position: "bottomright topright",
+ position: gZenUIManager.panelUIPosition,
},
};
@@ -942,7 +942,7 @@ var gXPInstallObserver = {
hideClose: true,
timeout: Date.now() + 30000,
popupOptions: {
- position: "bottomright topright",
+ position: gZenUIManager.panelUIPosition,
},
};
@@ -2125,7 +2125,7 @@ var gUnifiedExtensions = {
panel.hidden = false;
PanelMultiView.openPopup(panel, this._button, {
- position: "bottomright topright",
+ position: gZenUIManager.panelUIPosition,
triggerEvent: aEvent,
});
}
@@ -2294,18 +2294,20 @@ var gUnifiedExtensions = {
this._maybeMoveWidgetNodeBack(widgetId); this._maybeMoveWidgetNodeBack(widgetId);
} }

View file

@ -1,13 +1,15 @@
diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml
index 7d7e8697f02f90d4f336c9ab0a73a89848e0c21c..d113b439888d26629ce5f6b5d35f8fa12249774b 100644 index 7d7e8697f02f90d4f336c9ab0a73a89848e0c21c..64e950106dd05b443ce72107613ac9cc405d56ea 100644
--- a/browser/base/content/browser-box.inc.xhtml --- a/browser/base/content/browser-box.inc.xhtml
+++ b/browser/base/content/browser-box.inc.xhtml +++ b/browser/base/content/browser-box.inc.xhtml
@@ -23,7 +23,13 @@ @@ -23,7 +23,15 @@
<browser id="sidebar" autoscroll="false" disablehistory="true" disablefullscreen="true" tooltip="aHTMLTooltip"/> <browser id="sidebar" autoscroll="false" disablehistory="true" disablefullscreen="true" tooltip="aHTMLTooltip"/>
</vbox> </vbox>
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/> <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
+<vbox flex="1" id="zen-appcontent-wrapper"> +<vbox flex="1" id="zen-appcontent-wrapper">
+ <html:div id="zen-appcontent-navbar-wrapper">
+ <html:div id="zen-appcontent-navbar-container"></html:div> + <html:div id="zen-appcontent-navbar-container"></html:div>
+ </html:div>
+ <hbox id="zen-tabbox-wrapper" flex="1"> + <hbox id="zen-tabbox-wrapper" flex="1">
<tabbox id="tabbrowser-tabbox" flex="1" tabcontainer="tabbrowser-tabs"> <tabbox id="tabbrowser-tabbox" flex="1" tabcontainer="tabbrowser-tabs">
+#include zen-tabbrowser-elements.inc.xhtml +#include zen-tabbrowser-elements.inc.xhtml

View file

@ -15,7 +15,7 @@ index 3d5173315812589c0b79beec5f0419fc37cb8868..c4216db9e414fbbaead6ecd89b40366b
TelemetryTimestamps.add("delayedStartupStarted"); TelemetryTimestamps.add("delayedStartupStarted");
this._cancelDelayedStartup(); this._cancelDelayedStartup();
+ ZenWorkspaces.afterLoadInit(); + gZenWorkspaces.afterLoadInit();
gBrowser.addEventListener( gBrowser.addEventListener(
"PermissionStateChange", "PermissionStateChange",

View file

@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index ea79d296e7dd0f8fd812b0677a252af5cf7ad26e..bd95ef5d6b99399c859af1cf71d9d62477f4ac2b 100644 index 6d664917a5a3bb1cea8a747e42e8bc0065ec999e..5059293ebfa29d646455b7a3505bd6eae408ba64 100644
--- a/browser/base/content/browser.js --- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js +++ b/browser/base/content/browser.js
@@ -33,6 +33,7 @@ ChromeUtils.defineESModuleGetters(this, { @@ -33,6 +33,7 @@ ChromeUtils.defineESModuleGetters(this, {
@ -10,33 +10,32 @@ index ea79d296e7dd0f8fd812b0677a252af5cf7ad26e..bd95ef5d6b99399c859af1cf71d9d624
DevToolsSocketStatus: DevToolsSocketStatus:
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs", "resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs", DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
@@ -2338,6 +2339,11 @@ var XULBrowserWindow = { @@ -2340,6 +2341,10 @@ var XULBrowserWindow = {
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser); AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
TranslationsParent.onLocationChange(gBrowser.selectedBrowser); TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
+ gZenViewSplitter.onLocationChange(gBrowser.selectedBrowser); + gZenViewSplitter.onLocationChange(gBrowser.selectedBrowser);
+ ZenWorkspaces.onLocationChange(gBrowser.selectedBrowser); + gZenWorkspaces.onLocationChange(gBrowser.selectedBrowser);
+ gZenTabUnloader.onLocationChange(gBrowser.selectedBrowser);
+ gZenPinnedTabManager.onLocationChange(gBrowser.selectedBrowser); + gZenPinnedTabManager.onLocationChange(gBrowser.selectedBrowser);
+ +
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser); PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) { if (!gMultiProcessBrowser) {
@@ -4814,7 +4820,7 @@ function switchToTabHavingURI( @@ -4816,7 +4821,7 @@ function switchToTabHavingURI(
ignoreQueryString || replaceQueryString, ignoreQueryString || replaceQueryString,
ignoreFragmentWhenComparing ignoreFragmentWhenComparing
); );
- let browsers = aWindow.gBrowser.browsers; - let browsers = aWindow.gBrowser.browsers;
+ let browsers = aWindow.ZenWorkspaces.allUsedBrowsers; + let browsers = aWindow.gZenWorkspaces.allUsedBrowsers;
for (let i = 0; i < browsers.length; i++) { for (let i = 0; i < browsers.length; i++) {
let browser = browsers[i]; let browser = browsers[i];
let browserCompare = cleanURL( let browserCompare = cleanURL(
@@ -4857,7 +4863,7 @@ function switchToTabHavingURI( @@ -4859,7 +4864,7 @@ function switchToTabHavingURI(
} }
if (!doAdopt) { if (!doAdopt) {
- aWindow.gBrowser.tabContainer.selectedIndex = i; - aWindow.gBrowser.tabContainer.selectedIndex = i;
+ aWindow.ZenWorkspaces.switchIfNeeded(browser, i); + aWindow.gZenWorkspaces.switchIfNeeded(browser, i);
} }
return true; return true;

View file

@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index 51a25aaa5558e6e17246d54a7ed95d5ddf3ecdab..08809c25c01d159a9903f1921936b178d51f9875 100644 index 8f8c5536cb6e54300897180ca3f950974c60e930..79305485631f14712d8b2674f477b641ec53fcd6 100644
--- a/browser/base/content/browser.xhtml --- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml +++ b/browser/base/content/browser.xhtml
@@ -26,6 +26,7 @@ @@ -26,6 +26,7 @@
@ -10,7 +10,7 @@ index 51a25aaa5558e6e17246d54a7ed95d5ddf3ecdab..08809c25c01d159a9903f1921936b178
persist="screenX screenY width height sizemode" persist="screenX screenY width height sizemode"
data-l10n-sync="true"> data-l10n-sync="true">
<head> <head>
@@ -104,8 +105,11 @@ @@ -105,8 +106,11 @@
<title data-l10n-id="browser-main-window-default-title"></title> <title data-l10n-id="browser-main-window-default-title"></title>
@ -22,7 +22,7 @@ index 51a25aaa5558e6e17246d54a7ed95d5ddf3ecdab..08809c25c01d159a9903f1921936b178
</head> </head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
# All sets except for popupsets (commands, keys, and stringbundles) # All sets except for popupsets (commands, keys, and stringbundles)
@@ -127,9 +131,11 @@ @@ -128,9 +132,11 @@
</vbox> </vbox>
</html:template> </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 diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index 00c8976d3e258c0875d7da2f3ec823d8907a84c9..b5735712aaa7c2ae2baa4b858e735413b130ca94 100644 index 00c8976d3e258c0875d7da2f3ec823d8907a84c9..cc61d5a845b5ce22a61f5a1aab8b280b2bcdf101 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml --- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml +++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
@ -22,27 +22,24 @@ index 00c8976d3e258c0875d7da2f3ec823d8907a84c9..b5735712aaa7c2ae2baa4b858e735413
<toolbar id="TabsToolbar" <toolbar id="TabsToolbar"
class="browser-toolbar browser-titlebar" class="browser-toolbar browser-titlebar"
fullscreentoolbar="true" fullscreentoolbar="true"
@@ -50,6 +50,10 @@ @@ -50,6 +50,8 @@
tooltip="tabbrowser-tab-tooltip" tooltip="tabbrowser-tab-tooltip"
orient="horizontal" orient="horizontal"
stopwatchid="tabClick"> stopwatchid="tabClick">
+<html:div id="zen-essentials-wrapper" skipintoolbarset="true"></html:div> +<html:div id="zen-essentials" skipintoolbarset="true"></html:div>
+<hbox id="zen-current-workspace-indicator-container"></hbox>
+<html:div id="zen-tabs-wrapper"> +<html:div id="zen-tabs-wrapper">
+<html:div id="zen-browser-tabs-container">
<hbox class="tab-drop-indicator" hidden="true"/> <hbox class="tab-drop-indicator" hidden="true"/>
<html:span id="tab-drag-empty-feedback" role="presentation"/> <html:span id="tab-drag-empty-feedback" role="presentation"/>
# If the name (tabbrowser-arrowscrollbox) or structure of this changes # If the name (tabbrowser-arrowscrollbox) or structure of this changes
@@ -76,6 +80,8 @@ @@ -76,6 +78,7 @@
tooltip="dynamic-shortcut-tooltip" tooltip="dynamic-shortcut-tooltip"
data-l10n-id="tabs-toolbar-new-tab"/> data-l10n-id="tabs-toolbar-new-tab"/>
<html:span id="tabbrowser-tab-a11y-desc" hidden="true"/> <html:span id="tabbrowser-tab-a11y-desc" hidden="true"/>
+</html:div>
+</html:div> +</html:div>
</tabs> </tabs>
<toolbarbutton id="new-tab-button" <toolbarbutton id="new-tab-button"
@@ -101,9 +107,10 @@ @@ -101,9 +104,10 @@
#include private-browsing-indicator.inc.xhtml #include private-browsing-indicator.inc.xhtml
<toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/> <toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/>

View file

@ -29,19 +29,15 @@
</linkset> </linkset>
# Scripts used all over the browser # Scripts used all over the browser
<script> <script src="chrome://browser/content/ZenUIManager.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs", this); <script src="chrome://browser/content/zen-components/ZenFolders.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenFolders.mjs", this); <script src="chrome://browser/content/zen-components/ZenMods.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesCommon.mjs", this); <script src="chrome://browser/content/zen-components/ZenCompactMode.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesImporter.mjs", this); <script src="chrome://browser/content/zen-components/ZenPinnedTabsStorage.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenCompactMode.mjs", this); <script src="chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenTabUnloader.mjs", this); <script src="chrome://browser/content/zen-components/ZenPinnedTabManager.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenPinnedTabsStorage.mjs", this); <script src="chrome://browser/content/zen-components/ZenGradientGenerator.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs", this); <script src="chrome://browser/content/zen-components/ZenViewSplitter.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenPinnedTabManager.mjs", this); <script src="chrome://browser/content/zen-components/ZenGlanceManager.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenGradientGenerator.mjs", this); <script src="chrome://browser/content/zen-components/ZenMediaController.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenViewSplitter.mjs", this); <script src="chrome://browser/content/zen-components/ZenDownloadAnimation.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenGlanceManager.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenMediaController.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenDownloadAnimation.mjs", this);
</script>

View file

@ -9,6 +9,7 @@
content/browser/ZenCustomizableUI.sys.mjs (../../zen/common/ZenCustomizableUI.sys.mjs) content/browser/ZenCustomizableUI.sys.mjs (../../zen/common/ZenCustomizableUI.sys.mjs)
content/browser/zen-components/ZenUIMigration.mjs (../../zen/common/ZenUIMigration.mjs) content/browser/zen-components/ZenUIMigration.mjs (../../zen/common/ZenUIMigration.mjs)
content/browser/zen-components/ZenCommonUtils.mjs (../../zen/common/ZenCommonUtils.mjs) content/browser/zen-components/ZenCommonUtils.mjs (../../zen/common/ZenCommonUtils.mjs)
content/browser/zen-components/ZenSessionStore.mjs (../../zen/common/ZenSessionStore.mjs)
content/browser/zen-styles/zen-theme.css (../../zen/common/styles/zen-theme.css) content/browser/zen-styles/zen-theme.css (../../zen/common/styles/zen-theme.css)
content/browser/zen-styles/zen-buttons.css (../../zen/common/styles/zen-buttons.css) content/browser/zen-styles/zen-buttons.css (../../zen/common/styles/zen-buttons.css)
@ -34,21 +35,19 @@
content/browser/zen-components/ZenViewSplitter.mjs (../../zen/split-view/ZenViewSplitter.mjs) content/browser/zen-components/ZenViewSplitter.mjs (../../zen/split-view/ZenViewSplitter.mjs)
content/browser/zen-styles/zen-decks.css (../../zen/split-view/zen-decks.css) content/browser/zen-styles/zen-decks.css (../../zen/split-view/zen-decks.css)
content/browser/zen-components/ZenThemesCommon.mjs (../../zen/mods/ZenThemesCommon.mjs) content/browser/zen-components/ZenMods.mjs (../../zen/mods/ZenMods.mjs)
content/browser/zen-components/ZenThemesImporter.mjs (../../zen/mods/ZenThemesImporter.mjs)
content/browser/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs (../../zen/mods/actors/ZenThemeMarketplaceParent.sys.mjs)
content/browser/zen-components/actors/ZenThemeMarketplaceChild.sys.mjs (../../zen/mods/actors/ZenThemeMarketplaceChild.sys.mjs)
content/browser/zen-components/ZenWorkspaceIcons.mjs (../../zen/workspaces/ZenWorkspaceIcons.mjs)
content/browser/zen-components/ZenWorkspace.mjs (../../zen/workspaces/ZenWorkspace.mjs)
content/browser/zen-components/ZenWorkspaces.mjs (../../zen/workspaces/ZenWorkspaces.mjs) content/browser/zen-components/ZenWorkspaces.mjs (../../zen/workspaces/ZenWorkspaces.mjs)
content/browser/zen-components/ZenWorkspacesStorage.mjs (../../zen/workspaces/ZenWorkspacesStorage.mjs) content/browser/zen-components/ZenWorkspacesStorage.mjs (../../zen/workspaces/ZenWorkspacesStorage.mjs)
content/browser/zen-components/ZenWorkspacesSync.mjs (../../zen/workspaces/ZenWorkspacesSync.mjs) content/browser/zen-components/ZenWorkspacesSync.mjs (../../zen/workspaces/ZenWorkspacesSync.mjs)
content/browser/zen-components/ZenGradientGenerator.mjs (../../zen/workspaces/ZenGradientGenerator.mjs) content/browser/zen-components/ZenGradientGenerator.mjs (../../zen/workspaces/ZenGradientGenerator.mjs)
content/browser/zen-styles/zen-workspaces.css (../../zen/workspaces/zen-workspaces.css) * content/browser/zen-styles/zen-workspaces.css (../../zen/workspaces/zen-workspaces.css)
content/browser/zen-styles/zen-gradient-generator.css (../../zen/workspaces/zen-gradient-generator.css) content/browser/zen-styles/zen-gradient-generator.css (../../zen/workspaces/zen-gradient-generator.css)
content/browser/zen-components/ZenKeyboardShortcuts.mjs (../../zen/kbs/ZenKeyboardShortcuts.mjs) content/browser/zen-components/ZenKeyboardShortcuts.mjs (../../zen/kbs/ZenKeyboardShortcuts.mjs)
content/browser/zen-components/ZenTabUnloader.mjs (../../zen/tabs/ZenTabUnloader.mjs)
content/browser/zen-components/ZenPinnedTabsStorage.mjs (../../zen/tabs/ZenPinnedTabsStorage.mjs) content/browser/zen-components/ZenPinnedTabsStorage.mjs (../../zen/tabs/ZenPinnedTabsStorage.mjs)
content/browser/zen-components/ZenPinnedTabManager.mjs (../../zen/tabs/ZenPinnedTabManager.mjs) content/browser/zen-components/ZenPinnedTabManager.mjs (../../zen/tabs/ZenPinnedTabManager.mjs)
* content/browser/zen-styles/zen-tabs.css (../../zen/tabs/zen-tabs.css) * content/browser/zen-styles/zen-tabs.css (../../zen/tabs/zen-tabs.css)
@ -56,8 +55,6 @@
content/browser/zen-components/ZenGlanceManager.mjs (../../zen/glance/ZenGlanceManager.mjs) content/browser/zen-components/ZenGlanceManager.mjs (../../zen/glance/ZenGlanceManager.mjs)
content/browser/zen-styles/zen-glance.css (../../zen/glance/zen-glance.css) content/browser/zen-styles/zen-glance.css (../../zen/glance/zen-glance.css)
content/browser/zen-components/actors/ZenGlanceChild.sys.mjs (../../zen/glance/actors/ZenGlanceChild.sys.mjs)
content/browser/zen-components/actors/ZenGlanceParent.sys.mjs (../../zen/glance/actors/ZenGlanceParent.sys.mjs)
content/browser/zen-components/ZenFolders.mjs (../../zen/folders/ZenFolders.mjs) content/browser/zen-components/ZenFolders.mjs (../../zen/folders/ZenFolders.mjs)
content/browser/zen-styles/zen-folders.css (../../zen/folders/zen-folders.css) content/browser/zen-styles/zen-folders.css (../../zen/folders/zen-folders.css)

View file

@ -43,10 +43,6 @@
<command id="cmd_zenCopyCurrentURL" /> <command id="cmd_zenCopyCurrentURL" />
<command id="cmd_zenCopyCurrentURLMarkdown" /> <command id="cmd_zenCopyCurrentURLMarkdown" />
<command id="cmd_zenUnloadTab" />
<command id="cmd_zenPreventUnloadTab" />
<command id="cmd_zenIgnoreUnloadTab" />
</commandset> </commandset>
<keyset id="zenKeyset"></keyset> <keyset id="zenKeyset"></keyset>

View file

@ -1,11 +1,13 @@
# This needs to be here, before all the other scripts, because it's used before # This needs to be here, before all the other scripts, because it's used before
# the window is fully loaded. # the window is fully loaded.
# Make sure they are loaded before the global-scripts.inc file. # Make sure they are loaded before the global-scripts.inc file.
<script type="text/javascript"> <script type="text/javascript" src="chrome://browser/content/zen-sets.js"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-sets.js", this); <script type="text/javascript" src="chrome://browser/content/zen-components/ZenCommonUtils.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenCommonUtils.mjs", this); <script type="text/javascript" src="chrome://browser/content/zen-components/ZenKeyboardShortcuts.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenKeyboardShortcuts.mjs", this); <script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspaceIcons.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspaces.mjs", this); <script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspace.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspacesSync.mjs", this); <script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspaces.mjs"></script>
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenActorsManager.mjs", this); <script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspacesSync.mjs"></script>
</script> <script type="text/javascript" src="chrome://browser/content/zen-components/ZenActorsManager.mjs"></script>
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenSessionStore.mjs"></script>

View file

@ -2,12 +2,12 @@
<toolbar brighttext="true" <toolbar brighttext="true"
id="zen-sidebar-bottom-buttons" id="zen-sidebar-bottom-buttons"
fullscreentoolbar="true" fullscreentoolbar="true"
class="browser-toolbar customization-target zen-dont-hide-on-fullscreen" class="browser-toolbar customization-target"
data-l10n-id="tabs-toolbar" data-l10n-id="tabs-toolbar"
customizable="true" customizable="true"
skipintoolbarset="true" skipintoolbarset="true"
context="toolbar-context-menu" context="toolbar-context-menu"
mode="icons"> mode="icons">
<toolbarbutton removable="true" class="chromeclass-toolbar-additional toolbarbutton-1 zen-sidebar-action-button" id="zen-expand-sidebar-button" command="cmd_zenToggleSidebar" data-l10n-id="sidebar-zen-expand"></toolbarbutton> <toolbarbutton removable="true" class="chromeclass-toolbar-additional toolbarbutton-1 zen-sidebar-action-button" id="zen-expand-sidebar-button" command="cmd_zenToggleSidebar" data-l10n-id="sidebar-zen-expand"></toolbarbutton>
<toolbarbutton id="zen-workspaces-button" class="chromeclass-toolbar-additional" overflows="false" removable="false"></toolbarbutton> <zen-workspace-icons id="zen-workspaces-button" overflows="false" removable="false"></zen-workspace-icons>
</toolbar> </toolbar>

View file

@ -1,9 +1,9 @@
diff --git a/browser/base/moz.build b/browser/base/moz.build diff --git a/browser/base/moz.build b/browser/base/moz.build
index 636e0841786735a63ddea00e819c0b6f0b8a5d4d..62e4531bd19caf098fd76c69b213fa32d62546a6 100644 index 9da444880c4dbf188443d43e8d0a71d98311a2b7..3a654be6f78931e92479b30de6f0a6e50da81908 100644
--- a/browser/base/moz.build --- a/browser/base/moz.build
+++ b/browser/base/moz.build +++ b/browser/base/moz.build
@@ -87,3 +87,5 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] in ("windows", "gtk"): @@ -81,3 +81,5 @@ DEFINES["MOZ_APP_VERSION_DISPLAY"] = CONFIG["MOZ_APP_VERSION_DISPLAY"]
DEFINES["MENUBAR_CAN_AUTOHIDE"] = 1 DEFINES["APP_LICENSE_BLOCK"] = "%s/content/overrides/app-license.html" % SRCDIR
JAR_MANIFESTS += ["jar.mn"] JAR_MANIFESTS += ["jar.mn"]
+ +

View file

@ -1,8 +1,8 @@
diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs
index 5911b276fdc9889d3cb61bac3d302ec5239e4a90..a405f8a0204e98fa9de08f1cd7b6761f0fc6198e 100644 index e72feb538c0dc182211945a66e51bcea73d3d4a0..b4d9115873b7af414043c53fb817b611b78ec58f 100644
--- a/browser/components/BrowserContentHandler.sys.mjs --- a/browser/components/BrowserContentHandler.sys.mjs
+++ b/browser/components/BrowserContentHandler.sys.mjs +++ b/browser/components/BrowserContentHandler.sys.mjs
@@ -1270,6 +1270,7 @@ function maybeRecordToHandleTelemetry(uri, isLaunch) { @@ -1281,6 +1281,7 @@ function maybeRecordToHandleTelemetry(uri, isLaunch) {
".avif", ".avif",
".htm", ".htm",
".html", ".html",

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index a6a7f9165aece774c3f1c15f7e352b11a4bf90f4..a4b6124b85f099c6f12d297fc26f2040370c337c 100644 index cebca6d017a0c3fc8eff7a38f987726324789e69..73a24df91bec368f2f27c538b37d57595e18c599 100644
--- a/browser/components/BrowserGlue.sys.mjs --- a/browser/components/BrowserGlue.sys.mjs
+++ b/browser/components/BrowserGlue.sys.mjs +++ b/browser/components/BrowserGlue.sys.mjs
@@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs"; @@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
@ -10,7 +10,7 @@ index a6a7f9165aece774c3f1c15f7e352b11a4bf90f4..a4b6124b85f099c6f12d297fc26f2040
AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs", AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs",
AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs", AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs", AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
@@ -1886,6 +1887,7 @@ BrowserGlue.prototype = { @@ -881,6 +882,7 @@ BrowserGlue.prototype = {
lazy.ProcessHangMonitor.init(); lazy.ProcessHangMonitor.init();

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs
index 91088fab1759b9af908912648d28daa5938a29c9..d420e7a2b1d66ad2bd7699cc580e180ab45a793d 100644 index 5bb6be19f7f855b129aac921af1ed5cfc63d732b..41230a61f3088a234903dcc10abd361efac34729 100644
--- a/browser/components/customizableui/CustomizableUI.sys.mjs --- a/browser/components/customizableui/CustomizableUI.sys.mjs
+++ b/browser/components/customizableui/CustomizableUI.sys.mjs +++ b/browser/components/customizableui/CustomizableUI.sys.mjs
@@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, { @@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, {

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/CustomizeMode.sys.mjs b/browser/components/customizableui/CustomizeMode.sys.mjs diff --git a/browser/components/customizableui/CustomizeMode.sys.mjs b/browser/components/customizableui/CustomizeMode.sys.mjs
index 619bb2af5a3a0995fc93fa040696dd2854848ab5..bbc6bad906e9ccaf668ca99f4a0411f564ef1e56 100644 index 619bb2af5a3a0995fc93fa040696dd2854848ab5..14ad5f6122971a0a0dc20d22acdc073f84965dad 100644
--- a/browser/components/customizableui/CustomizeMode.sys.mjs --- a/browser/components/customizableui/CustomizeMode.sys.mjs
+++ b/browser/components/customizableui/CustomizeMode.sys.mjs +++ b/browser/components/customizableui/CustomizeMode.sys.mjs
@@ -500,7 +500,7 @@ export class CustomizeMode { @@ -500,7 +500,7 @@ export class CustomizeMode {
@ -20,7 +20,15 @@ index 619bb2af5a3a0995fc93fa040696dd2854848ab5..bbc6bad906e9ccaf668ca99f4a0411f5
customizer.hidden = true; customizer.hidden = true;
browser.hidden = false; browser.hidden = false;
@@ -3125,6 +3125,20 @@ export class CustomizeMode { @@ -1173,6 +1173,7 @@ export class CustomizeMode {
return (
aNode.localName == "toolbarbutton" ||
aNode.localName == "toolbaritem" ||
+ aNode.localName == "zen-workspace-icons" ||
aNode.localName == "toolbarseparator" ||
aNode.localName == "toolbarspring" ||
aNode.localName == "toolbarspacer"
@@ -3125,6 +3126,20 @@ export class CustomizeMode {
if (makeSpaceImmediately) { if (makeSpaceImmediately) {
aDraggedOverItem.setAttribute("notransition", "true"); aDraggedOverItem.setAttribute("notransition", "true");
} }

View file

@ -1,8 +1,8 @@
diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js
index ec52437dba30633a374299a46c856e1df05dec0e..48617e32d56c3b3f525557ddeac6297555c48c04 100644 index 689205034d9df67ff1fe0ebbf4a3481a5f414391..2626b7286deb51f66b6ccbbc32d510139cacb109 100644
--- a/browser/components/customizableui/content/panelUI.js --- a/browser/components/customizableui/content/panelUI.js
+++ b/browser/components/customizableui/content/panelUI.js +++ b/browser/components/customizableui/content/panelUI.js
@@ -515,8 +515,7 @@ const PanelUI = { @@ -516,8 +516,7 @@ const PanelUI = {
tempPanel.setAttribute("animate", "false"); tempPanel.setAttribute("animate", "false");
} }
tempPanel.setAttribute("context", ""); tempPanel.setAttribute("context", "");
@ -12,7 +12,7 @@ index ec52437dba30633a374299a46c856e1df05dec0e..48617e32d56c3b3f525557ddeac62975
.appendChild(tempPanel); .appendChild(tempPanel);
let multiView = document.createXULElement("panelmultiview"); let multiView = document.createXULElement("panelmultiview");
@@ -957,7 +956,7 @@ const PanelUI = { @@ -959,7 +958,7 @@ const PanelUI = {
el.removeAttribute("data-lazy-l10n-id"); el.removeAttribute("data-lazy-l10n-id");
}); });

View file

@ -1,8 +1,8 @@
diff --git a/browser/components/extensions/parent/ext-tabs.js b/browser/components/extensions/parent/ext-tabs.js diff --git a/browser/components/extensions/parent/ext-tabs.js b/browser/components/extensions/parent/ext-tabs.js
index b47f0510e32d788dfe7c3109474c4512c9900d4a..49697125a2998bbd50d87c54e2c5974baaf9a7e2 100644 index 517ea0079c12941a844a4f9e4ba694c6411887ee..510ab14dfa2178c332c9862d6a01b75bd12dfe3b 100644
--- a/browser/components/extensions/parent/ext-tabs.js --- a/browser/components/extensions/parent/ext-tabs.js
+++ b/browser/components/extensions/parent/ext-tabs.js +++ b/browser/components/extensions/parent/ext-tabs.js
@@ -468,6 +468,7 @@ this.tabs = class extends ExtensionAPIPersistent { @@ -482,6 +482,7 @@ this.tabs = class extends ExtensionAPIPersistent {
} }
let tab = tabManager.getWrapper(event.originalTarget); let tab = tabManager.getWrapper(event.originalTarget);
@ -10,3 +10,11 @@ index b47f0510e32d788dfe7c3109474c4512c9900d4a..49697125a2998bbd50d87c54e2c5974b
let changeInfo = {}; let changeInfo = {};
for (let prop of needed) { for (let prop of needed) {
@@ -836,6 +837,7 @@ this.tabs = class extends ExtensionAPIPersistent {
});
}
+ window.gZenCompactModeManager._nextTimeWillBeActive = active;
let nativeTab = window.gBrowser.addTab(url, options);
if (active) {

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/places/PlacesUIUtils.sys.mjs b/browser/components/places/PlacesUIUtils.sys.mjs diff --git a/browser/components/places/PlacesUIUtils.sys.mjs b/browser/components/places/PlacesUIUtils.sys.mjs
index 1f5e163bae58f3f1cac750ca32846cc8a80bd2ca..16034842b4ca5295aa3c9237db55035ecc4016d2 100644 index c7c5c28e1ea6d05094ed9fe751c6b50ab9645370..72f1038aa37b0951a1e78331ee317f714e5b6e8b 100644
--- a/browser/components/places/PlacesUIUtils.sys.mjs --- a/browser/components/places/PlacesUIUtils.sys.mjs
+++ b/browser/components/places/PlacesUIUtils.sys.mjs +++ b/browser/components/places/PlacesUIUtils.sys.mjs
@@ -59,6 +59,7 @@ class BookmarkState { @@ -59,6 +59,7 @@ class BookmarkState {
@ -157,20 +157,12 @@ index 1f5e163bae58f3f1cac750ca32846cc8a80bd2ca..16034842b4ca5295aa3c9237db55035e
/** /**
* Append transactions to update tags by given information. * Append transactions to update tags by given information.
* *
@@ -903,8 +1012,15 @@ export var PlacesUIUtils = { @@ -903,7 +1012,7 @@ export var PlacesUIUtils = {
aNode, aNode,
aWhere, aWhere,
aWindow, aWindow,
- { aPrivate = false, userContextId = 0 } = {} - { aPrivate = false, userContextId = 0 } = {}
+ { aPrivate = false, userContextId = undefined } = {} + { aPrivate = false, userContextId = undefined } = {}
) { ) {
+ if (typeof userContextId == "undefined") {
+ try {
+ let browserWindow = getBrowserWindow(aWindow);
+ userContextId = browserWindow.ZenWorkspaces.getDefaultContainer();
+ } catch {}
+ }
+
if ( if (
aNode && aNode &&
lazy.PlacesUtils.nodeIsURI(aNode) &&

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/places/content/browserPlacesViews.js b/browser/components/places/content/browserPlacesViews.js diff --git a/browser/components/places/content/browserPlacesViews.js b/browser/components/places/content/browserPlacesViews.js
index ad138a38340e8e8510d395f46c30ec4121d731bb..9294f05633acbe560df003333b7ef7d9a12a2a11 100644 index ad138a38340e8e8510d395f46c30ec4121d731bb..52beaa66395e2b240a7122936cd4d2452b386724 100644
--- a/browser/components/places/content/browserPlacesViews.js --- a/browser/components/places/content/browserPlacesViews.js
+++ b/browser/components/places/content/browserPlacesViews.js +++ b/browser/components/places/content/browserPlacesViews.js
@@ -330,12 +330,23 @@ class PlacesViewBase { @@ -330,12 +330,23 @@ class PlacesViewBase {
@ -13,7 +13,7 @@ index ad138a38340e8e8510d395f46c30ec4121d731bb..9294f05633acbe560df003333b7ef7d9
+ let child = resultNode.getChild(i); + let child = resultNode.getChild(i);
+ // Skip nodes that don't belong in current workspace + // Skip nodes that don't belong in current workspace
+ if (PlacesUtils.nodeIsURI(child) || PlacesUtils.containerTypes.includes(child.type)) { + if (PlacesUtils.nodeIsURI(child) || PlacesUtils.containerTypes.includes(child.type)) {
+ if (typeof ZenWorkspaces !== 'undefined' && ZenWorkspaces.isBookmarkInAnotherWorkspace(child)) { + if (typeof gZenWorkspaces !== 'undefined' && gZenWorkspaces.isBookmarkInAnotherWorkspace(child)) {
+ continue; + continue;
+ } + }
+ } + }
@ -52,7 +52,7 @@ index ad138a38340e8e8510d395f46c30ec4121d731bb..9294f05633acbe560df003333b7ef7d9
+ for (let i = 0; i < cc; i++) { + for (let i = 0; i < cc; i++) {
+ let child = this._resultNode.getChild(i); + let child = this._resultNode.getChild(i);
+ if (PlacesUtils.nodeIsURI(child) || PlacesUtils.containerTypes.includes(child.type)) { + if (PlacesUtils.nodeIsURI(child) || PlacesUtils.containerTypes.includes(child.type)) {
+ if (!(typeof ZenWorkspaces !== 'undefined' && ZenWorkspaces.isBookmarkInAnotherWorkspace(child))) { + if (!(typeof gZenWorkspaces !== 'undefined' && gZenWorkspaces.isBookmarkInAnotherWorkspace(child))) {
+ visibleNodes.push(child); + visibleNodes.push(child);
+ } + }
+ } else { + } else {

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index aa339be9ba94ed776fa25f2d72f9e6b25dc86cd3..4c6c725942b3d6f2a42938d444ac7645526623cc 100644 index 2116a8a3b5746b79280f2d73b5e29b01c7a15993..448269adeab747fd2da419509e6923eefbb87d8a 100644
--- a/browser/components/preferences/main.js --- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js +++ b/browser/components/preferences/main.js
@@ -389,7 +389,7 @@ function getBundleForLocales(newLocales) { @@ -389,7 +389,7 @@ function getBundleForLocales(newLocales) {

View file

@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index e4746e3408e68273126e6d2baf5afcf80721674b..e478aaf6bfefa6acd9062aeb3e4709ca0d5d779c 100644 index 6a575e3148de0c73f7ab7ff9afbd3ff179bce313..b7c2f2818358b7b6b6fc62b298dc67a66ebd9e3b 100644
--- a/browser/components/preferences/preferences.js --- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js +++ b/browser/components/preferences/preferences.js
@@ -118,6 +118,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () { @@ -117,6 +117,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {
styleSheets: [ styleSheets: [
"chrome://browser/skin/preferences/dialog.css", "chrome://browser/skin/preferences/dialog.css",
"chrome://browser/skin/preferences/preferences.css", "chrome://browser/skin/preferences/preferences.css",
@ -10,7 +10,7 @@ index e4746e3408e68273126e6d2baf5afcf80721674b..e478aaf6bfefa6acd9062aeb3e4709ca
], ],
resizeCallback: async ({ title, frame }) => { resizeCallback: async ({ title, frame }) => {
// Search within main document and highlight matched keyword. // Search within main document and highlight matched keyword.
@@ -197,6 +198,10 @@ function init_all() { @@ -196,6 +197,10 @@ function init_all() {
register_module("paneSearch", gSearchPane); register_module("paneSearch", gSearchPane);
register_module("panePrivacy", gPrivacyPane); register_module("panePrivacy", gPrivacyPane);
register_module("paneContainers", gContainersPane); register_module("paneContainers", gContainersPane);

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 43be2b6ac84827bd13723e0211a3ade401934591..513584d7e720451efdb87350ac07d8b2590c1705 100644 index b3b128cb5eb8c005c642965a8c8e5e68bf756e77..6e128d45c983b267e349b08097c56380dd04be3d 100644
--- a/browser/components/preferences/preferences.xhtml --- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml +++ b/browser/components/preferences/preferences.xhtml
@@ -44,6 +44,8 @@ @@ -44,6 +44,8 @@
@ -11,7 +11,7 @@ index 43be2b6ac84827bd13723e0211a3ade401934591..513584d7e720451efdb87350ac07d8b2
<link rel="localization" href="branding/brand.ftl"/> <link rel="localization" href="branding/brand.ftl"/>
<link rel="localization" href="browser/browser.ftl"/> <link rel="localization" href="browser/browser.ftl"/>
<!-- Used by fontbuilder.js --> <!-- Used by fontbuilder.js -->
@@ -105,6 +107,11 @@ @@ -104,6 +106,11 @@
<hbox flex="1"> <hbox flex="1">
<vbox class="navigation"> <vbox class="navigation">
@ -23,7 +23,7 @@ index 43be2b6ac84827bd13723e0211a3ade401934591..513584d7e720451efdb87350ac07d8b2
<!-- category list --> <!-- category list -->
<richlistbox id="categories" data-l10n-id="category-list" data-l10n-attrs="aria-label"> <richlistbox id="categories" data-l10n-id="category-list" data-l10n-attrs="aria-label">
<richlistitem id="category-general" <richlistitem id="category-general"
@@ -117,6 +124,50 @@ @@ -116,6 +123,50 @@
<label class="category-name" flex="1" data-l10n-id="pane-general-title"></label> <label class="category-name" flex="1" data-l10n-id="pane-general-title"></label>
</richlistitem> </richlistitem>
@ -74,7 +74,7 @@ index 43be2b6ac84827bd13723e0211a3ade401934591..513584d7e720451efdb87350ac07d8b2
<richlistitem id="category-home" <richlistitem id="category-home"
class="category" class="category"
value="paneHome" value="paneHome"
@@ -228,11 +279,6 @@ @@ -227,11 +278,6 @@
<html:a href="about:policies" target="_blank" data-l10n-id="managed-notice"/> <html:a href="about:policies" target="_blank" data-l10n-id="managed-notice"/>
</hbox> </hbox>
</hbox> </hbox>
@ -86,7 +86,7 @@ index 43be2b6ac84827bd13723e0211a3ade401934591..513584d7e720451efdb87350ac07d8b2
</hbox> </hbox>
</hbox> </hbox>
<vbox id="mainPrefPane"> <vbox id="mainPrefPane">
@@ -246,6 +292,10 @@ @@ -245,6 +291,10 @@
#include sync.inc.xhtml #include sync.inc.xhtml
#include experimental.inc.xhtml #include experimental.inc.xhtml
#include moreFromMozilla.inc.xhtml #include moreFromMozilla.inc.xhtml

View file

@ -14,30 +14,37 @@ var gZenMarketplaceManager = {
return; return;
} }
if (!window.gZenMods) {
window.gZenMods = ZenMultiWindowFeature.currentBrowser.gZenMods;
}
header.appendChild(this._initDisableAll()); header.appendChild(this._initDisableAll());
this._initImportExport(); this._initImportExport();
this.__hasInitializedEvents = true; this.__hasInitializedEvents = true;
await this._buildThemesList(); await this._buildModsList();
Services.prefs.addObserver(this.updatePref, this); Services.prefs.addObserver(gZenMods.updatePref, this);
const checkForUpdateClick = (event) => { const checkForUpdateClick = (event) => {
if (event.target === checkForUpdates) { if (event.target === checkForUpdates) {
event.preventDefault(); event.preventDefault();
this._checkForThemeUpdates(event); this._checkForThemeUpdates(event);
} }
}; };
checkForUpdates.addEventListener('click', checkForUpdateClick); checkForUpdates.addEventListener('click', checkForUpdateClick);
document.addEventListener('ZenThemeMarketplace:CheckForUpdatesFinished', (event) => { document.addEventListener('ZenModsMarketplace:CheckForUpdatesFinished', (event) => {
checkForUpdates.disabled = false; checkForUpdates.disabled = false;
const updates = event.detail.updates; const updates = event.detail.updates;
const success = document.getElementById('zenThemeMarketplaceUpdatesSuccess'); const success = document.getElementById('zenThemeMarketplaceUpdatesSuccess');
const error = document.getElementById('zenThemeMarketplaceUpdatesFailure'); const error = document.getElementById('zenThemeMarketplaceUpdatesFailure');
if (updates) { if (updates) {
success.hidden = false; success.hidden = false;
error.hidden = true; error.hidden = true;
@ -48,13 +55,16 @@ var gZenMarketplaceManager = {
}); });
window.addEventListener('unload', () => { window.addEventListener('unload', () => {
Services.prefs.removeObserver(this.updatePref, this); Services.prefs.removeObserver(gZenMods.updatePref, this);
this.__hasInitializedEvents = false; this.__hasInitializedEvents = false;
document.removeEventListener('ZenThemeMarketplace:CheckForUpdatesFinished', this);
document.removeEventListener('ZenCheckForThemeUpdates', this); document.removeEventListener('ZenModsMarketplace:CheckForUpdatesFinished', this);
document.removeEventListener('ZenCheckForModUpdates', this);
checkForUpdates.removeEventListener('click', checkForUpdateClick); checkForUpdates.removeEventListener('click', checkForUpdateClick);
this.themesList.innerHTML = '';
this._doNotRebuildThemesList = false; this.modsList.innerHTML = '';
this._doNotRebuildModsList = false;
}); });
}, },
@ -63,36 +73,32 @@ var gZenMarketplaceManager = {
const exportButton = document.getElementById('zenThemeMarketplaceExport'); const exportButton = document.getElementById('zenThemeMarketplaceExport');
if (importButton) { if (importButton) {
importButton.addEventListener('click', async () => { importButton.addEventListener('click', this._importThemes.bind(this));
await this._importThemes();
});
} }
if (exportButton) { if (exportButton) {
exportButton.addEventListener('click', async () => { exportButton.addEventListener('click', this._exportThemes.bind(this));
await this._exportThemes();
});
} }
}, },
_initDisableAll() { _initDisableAll() {
const areThemesDisabled = Services.prefs.getBoolPref('zen.themes.disable-all', false); const areModsDisabled = Services.prefs.getBoolPref('zen.themes.disable-all', false);
const browser = ZenThemesCommon.currentBrowser; const browser = ZenMultiWindowFeature.currentBrowser;
const mozToggle = document.createElement('moz-toggle'); const mozToggle = document.createElement('moz-toggle');
mozToggle.className = mozToggle.className =
'zenThemeMarketplaceItemPreferenceToggle zenThemeMarketplaceDisableAllToggle'; 'zenThemeMarketplaceItemPreferenceToggle zenThemeMarketplaceDisableAllToggle';
mozToggle.pressed = !areThemesDisabled; mozToggle.pressed = !areModsDisabled;
browser.document.l10n.setAttributes( browser.document.l10n.setAttributes(
mozToggle, mozToggle,
`zen-theme-disable-all-${!areThemesDisabled ? 'enabled' : 'disabled'}` `zen-theme-disable-all-${!areModsDisabled ? 'enabled' : 'disabled'}`
); );
mozToggle.addEventListener('toggle', async (event) => { mozToggle.addEventListener('toggle', async (event) => {
const { pressed = false } = event.target || {}; const { pressed = false } = event.target || {};
this.themesList.style.display = pressed ? '' : 'none'; this.modsList.style.display = pressed ? '' : 'none';
Services.prefs.setBoolPref('zen.themes.disable-all', !pressed); Services.prefs.setBoolPref('zen.themes.disable-all', !pressed);
browser.document.l10n.setAttributes( browser.document.l10n.setAttributes(
mozToggle, mozToggle,
@ -100,91 +106,65 @@ var gZenMarketplaceManager = {
); );
}); });
if (areThemesDisabled) { if (areModsDisabled) {
this.themesList.style.display = 'none'; this.modsList.style.display = 'none';
} }
return mozToggle; return mozToggle;
}, },
async observe() { async observe() {
ZenThemesCommon.resetThemesCache(); await this._buildModsList();
await this._buildThemesList();
}, },
_checkForThemeUpdates(event) { _checkForThemeUpdates(event) {
// Send a message to the child to check for theme updates. // Send a message to the child to check for theme updates.
event.target.disabled = true; event.target.disabled = true;
// send an event that will be listened by the child process. // send an event that will be listened by the child process.
document.dispatchEvent(new CustomEvent('ZenCheckForThemeUpdates')); document.dispatchEvent(new CustomEvent('ZenCheckForModUpdates'));
}, },
get updatePref() { get modsList() {
return 'zen.themes.updated-value-observer'; if (!this._modsList) {
}, this._modsList = document.getElementById('zenThemeMarketplaceList');
triggerThemeUpdate() {
Services.prefs.setBoolPref(this.updatePref, !Services.prefs.getBoolPref(this.updatePref));
},
get themesList() {
if (!this._themesList) {
this._themesList = document.getElementById('zenThemeMarketplaceList');
} }
return this._themesList; return this._modsList;
}, },
async removeTheme(themeId) { async removeMod(modId) {
const themePath = ZenThemesCommon.getThemeFolder(themeId); await gZenMods.removeMod(modId);
console.info(`[ZenThemeMarketplaceParent:settings]: Removing theme ${themePath}`); gZenMods.triggerModsUpdate();
await IOUtils.remove(themePath, { recursive: true, ignoreAbsent: true });
const themes = await ZenThemesCommon.getThemes();
delete themes[themeId];
await IOUtils.writeJSON(ZenThemesCommon.themesDataFile, themes);
this.triggerThemeUpdate();
}, },
async disableTheme(themeId) { async disableMod(modId) {
const themes = await ZenThemesCommon.getThemes(); await gZenMods.disableMod(modId);
const theme = themes[themeId];
console.log(`[ZenThemeMarketplaceParent:settings]: Disabling theme ${theme.name}`); this._doNotRebuildModsList = true;
gZenMods.triggerModsUpdate();
theme.enabled = false;
await IOUtils.writeJSON(ZenThemesCommon.themesDataFile, themes);
this._doNotRebuildThemesList = true;
this.triggerThemeUpdate();
}, },
async enableTheme(themeId) { async enableMod(modId) {
const themes = await ZenThemesCommon.getThemes(); await gZenMods.enableMod(modId);
const theme = themes[themeId];
console.log(`[ZenThemeMarketplaceParent:settings]: Enabling theme ${theme.name}`); this._doNotRebuildModsList = true;
gZenMods.triggerModsUpdate();
theme.enabled = true;
await IOUtils.writeJSON(ZenThemesCommon.themesDataFile, themes);
this._doNotRebuildThemesList = true;
this.triggerThemeUpdate();
}, },
_triggerBuildUpdateWithoutRebuild() { _triggerBuildUpdateWithoutRebuild() {
this._doNotRebuildThemesList = true; this._doNotRebuildModsList = true;
this.triggerThemeUpdate(); gZenMods.triggerModsUpdate();
}, },
async _importThemes() { async _importThemes() {
const errorBox = document.getElementById('zenThemeMarketplaceImportFailure'); const errorBox = document.getElementById('zenThemeMarketplaceImportFailure');
const successBox = document.getElementById('zenThemeMarketplaceImportSuccess'); const successBox = document.getElementById('zenThemeMarketplaceImportSuccess');
successBox.hidden = true; successBox.hidden = true;
errorBox.hidden = true; errorBox.hidden = true;
const input = document.createElement('input'); const input = document.createElement('input');
input.type = 'file'; input.type = 'file';
input.accept = '.json'; input.accept = '.json';
input.style.display = 'none'; input.style.display = 'none';
@ -192,37 +172,52 @@ var gZenMarketplaceManager = {
input.setAttribute('accept', '.json'); input.setAttribute('accept', '.json');
let timeout; let timeout;
const filePromise = new Promise((resolve) => { const filePromise = new Promise((resolve) => {
input.addEventListener('change', (event) => { input.addEventListener('change', (event) => {
if (timeout) clearTimeout(timeout); if (timeout) {
clearTimeout(timeout);
}
const file = event.target.files[0]; const file = event.target.files[0];
resolve(file); resolve(file);
}); });
timeout = setTimeout(() => { timeout = setTimeout(() => {
console.warn('[ZenThemeMarketplaceParent:settings]: Import timeout reached, aborting.'); console.warn('[ZenSettings:ZenMods]: Import timeout reached, aborting.');
resolve(null); resolve(null);
}, 60000); }, 60000);
}); });
input.addEventListener('cancel', () => {
console.warn('[ZenSettings:ZenMods]: Import cancelled by user.');
clearTimeout(timeout);
});
input.click(); input.click();
try { try {
const file = await filePromise; const file = await filePromise;
if (!file) { if (!file) {
return; return;
} }
const content = await file.text(); const content = await file.text();
const themes = JSON.parse(content); const mods = JSON.parse(content);
for (const theme of Object.values(themes)) {
theme.themeId = theme.id; for (const mod of Object.values(mods)) {
window.ZenInstallTheme(theme); mod.modId = mod.id;
await window.ZenInstallMod(mod);
} }
} catch (error) { } catch (error) {
console.error('[ZenThemeMarketplaceParent:settings]: Error while importing themes:', error); console.error('[ZenSettings:ZenMods]: Error while importing mods:', error);
errorBox.hidden = false; errorBox.hidden = false;
} finally { }
if (input) input.remove();
if (input) {
input.remove();
} }
}, },
@ -233,51 +228,54 @@ var gZenMarketplaceManager = {
successBox.hidden = true; successBox.hidden = true;
errorBox.hidden = true; errorBox.hidden = true;
let a, url; let temporalAnchor, temporalUrl;
try { try {
const themes = await ZenThemesCommon.getThemes(); const mods = await gZenMods.getMods();
const themesJson = JSON.stringify(themes, null, 2); const modsJson = JSON.stringify(mods, null, 2);
const blob = new Blob([themesJson], { type: 'application/json' }); const blob = new Blob([modsJson], { type: 'application/json' });
url = URL.createObjectURL(blob);
// Creating a link to download the JSON file temporalUrl = URL.createObjectURL(blob);
a = document.createElement('a'); // Creating a link to download the JSON file
a.href = url; temporalAnchor = document.createElement('a');
a.download = 'zen-themes-export.json'; temporalAnchor.href = temporalUrl;
temporalAnchor.download = 'zen-mods-export.json';
document.body.appendChild(temporalAnchor);
temporalAnchor.click();
temporalAnchor.remove();
document.body.appendChild(a);
a.click();
a.remove();
successBox.hidden = false; successBox.hidden = false;
} catch (error) { } catch (error) {
console.error('[ZenThemeMarketplaceParent:settings]: Error while exporting themes:', error); console.error('[ZenSettings:ZenMods]: Error while exporting mods:', error);
errorBox.hidden = false; errorBox.hidden = false;
} finally {
if (a) {
a.remove();
} }
if (url) {
URL.revokeObjectURL(url); if (temporalAnchor) {
temporalAnchor.remove();
} }
if (temporalUrl) {
URL.revokeObjectURL(temporalUrl);
} }
}, },
async _buildThemesList() { async _buildModsList() {
if (!this.themesList) { if (!this.modsList) {
return; return;
} }
if (this._doNotRebuildThemesList) { if (this._doNotRebuildModsList) {
this._doNotRebuildThemesList = false; this._doNotRebuildModsList = false;
return; return;
} }
const themes = await ZenThemesCommon.getThemes(); const mods = await gZenMods.getMods();
const browser = ZenMultiWindowFeature.currentBrowser; const browser = ZenMultiWindowFeature.currentBrowser;
const themeList = document.createElement('div'); const modList = document.createElement('div');
for (const theme of Object.values(themes).sort((a, b) => a.name.localeCompare(b.name))) { for (const mod of Object.values(mods).sort((a, b) => a.name.localeCompare(b.name))) {
const sanitizedName = `theme-${theme.name?.replaceAll(/\s/g, '-')?.replaceAll(/[^A-z_-]+/g, '')}`; const sanitizedName = gZenMods.sanitizeModName(mod.name);
const isThemeEnabled = theme.enabled === undefined || theme.enabled; const isModEnabled = mod.enabled === undefined || mod.enabled;
const fragment = window.MozXULElement.parseXULToFragment(` const fragment = window.MozXULElement.parseXULToFragment(`
<vbox class="zenThemeMarketplaceItem"> <vbox class="zenThemeMarketplaceItem">
<vbox class="zenThemeMarketplaceItemContent"> <vbox class="zenThemeMarketplaceItemContent">
@ -287,14 +285,14 @@ var gZenMarketplaceManager = {
<description class="description-deemphasized zenThemeMarketplaceItemDescription"></description> <description class="description-deemphasized zenThemeMarketplaceItemDescription"></description>
</vbox> </vbox>
<hbox class="zenThemeMarketplaceItemActions"> <hbox class="zenThemeMarketplaceItemActions">
${theme.preferences ? `<button id="zenThemeMarketplaceItemConfigureButton-${sanitizedName}" class="zenThemeMarketplaceItemConfigureButton" hidden="true"></button>` : ''} ${mod.preferences ? `<button id="zenThemeMarketplaceItemConfigureButton-${sanitizedName}" class="zenThemeMarketplaceItemConfigureButton" hidden="true"></button>` : ''}
${theme.homepage ? `<button id="zenThemeMarketplaceItemHomePageLink-${sanitizedName}" class="zenThemeMarketplaceItemHomepageButton" zen-theme-id="${theme.id}"></button>` : ''} ${mod.homepage ? `<button id="zenThemeMarketplaceItemHomePageLink-${sanitizedName}" class="zenThemeMarketplaceItemHomepageButton" zen-mod-id="${mod.id}"></button>` : ''}
<button class="zenThemeMarketplaceItemUninstallButton" data-l10n-id="zen-theme-marketplace-remove-button" zen-theme-id="${theme.id}"></button> <button class="zenThemeMarketplaceItemUninstallButton" data-l10n-id="zen-theme-marketplace-remove-button" zen-mod-id="${mod.id}"></button>
</hbox> </hbox>
</vbox> </vbox>
`); `);
const themeName = `${theme.name} (v${theme.version || '1.0.0'})`; const modName = `${mod.name} (v${mod.version ?? '1.0.0'})`;
const base = fragment.querySelector('.zenThemeMarketplaceItem'); const base = fragment.querySelector('.zenThemeMarketplaceItem');
const baseHeader = fragment.querySelector('#zenThemeMarketplaceItemContentHeader'); const baseHeader = fragment.querySelector('#zenThemeMarketplaceItemContentHeader');
@ -309,7 +307,7 @@ var gZenMarketplaceManager = {
mainDialogDiv.className = 'zenThemeMarketplaceItemPreferenceDialog'; mainDialogDiv.className = 'zenThemeMarketplaceItemPreferenceDialog';
headerDiv.className = 'zenThemeMarketplaceItemPreferenceDialogTopBar'; headerDiv.className = 'zenThemeMarketplaceItemPreferenceDialogTopBar';
headerTitle.textContent = themeName; headerTitle.textContent = modName;
browser.document.l10n.setAttributes(headerTitle, 'zen-theme-marketplace-theme-header-title', { browser.document.l10n.setAttributes(headerTitle, 'zen-theme-marketplace-theme-header-title', {
name: sanitizedName, name: sanitizedName,
}); });
@ -320,10 +318,10 @@ var gZenMarketplaceManager = {
contentDiv.className = 'zenThemeMarketplaceItemPreferenceDialogContent'; contentDiv.className = 'zenThemeMarketplaceItemPreferenceDialogContent';
mozToggle.className = 'zenThemeMarketplaceItemPreferenceToggle'; mozToggle.className = 'zenThemeMarketplaceItemPreferenceToggle';
mozToggle.pressed = isThemeEnabled; mozToggle.pressed = isModEnabled;
browser.document.l10n.setAttributes( browser.document.l10n.setAttributes(
mozToggle, mozToggle,
`zen-theme-marketplace-toggle-${isThemeEnabled ? 'enabled' : 'disabled'}-button` `zen-theme-marketplace-toggle-${isModEnabled ? 'enabled' : 'disabled'}-button`
); );
baseHeader.appendChild(mozToggle); baseHeader.appendChild(mozToggle);
@ -341,34 +339,34 @@ var gZenMarketplaceManager = {
}); });
mozToggle.addEventListener('toggle', async (event) => { mozToggle.addEventListener('toggle', async (event) => {
const themeId = event.target const modId = event.target
.closest('.zenThemeMarketplaceItem') .closest('.zenThemeMarketplaceItem')
.querySelector('.zenThemeMarketplaceItemUninstallButton') .querySelector('.zenThemeMarketplaceItemUninstallButton')
.getAttribute('zen-theme-id'); .getAttribute('zen-mod-id');
event.target.setAttribute('disabled', true); event.target.setAttribute('disabled', true);
if (!event.target.hasAttribute('pressed')) { if (!event.target.hasAttribute('pressed')) {
await this.disableTheme(themeId); await this.disableMod(modId);
browser.document.l10n.setAttributes( browser.document.l10n.setAttributes(
mozToggle, mozToggle,
'zen-theme-marketplace-toggle-disabled-button' 'zen-theme-marketplace-toggle-disabled-button'
); );
if (theme.preferences) { if (mod.preferences) {
document document
.getElementById(`zenThemeMarketplaceItemConfigureButton-${sanitizedName}`) .getElementById(`zenThemeMarketplaceItemConfigureButton-${sanitizedName}`)
.setAttribute('hidden', true); .setAttribute('hidden', true);
} }
} else { } else {
await this.enableTheme(themeId); await this.enableMod(modId);
browser.document.l10n.setAttributes( browser.document.l10n.setAttributes(
mozToggle, mozToggle,
'zen-theme-marketplace-toggle-enabled-button' 'zen-theme-marketplace-toggle-enabled-button'
); );
if (theme.preferences) { if (mod.preferences) {
document document
.getElementById(`zenThemeMarketplaceItemConfigureButton-${sanitizedName}`) .getElementById(`zenThemeMarketplaceItemConfigureButton-${sanitizedName}`)
.removeAttribute('hidden'); .removeAttribute('hidden');
@ -380,8 +378,8 @@ var gZenMarketplaceManager = {
}, 400); }, 400);
}); });
fragment.querySelector('.zenThemeMarketplaceItemTitle').textContent = themeName; fragment.querySelector('.zenThemeMarketplaceItemTitle').textContent = modName;
fragment.querySelector('.zenThemeMarketplaceItemDescription').textContent = theme.description; fragment.querySelector('.zenThemeMarketplaceItemDescription').textContent = mod.description;
fragment fragment
.querySelector('.zenThemeMarketplaceItemUninstallButton') .querySelector('.zenThemeMarketplaceItemUninstallButton')
.addEventListener('click', async (event) => { .addEventListener('click', async (event) => {
@ -393,34 +391,34 @@ var gZenMarketplaceManager = {
return; return;
} }
await this.removeTheme(event.target.getAttribute('zen-theme-id')); await this.removeMod(event.target.getAttribute('zen-mod-id'));
}); });
if (theme.homepage) { if (mod.homepage) {
const homepageButton = fragment.querySelector('.zenThemeMarketplaceItemHomepageButton'); const homepageButton = fragment.querySelector('.zenThemeMarketplaceItemHomepageButton');
homepageButton.addEventListener('click', () => { homepageButton.addEventListener('click', () => {
// open the homepage url in a new tab // open the homepage url in a new tab
const url = theme.homepage; const url = mod.homepage;
window.open(url, '_blank'); window.open(url, '_blank');
}); });
} }
if (theme.preferences) { if (mod.preferences) {
fragment fragment
.querySelector('.zenThemeMarketplaceItemConfigureButton') .querySelector('.zenThemeMarketplaceItemConfigureButton')
.addEventListener('click', () => { .addEventListener('click', () => {
dialog.showModal(); dialog.showModal();
}); });
if (isThemeEnabled) { if (isModEnabled) {
fragment fragment
.querySelector('.zenThemeMarketplaceItemConfigureButton') .querySelector('.zenThemeMarketplaceItemConfigureButton')
.removeAttribute('hidden'); .removeAttribute('hidden');
} }
} }
const preferences = await ZenThemesCommon.getThemePreferences(theme); const preferences = await gZenMods.getModPreferences(mod);
if (preferences.length > 0) { if (preferences.length > 0) {
const preferencesWrapper = document.createXULElement('vbox'); const preferencesWrapper = document.createXULElement('vbox');
@ -472,7 +470,7 @@ var gZenMarketplaceManager = {
if (!['string', 'number'].includes(valueType)) { if (!['string', 'number'].includes(valueType)) {
console.log( console.log(
`[ZenThemeMarketplaceParent:settings]: Warning, invalid data type received (${valueType}), skipping.` `[ZenSettings:ZenMods]: Warning, invalid data type received (${valueType}), skipping.`
); );
continue; continue;
} }
@ -584,7 +582,7 @@ var gZenMarketplaceManager = {
input.addEventListener( input.addEventListener(
'change', 'change',
ZenThemesCommon.debounce((event) => { gZenMods.debounce((event) => {
const value = event.target.value; const value = event.target.value;
Services.prefs.setStringPref(property, value); Services.prefs.setStringPref(property, value);
@ -618,18 +616,18 @@ var gZenMarketplaceManager = {
default: default:
console.log( console.log(
`[ZenThemeMarketplaceParent:settings]: Warning, unknown preference type received (${type}), skipping.` `[ZenSettings:ZenMods]: Warning, unknown preference type received (${type}), skipping.`
); );
continue; continue;
} }
} }
contentDiv.appendChild(preferencesWrapper); contentDiv.appendChild(preferencesWrapper);
} }
themeList.appendChild(fragment); modList.appendChild(fragment);
} }
this.themesList.replaceChildren(...themeList.children); this.modsList.replaceChildren(...modList.children);
themeList.remove(); modList.remove();
}, },
}; };
@ -637,6 +635,19 @@ const kZenExtendedSidebar = 'zen.view.sidebar-expanded';
const kZenSingleToolbar = 'zen.view.use-single-toolbar'; const kZenSingleToolbar = 'zen.view.use-single-toolbar';
var gZenLooksAndFeel = { var gZenLooksAndFeel = {
kZenColors: [
'#aac7ff',
'#74d7cb',
'#a0d490',
'#dec663',
'#ffb787',
'#dec1b1',
'#ffb1c0',
'#ddbfc3',
'#f6b0ea',
'#d4bbff',
],
init() { init() {
if (this.__hasInitialized) return; if (this.__hasInitialized) return;
this.__hasInitialized = true; this.__hasInitialized = true;
@ -738,7 +749,8 @@ var gZenLooksAndFeel = {
_initializeColorPicker(accentColor) { _initializeColorPicker(accentColor) {
let elem = document.getElementById('zenLooksAndFeelColorOptions'); let elem = document.getElementById('zenLooksAndFeelColorOptions');
elem.innerHTML = ''; elem.innerHTML = '';
for (let color of ZenThemesCommon.kZenColors) {
for (let color of this.kZenColors) {
let colorElemParen = document.createElement('div'); let colorElemParen = document.createElement('div');
let colorElem = document.createElement('div'); let colorElem = document.createElement('div');
colorElemParen.classList.add('zenLooksAndFeelColorOptionParen'); colorElemParen.classList.add('zenLooksAndFeelColorOptionParen');
@ -762,7 +774,7 @@ var gZenLooksAndFeel = {
}, },
_getInitialAccentColor() { _getInitialAccentColor() {
return Services.prefs.getStringPref('zen.theme.accent-color', ZenThemesCommon.kZenColors[0]); return Services.prefs.getStringPref('zen.theme.accent-color', this.kZenColors[0]);
}, },
}; };
@ -981,6 +993,9 @@ var gZenCKSSettings = {
sibling.remove(); sibling.remove();
} }
} }
if (target.classList.contains(`${ZEN_CKS_INPUT_FIELD_CLASS}-not-set`)) {
target.label = 'Not set';
}
}); });
const groupElem = wrapper.querySelector(`[data-group="${ZEN_CKS_GROUP_PREFIX}-${group}"]`); const groupElem = wrapper.querySelector(`[data-group="${ZEN_CKS_GROUP_PREFIX}-${group}"]`);
@ -1038,6 +1053,7 @@ var gZenCKSSettings = {
shortcut = shortcut.replace(/Ctrl|Control|Shift|Alt|Option|Cmd|Meta/, ''); // Remove all modifiers shortcut = shortcut.replace(/Ctrl|Control|Shift|Alt|Option|Cmd|Meta/, ''); // Remove all modifiers
if (shortcut == 'Tab' && !modifiersActive) { if (shortcut == 'Tab' && !modifiersActive) {
input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-not-set`);
input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-editing`); input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-editing`);
this._latestValidKey = null; this._latestValidKey = null;
return; return;
@ -1065,6 +1081,9 @@ var gZenCKSSettings = {
input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-editing`); input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-editing`);
this._editDone(this._latestValidKey, this._latestModifier); this._editDone(this._latestValidKey, this._latestModifier);
if (this.name == 'Not set') {
input.classList.add(`${ZEN_CKS_INPUT_FIELD_CLASS}-not-set`);
}
this._latestValidKey = null; this._latestValidKey = null;
this._latestModifier = null; this._latestModifier = null;
input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-invalid`); input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-invalid`);
@ -1086,6 +1105,10 @@ var gZenCKSSettings = {
this._latestValidKey = null; this._latestValidKey = null;
this._latestModifier = null; this._latestModifier = null;
this._hasSafed = true; this._hasSafed = true;
const sibling = input.nextElementSibling;
if (sibling && sibling.classList.contains(`${ZEN_CKS_CLASS_BASE}-conflict`)) {
sibling.remove();
}
return; return;
} }
@ -1209,4 +1232,9 @@ Preferences.addAll([
type: 'bool', type: 'bool',
default: false, default: false,
}, },
{
id: 'zen.mods.auto-update',
type: 'bool',
default: true,
},
]); ]);

View file

@ -1,5 +1,4 @@
<script src="chrome://browser/content/zen-components/ZenCommonUtils.mjs" defer=""/> <script src="chrome://browser/content/zen-components/ZenCommonUtils.mjs" defer=""/>
<script src="chrome://browser/content/zen-components/ZenThemesCommon.mjs" defer=""/>
<html:template id="template-paneZenMarketplace"> <html:template id="template-paneZenMarketplace">
<hbox id="ZenMarketplaceCategory" <hbox id="ZenMarketplaceCategory"
class="subcategory" class="subcategory"
@ -21,6 +20,10 @@
<button id="zenThemeMarketplaceCheckForUpdates" data-l10n-id="zen-theme-marketplace-check-for-updates-button" /> <button id="zenThemeMarketplaceCheckForUpdates" data-l10n-id="zen-theme-marketplace-check-for-updates-button" />
</hbox> </hbox>
<checkbox id="zenWorkspacesForceContainerTabsToWorkspace"
data-l10n-id="zen-themes-auto-update"
preference="zen.mods.auto-update"/>
<description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-updates-success" hidden="true" id="zenThemeMarketplaceUpdatesSuccess" /> <description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-updates-success" hidden="true" id="zenThemeMarketplaceUpdatesSuccess" />
<description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-updates-failure" hidden="true" id="zenThemeMarketplaceUpdatesFailure" /> <description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-updates-failure" hidden="true" id="zenThemeMarketplaceUpdatesFailure" />

View file

@ -31,26 +31,6 @@
<html:h1 data-l10n-id="pane-zen-tabs-unloader-title"/> <html:h1 data-l10n-id="pane-zen-tabs-unloader-title"/>
</hbox> </hbox>
<groupbox id="zenTabsUnloadGroup" data-category="paneZenTabManagement" hidden="true" class="highlighting-group">
<label><html:h2 data-l10n-id="zen-tabs-unloader-header"/></label>
<description class="description-deemphasized" data-l10n-id="zen-tabs-unloader-description" />
<checkbox id="zenTabsUnloadActivate"
data-l10n-id="zen-tabs-unloader-enabled"
preference="zen.tab-unloader.enabled"/>
<label><html:h2 data-l10n-id="zen-tabs-unloader-unload-delay"/></label>
<hbox id="zenTabsUnloadDelayContainer">
<description class="description-deemphasized" data-l10n-id="zen-tabs-unloader-unload-delay-description" />
<html:input id="zenTabsUnloadDelay"
type="number"
min="1"
max="1000"
preference="zen.tab-unloader.timeout-minutes"/>
</hbox>
</groupbox>
<hbox id="zenPinnedTabsManagerCategory" <hbox id="zenPinnedTabsManagerCategory"
class="subcategory" class="subcategory"
hidden="true" hidden="true"

View file

@ -0,0 +1,13 @@
diff --git a/browser/components/search/SearchUIUtils.sys.mjs b/browser/components/search/SearchUIUtils.sys.mjs
index ecebaad93acfc9eb7dfd9d9f56fec2e1a4abe392..8bb1348b3258dbc518d23ec39181a81f87fc8c1e 100644
--- a/browser/components/search/SearchUIUtils.sys.mjs
+++ b/browser/components/search/SearchUIUtils.sys.mjs
@@ -403,7 +403,7 @@ export var SearchUIUtils = {
triggeringSearchEngine: engine.name,
},
});
-
+ window.gZenGlanceManager?.onSearchSelectCommand(where);
return { engine, url: submission.uri };
},

View file

@ -1,8 +1,8 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 5633e5032f5d50c70512187d27e045b579978927..6b9e56cb62a4812925ff812763ea9b0e6a478202 100644 index 8c6047e1ada5a22e57e1e665965237c9e22641d7..8d0585e738a5a758ebbddfa0787c71d634dadd4d 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs --- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs +++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -2081,7 +2081,6 @@ var SessionStoreInternal = { @@ -2088,7 +2088,6 @@ var SessionStoreInternal = {
if (closedWindowState) { if (closedWindowState) {
let newWindowState; let newWindowState;
if ( if (
@ -10,7 +10,7 @@ index 5633e5032f5d50c70512187d27e045b579978927..6b9e56cb62a4812925ff812763ea9b0e
!lazy.SessionStartup.willRestore() !lazy.SessionStartup.willRestore()
) { ) {
// We want to split the window up into pinned tabs and unpinned tabs. // We want to split the window up into pinned tabs and unpinned tabs.
@@ -2296,11 +2295,9 @@ var SessionStoreInternal = { @@ -2303,11 +2302,9 @@ var SessionStoreInternal = {
tabbrowser.selectedTab.label; tabbrowser.selectedTab.label;
} }
@ -22,7 +22,7 @@ index 5633e5032f5d50c70512187d27e045b579978927..6b9e56cb62a4812925ff812763ea9b0e
// Store the window's close date to figure out when each individual tab // Store the window's close date to figure out when each individual tab
// was closed. This timestamp should allow re-arranging data based on how // was closed. This timestamp should allow re-arranging data based on how
@@ -3202,7 +3199,7 @@ var SessionStoreInternal = { @@ -3216,7 +3213,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) { if (!isPrivateWindow && tabState.isPrivate) {
return; return;
} }
@ -31,17 +31,19 @@ index 5633e5032f5d50c70512187d27e045b579978927..6b9e56cb62a4812925ff812763ea9b0e
return; return;
} }
@@ -3911,6 +3908,9 @@ var SessionStoreInternal = { @@ -3925,6 +3922,11 @@ var SessionStoreInternal = {
Math.min(tabState.index, tabState.entries.length) Math.min(tabState.index, tabState.entries.length)
); );
tabState.pinned = false; tabState.pinned = false;
+ tabState.zenEssential = false; + tabState.zenEssential = false;
+ tabState.zenPinnedId = null; + tabState.zenPinnedId = null;
+ tabState.zenIsGlance = false;
+ tabState.zenGlanceId = null;
+ tabState.zenHasStaticLabel = false; + tabState.zenHasStaticLabel = false;
if (inBackground === false) { if (inBackground === false) {
aWindow.gBrowser.selectedTab = newTab; aWindow.gBrowser.selectedTab = newTab;
@@ -5225,7 +5225,7 @@ var SessionStoreInternal = { @@ -5239,7 +5241,7 @@ var SessionStoreInternal = {
} }
let workspaceID = aWindow.getWorkspaceID(); let workspaceID = aWindow.getWorkspaceID();
@ -50,12 +52,12 @@ index 5633e5032f5d50c70512187d27e045b579978927..6b9e56cb62a4812925ff812763ea9b0e
winData.workspaceID = workspaceID; winData.workspaceID = workspaceID;
} }
}, },
@@ -5416,14 +5416,15 @@ var SessionStoreInternal = { @@ -5430,14 +5432,15 @@ var SessionStoreInternal = {
} }
let tabbrowser = aWindow.gBrowser; let tabbrowser = aWindow.gBrowser;
- let tabs = tabbrowser.tabs; - let tabs = tabbrowser.tabs;
+ let tabs = aWindow.ZenWorkspaces.allStoredTabs; + let tabs = aWindow.gZenWorkspaces.allStoredTabs;
/** @type {WindowStateData} */ /** @type {WindowStateData} */
let winData = this._windows[aWindow.__SSi]; let winData = this._windows[aWindow.__SSi];
let tabsData = (winData.tabs = []); let tabsData = (winData.tabs = []);
@ -68,16 +70,29 @@ index 5633e5032f5d50c70512187d27e045b579978927..6b9e56cb62a4812925ff812763ea9b0e
continue; continue;
} }
let tabData = lazy.TabState.collect(tab, TAB_CUSTOM_VALUES.get(tab)); let tabData = lazy.TabState.collect(tab, TAB_CUSTOM_VALUES.get(tab));
@@ -5442,7 +5443,7 @@ var SessionStoreInternal = { @@ -5456,8 +5459,8 @@ var SessionStoreInternal = {
// We don't store the Firefox View tab in Session Store, so if it was the last selected "tab" when // We don't store the Firefox View tab in Session Store, so if it was the last selected "tab" when
// a window is closed, point to the first item in the tab strip instead (it will never be the Firefox View tab, // a window is closed, point to the first item in the tab strip instead (it will never be the Firefox View tab,
// since it's only inserted into the tab strip after it's selected). // since it's only inserted into the tab strip after it's selected).
- if (aWindow.FirefoxViewHandler.tab?.selected) { - if (aWindow.FirefoxViewHandler.tab?.selected) {
- selectedIndex = 1;
+ if (aWindow.FirefoxViewHandler.tab?.selected || tabbrowser.selectedTab.hasAttribute("zen-empty-tab")) { + if (aWindow.FirefoxViewHandler.tab?.selected || tabbrowser.selectedTab.hasAttribute("zen-empty-tab")) {
selectedIndex = 1; + selectedIndex = 0;
winData.title = tabbrowser.tabs[0].label; winData.title = tabbrowser.tabs[0].label;
} }
@@ -5599,6 +5600,7 @@ var SessionStoreInternal = { winData.selected = selectedIndex;
@@ -5569,8 +5572,8 @@ var SessionStoreInternal = {
// selectTab represents.
let selectTab = 0;
if (overwriteTabs) {
- selectTab = parseInt(winData.selected || 1, 10);
- selectTab = Math.max(selectTab, 1);
+ selectTab = parseInt(winData.selected || 0, 10);
+ selectTab = Math.max(selectTab, 0);
selectTab = Math.min(selectTab, winData.tabs.length);
}
@@ -5613,6 +5616,7 @@ var SessionStoreInternal = {
winData.tabs, winData.tabs,
winData.groups ?? [] winData.groups ?? []
); );
@ -85,12 +100,13 @@ index 5633e5032f5d50c70512187d27e045b579978927..6b9e56cb62a4812925ff812763ea9b0e
this._log.debug( this._log.debug(
`restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs` `restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs`
); );
@@ -6148,8 +6150,23 @@ var SessionStoreInternal = { @@ -6162,6 +6166,22 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring // Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events. // attributes that may trigger external events.
+ if (tabData.zenEssential) { + if (tabData.zenEssential) {
+ tab.setAttribute("zen-essential", "true"); + tab.setAttribute("zen-essential", "true");
+ tabData.pinned = true; // Essential tabs are always pinned.
+ } + }
+ if (tabData.zenIsEmpty) { + if (tabData.zenIsEmpty) {
+ tab.setAttribute("zen-empty-tab", "true"); + tab.setAttribute("zen-empty-tab", "true");
@ -105,8 +121,5 @@ index 5633e5032f5d50c70512187d27e045b579978927..6b9e56cb62a4812925ff812763ea9b0e
+ tab.setAttribute("zenDefaultUserContextId", true); + tab.setAttribute("zenDefaultUserContextId", true);
+ } + }
- if (tabData.pinned) { if (tabData.pinned) {
+ if (tabData.pinned || tabData.zenEssential) {
tabbrowser.pinTab(tab); tabbrowser.pinTab(tab);
} else {
tabbrowser.unpinTab(tab);

View file

@ -1,8 +1,8 @@
diff --git a/browser/components/sessionstore/TabState.sys.mjs b/browser/components/sessionstore/TabState.sys.mjs diff --git a/browser/components/sessionstore/TabState.sys.mjs b/browser/components/sessionstore/TabState.sys.mjs
index 8f7ed557e6aa61e7e16ed4a8d785ad5fe651b3d8..254849e13f7566029dc780c45e376e0f0d427cb5 100644 index 8f7ed557e6aa61e7e16ed4a8d785ad5fe651b3d8..76f4cf5aef30cb580ef0295fe6928b5a6a362f4b 100644
--- a/browser/components/sessionstore/TabState.sys.mjs --- a/browser/components/sessionstore/TabState.sys.mjs
+++ b/browser/components/sessionstore/TabState.sys.mjs +++ b/browser/components/sessionstore/TabState.sys.mjs
@@ -84,6 +84,16 @@ class _TabState { @@ -84,6 +84,18 @@ class _TabState {
tabData.groupId = tab.group.id; tabData.groupId = tab.group.id;
} }
@ -15,6 +15,8 @@ index 8f7ed557e6aa61e7e16ed4a8d785ad5fe651b3d8..254849e13f7566029dc780c45e376e0f
+ tabData.zenPinnedIcon = tab.getAttribute("zen-pinned-icon"); + tabData.zenPinnedIcon = tab.getAttribute("zen-pinned-icon");
+ tabData.zenIsEmpty = tab.hasAttribute("zen-empty-tab"); + tabData.zenIsEmpty = tab.hasAttribute("zen-empty-tab");
+ tabData.zenHasStaticLabel = tab.hasAttribute("zen-has-static-label"); + tabData.zenHasStaticLabel = tab.hasAttribute("zen-has-static-label");
+ tabData.zenGlanceId = tab.getAttribute("glance-id");
+ tabData.zenIsGlance = tab.hasAttribute("zen-glance-tab");
+ +
tabData.searchMode = tab.ownerGlobal.gURLBar.getSearchMode(browser, true); tabData.searchMode = tab.ownerGlobal.gURLBar.getSearchMode(browser, true);

View file

@ -0,0 +1,13 @@
diff --git a/browser/components/tabbrowser/TabUnloader.sys.mjs b/browser/components/tabbrowser/TabUnloader.sys.mjs
index 44846cc902fd3fc17d12be38ac9abccb47a12f23..c715c7cf47486066b3fd6f92bf78bc8a720759bc 100644
--- a/browser/components/tabbrowser/TabUnloader.sys.mjs
+++ b/browser/components/tabbrowser/TabUnloader.sys.mjs
@@ -52,7 +52,7 @@ let CRITERIA_WEIGHT = 1;
*/
let DefaultTabUnloaderMethods = {
isNonDiscardable(tab, weight) {
- if (tab.undiscardable || tab.selected) {
+ if (tab.undiscardable || tab.selected || tab.zenModeActive) {
return weight;
}

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d82582e32009 100644 index f43ab1cf6257ff1a9c9aa522a0180fd9bbfe4036..d9714c46de860243b06af7e8343d36b107efb855 100644
--- a/browser/components/tabbrowser/content/tab.js --- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js +++ b/browser/components/tabbrowser/content/tab.js
@@ -21,6 +21,7 @@ @@ -21,6 +21,7 @@
@ -21,7 +21,7 @@ index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d825
</hbox> </hbox>
</stack> </stack>
`; `;
@@ -175,7 +178,7 @@ @@ -180,7 +183,7 @@
} }
set _visuallySelected(val) { set _visuallySelected(val) {
@ -30,7 +30,7 @@ index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d825
return; return;
} }
@@ -211,7 +214,7 @@ @@ -216,7 +219,7 @@
} }
get visible() { get visible() {
@ -39,7 +39,7 @@ index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d825
} }
get hidden() { get hidden() {
@@ -282,7 +285,7 @@ @@ -287,7 +290,7 @@
return false; return false;
} }
@ -48,7 +48,7 @@ index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d825
} }
get lastAccessed() { get lastAccessed() {
@@ -454,6 +457,8 @@ @@ -459,6 +462,8 @@
this.style.MozUserFocus = "ignore"; this.style.MozUserFocus = "ignore";
} else if ( } else if (
event.target.classList.contains("tab-close-button") || event.target.classList.contains("tab-close-button") ||
@ -57,7 +57,18 @@ index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d825
event.target.classList.contains("tab-icon-overlay") || event.target.classList.contains("tab-icon-overlay") ||
event.target.classList.contains("tab-audio-button") event.target.classList.contains("tab-audio-button")
) { ) {
@@ -554,6 +559,7 @@ @@ -513,6 +518,10 @@
this.style.MozUserFocus = "";
}
+ get glanceTab() {
+ return this.querySelector("tab[zen-glance-tab]");
+ }
+
on_click(event) {
if (event.button != 0) {
return;
@@ -559,6 +568,7 @@
telemetrySource: lazy.TabMetrics.METRIC_SOURCE.TAB_STRIP, telemetrySource: lazy.TabMetrics.METRIC_SOURCE.TAB_STRIP,
}); });
} else { } else {
@ -65,7 +76,7 @@ index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d825
gBrowser.removeTab(this, { gBrowser.removeTab(this, {
animate: true, animate: true,
triggeringEvent: event, triggeringEvent: event,
@@ -564,6 +570,14 @@ @@ -569,6 +579,14 @@
// (see tabbrowser-tabs 'click' handler). // (see tabbrowser-tabs 'click' handler).
gBrowser.tabContainer._blockDblClick = true; gBrowser.tabContainer._blockDblClick = true;
} }
@ -80,7 +91,7 @@ index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d825
} }
on_dblclick(event) { on_dblclick(event) {
@@ -587,6 +601,8 @@ @@ -592,6 +610,8 @@
animate: true, animate: true,
triggeringEvent: event, triggeringEvent: event,
}); });

View file

@ -1,15 +1,11 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb6c1a0cf3 100644 index d5aa64842a35c6697263c63fd3a0571b64b01344..14f5bc046f2e54109bd3fd0402a8f8b598a513c2 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js --- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js +++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -415,11 +415,45 @@ @@ -413,11 +413,41 @@
return this.tabContainer.visibleTabs; return this.tabContainer.visibleTabs;
} }
+ zenInsertTabAtIndex(...args) {
+ return this.#insertTabAtElementIndex(...args);
+ }
+
+ get _numVisiblePinTabsWithoutCollapsed() { + get _numVisiblePinTabsWithoutCollapsed() {
+ let i = 0; + let i = 0;
+ for (let item of this.tabContainer.ariaFocusableItems) { + for (let item of this.tabContainer.ariaFocusableItems) {
@ -50,15 +46,15 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
} }
return i; return i;
} }
@@ -571,6 +605,7 @@ @@ -569,6 +599,7 @@
this.tabpanels.appendChild(panel); this.tabpanels.appendChild(panel);
let tab = this.tabs[0]; let tab = this.tabs[0];
+ ZenWorkspaces.handleInitialTab(tab, (!remoteType || remoteType === E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE) && !gZenUIManager.testingEnabled); + gZenWorkspaces.handleInitialTab(tab, (!remoteType || remoteType === E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE) && !gZenUIManager.testingEnabled);
tab.linkedPanel = uniqueId; tab.linkedPanel = uniqueId;
this._selectedTab = tab; this._selectedTab = tab;
this._selectedBrowser = browser; this._selectedBrowser = browser;
@@ -836,11 +871,13 @@ @@ -834,11 +865,13 @@
} }
this.showTab(aTab); this.showTab(aTab);
@ -68,14 +64,14 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
+ if (this.tabContainer.verticalMode && !handled) { + if (this.tabContainer.verticalMode && !handled) {
this.#handleTabMove(aTab, () => this.#handleTabMove(aTab, () =>
- this.verticalPinnedTabsContainer.appendChild(aTab) - this.verticalPinnedTabsContainer.appendChild(aTab)
+ aTab.hasAttribute("zen-essential") ? ZenWorkspaces.getEssentialsSection(aTab).appendChild(aTab) : this.verticalPinnedTabsContainer.insertBefore(aTab, this.verticalPinnedTabsContainer.lastChild) + aTab.hasAttribute("zen-essential") ? gZenWorkspaces.getEssentialsSection(aTab).appendChild(aTab) : this.verticalPinnedTabsContainer.insertBefore(aTab, this.verticalPinnedTabsContainer.lastChild)
); );
- } else { - } else {
+ } else if (!handled) { + } else if (!handled) {
this.moveTabTo(aTab, { this.moveTabTo(aTab, {
tabIndex: this.pinnedTabCount, tabIndex: this.pinnedTabCount,
forceUngrouped: true, forceUngrouped: true,
@@ -857,12 +894,15 @@ @@ -855,12 +888,15 @@
} }
if (this.tabContainer.verticalMode) { if (this.tabContainer.verticalMode) {
@ -87,12 +83,12 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
aTab.removeAttribute("pinned"); aTab.removeAttribute("pinned");
- this.tabContainer.arrowScrollbox.prepend(aTab); - this.tabContainer.arrowScrollbox.prepend(aTab);
+ if (!handled) { + if (!handled) {
+ ZenWorkspaces.activeWorkspaceStrip.prepend(aTab); + gZenWorkspaces.activeWorkspaceStrip.prepend(aTab);
+ } + }
}); });
} else { } else {
this.moveTabTo(aTab, { this.moveTabTo(aTab, {
@@ -1046,6 +1086,8 @@ @@ -1044,6 +1080,8 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"]; let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
@ -101,7 +97,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
if ( if (
aIconURL && aIconURL &&
!aLoadingPrincipal && !aLoadingPrincipal &&
@@ -1056,6 +1098,9 @@ @@ -1054,6 +1092,9 @@
); );
return; return;
} }
@ -111,7 +107,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
let browser = this.getBrowserForTab(aTab); let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL; browser.mIconURL = aIconURL;
@@ -1305,6 +1350,7 @@ @@ -1303,6 +1344,7 @@
if (!this._previewMode) { if (!this._previewMode) {
newTab.recordTimeFromUnloadToReload(); newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed(); newTab.updateLastAccessed();
@ -119,7 +115,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
oldTab.updateLastAccessed(); oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps. // if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) { if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -1457,6 +1503,9 @@ @@ -1455,6 +1497,9 @@
} }
let activeEl = document.activeElement; let activeEl = document.activeElement;
@ -129,7 +125,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
// If focus is on the old tab, move it to the new tab. // If focus is on the old tab, move it to the new tab.
if (activeEl == oldTab) { if (activeEl == oldTab) {
newTab.focus(); newTab.focus();
@@ -1780,7 +1829,8 @@ @@ -1778,7 +1823,8 @@
} }
_setTabLabel(aTab, aLabel, { beforeTabOpen, isContentTitle, isURL } = {}) { _setTabLabel(aTab, aLabel, { beforeTabOpen, isContentTitle, isURL } = {}) {
@ -139,7 +135,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
return false; return false;
} }
@@ -1888,7 +1938,7 @@ @@ -1886,7 +1932,7 @@
newIndex = this.selectedTab._tPos + 1; newIndex = this.selectedTab._tPos + 1;
} }
@ -148,7 +144,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
if (this.isTabGroupLabel(targetTab)) { if (this.isTabGroupLabel(targetTab)) {
throw new Error( throw new Error(
"Replacing a tab group label with a tab is not supported" "Replacing a tab group label with a tab is not supported"
@@ -2152,6 +2202,7 @@ @@ -2150,6 +2196,7 @@
uriIsAboutBlank, uriIsAboutBlank,
userContextId, userContextId,
skipLoad, skipLoad,
@ -156,7 +152,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
} = {}) { } = {}) {
let b = document.createXULElement("browser"); let b = document.createXULElement("browser");
// Use the JSM global to create the permanentKey, so that if the // Use the JSM global to create the permanentKey, so that if the
@@ -2225,8 +2276,7 @@ @@ -2223,8 +2270,7 @@
// we use a different attribute name for this? // we use a different attribute name for this?
b.setAttribute("name", name); b.setAttribute("name", name);
} }
@ -166,7 +162,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
b.setAttribute("transparent", "true"); b.setAttribute("transparent", "true");
} }
@@ -2391,7 +2441,7 @@ @@ -2389,7 +2435,7 @@
let panel = this.getPanel(browser); let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID(); let uniqueId = this._generateUniquePanelID();
@ -175,7 +171,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
aTab.linkedPanel = uniqueId; aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary. // Inject the <browser> into the DOM if necessary.
@@ -2450,8 +2500,8 @@ @@ -2448,8 +2494,8 @@
// If we transitioned from one browser to two browsers, we need to set // If we transitioned from one browser to two browsers, we need to set
// hasSiblings=false on both the existing browser and the new browser. // hasSiblings=false on both the existing browser and the new browser.
if (this.tabs.length == 2) { if (this.tabs.length == 2) {
@ -186,7 +182,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
} else { } else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1; aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
} }
@@ -2679,6 +2729,7 @@ @@ -2680,6 +2726,7 @@
schemelessInput, schemelessInput,
hasValidUserGestureActivation = false, hasValidUserGestureActivation = false,
textDirectiveUserActivation = false, textDirectiveUserActivation = false,
@ -194,20 +190,20 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
} = {} } = {}
) { ) {
// all callers of addTab that pass a params object need to pass // all callers of addTab that pass a params object need to pass
@@ -2689,6 +2740,12 @@ @@ -2690,6 +2737,12 @@
); );
} }
+ let hasZenDefaultUserContextId = false; + let hasZenDefaultUserContextId = false;
+ let zenForcedWorkspaceId = undefined; + let zenForcedWorkspaceId = undefined;
+ if (typeof ZenWorkspaces !== "undefined" && !_forZenEmptyTab) { + if (typeof gZenWorkspaces !== "undefined" && !_forZenEmptyTab) {
+ [userContextId, hasZenDefaultUserContextId, zenForcedWorkspaceId] = ZenWorkspaces.getContextIdIfNeeded(userContextId, fromExternal, allowInheritPrincipal); + [userContextId, hasZenDefaultUserContextId, zenForcedWorkspaceId] = gZenWorkspaces.getContextIdIfNeeded(userContextId, fromExternal, allowInheritPrincipal);
+ } + }
+ +
if (!UserInteraction.running("browser.tabs.opening", window)) { if (!UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.start("browser.tabs.opening", "initting", window); UserInteraction.start("browser.tabs.opening", "initting", window);
} }
@@ -2752,6 +2809,16 @@ @@ -2753,6 +2806,16 @@
noInitialLabel, noInitialLabel,
skipBackgroundNotify, skipBackgroundNotify,
}); });
@ -222,9 +218,9 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
+ t.setAttribute("zen-empty-tab", "true"); + t.setAttribute("zen-empty-tab", "true");
+ } + }
if (insertTab) { if (insertTab) {
if (typeof index == "number") { // Insert the tab into the tab container in the correct position.
elementIndex = this.#tabIndexToElementIndex(index); // For now, we support `index` as an alias for `tabIndex`.
@@ -2779,6 +2846,7 @@ @@ -2783,6 +2846,7 @@
openWindowInfo, openWindowInfo,
skipLoad, skipLoad,
triggeringRemoteType, triggeringRemoteType,
@ -232,7 +228,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
})); }));
if (focusUrlBar) { if (focusUrlBar) {
@@ -2898,6 +2966,12 @@ @@ -2902,6 +2966,12 @@
} }
} }
@ -245,35 +241,22 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
// Additionally send pinned tab events // Additionally send pinned tab events
if (pinned) { if (pinned) {
this._notifyPinnedStatus(t); this._notifyPinnedStatus(t);
@@ -2945,12 +3019,15 @@ @@ -2990,10 +3060,10 @@
* @param {string} [label=] isAdoptingGroup = false,
* @returns {MozTabbrowserTabGroup}
*/
- _createTabGroup(id, color, collapsed, label = "") {
+ _createTabGroup(id, color, collapsed, label = "", pinned = false, essential = false, splitViewGroup = false) {
let group = document.createXULElement("tab-group", { is: "tab-group" });
group.id = id;
group.collapsed = collapsed;
group.color = color;
group.label = label;
+ group.pinned = pinned;
+ group.essential = essential;
+ if (splitViewGroup) group.setAttribute('split-view-group', true);
return group;
}
@@ -2993,6 +3070,7 @@
insertBefore = null,
isUserTriggered = false, isUserTriggered = false,
telemetryUserCreateSource = "unknown", telemetryUserCreateSource = "unknown",
+ forSplitView = false, + forSplitView = false,
} = {} } = {}
) { ) {
if (!tabs?.length) { if (!tabs?.length) {
@@ -3011,7 +3089,12 @@ - throw new Error("Cannot create tab group with zero tabs");
id = `${Date.now()}-${Math.round(Math.random() * 100)}`;
} }
let group = this._createTabGroup(id, color, false, label);
if (!color) {
@@ -3014,7 +3084,12 @@
label,
isAdoptingGroup
);
- this.tabContainer.insertBefore( - this.tabContainer.insertBefore(
+ if (forSplitView) { + if (forSplitView) {
+ group.setAttribute('split-view-group', true); + group.setAttribute('split-view-group', true);
@ -284,7 +267,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
group, group,
insertBefore?.group ?? insertBefore insertBefore?.group ?? insertBefore
); );
@@ -3342,6 +3425,7 @@ @@ -3303,6 +3378,7 @@
openWindowInfo, openWindowInfo,
skipLoad, skipLoad,
triggeringRemoteType, triggeringRemoteType,
@ -292,7 +275,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
} }
) { ) {
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and // If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
@@ -3411,6 +3495,7 @@ @@ -3372,6 +3448,7 @@
openWindowInfo, openWindowInfo,
name, name,
skipLoad, skipLoad,
@ -300,7 +283,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
}); });
} }
@@ -3599,7 +3684,7 @@ @@ -3560,7 +3637,7 @@
// Add a new tab if needed. // Add a new tab if needed.
if (!tab) { if (!tab) {
let createLazyBrowser = let createLazyBrowser =
@ -309,37 +292,17 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
let url = "about:blank"; let url = "about:blank";
if (tabData.entries?.length) { if (tabData.entries?.length) {
@@ -3637,7 +3722,29 @@ @@ -3598,7 +3675,8 @@
skipLoad: true, skipLoad: true,
preferredRemoteType, preferredRemoteType,
}); });
-
+ tab._originalUrl = url; + tab._originalUrl = url;
+ gZenSessionStore.restoreInitialTabData(tab, tabData);
+ if (tabData.zenWorkspace) {
+ tab.setAttribute("zen-workspace-id", tabData.zenWorkspace);
+ }
+ if (tabData.zenPinnedId) {
+ tab.setAttribute("zen-pin-id", tabData.zenPinnedId);
+ }
+ if (tabData.zenIsEmpty) {
+ tab.setAttribute("zen-empty-tab", "true");
+ }
+ if (tabData.zenHasStaticLabel) {
+ tab.setAttribute("zen-has-static-label", "true");
+ }
+ if (tabData.zenEssential) {
+ tab.setAttribute("zen-essential", "true");
+ }
+ if (tabData.zenDefaultUserContextId) {
+ tab.setAttribute("zenDefaultUserContextId", "true");
+ }
+ if (tabData.zenPinnedEntry) {
+ tab.setAttribute("zen-pinned-entry", tabData.zenPinnedEntry);
+ }
if (select) { if (select) {
tabToSelect = tab; tabToSelect = tab;
} }
@@ -3661,7 +3768,8 @@ @@ -3622,7 +3700,8 @@
// needs calling: // needs calling:
shouldUpdateForPinnedTabs = true; shouldUpdateForPinnedTabs = true;
} }
@ -349,7 +312,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
let { groupId } = tabData; let { groupId } = tabData;
const tabGroup = tabGroupWorkingData.get(groupId); const tabGroup = tabGroupWorkingData.get(groupId);
// if a tab refers to a tab group we don't know, skip any group // if a tab refers to a tab group we don't know, skip any group
@@ -3675,7 +3783,10 @@ @@ -3636,7 +3715,10 @@
tabGroup.stateData.id, tabGroup.stateData.id,
tabGroup.stateData.color, tabGroup.stateData.color,
tabGroup.stateData.collapsed, tabGroup.stateData.collapsed,
@ -361,45 +324,45 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
); );
tabsFragment.appendChild(tabGroup.node); tabsFragment.appendChild(tabGroup.node);
} }
@@ -3723,8 +3834,16 @@ @@ -3684,8 +3766,16 @@
// to remove the old selected tab. // to remove the old selected tab.
if (tabToSelect) { if (tabToSelect) {
let leftoverTab = this.selectedTab; let leftoverTab = this.selectedTab;
- this.selectedTab = tabToSelect; - this.selectedTab = tabToSelect;
- this.removeTab(leftoverTab); - this.removeTab(leftoverTab);
+ ZenWorkspaces._tabToRemoveForEmpty = leftoverTab; + gZenWorkspaces._tabToRemoveForEmpty = leftoverTab;
+ if (Services.prefs.getBoolPref("zen.workspaces.continue-where-left-off")) { + if (Services.prefs.getBoolPref("zen.workspaces.continue-where-left-off")) {
+ ZenWorkspaces._tabToSelect = selectTab - 1; + gZenWorkspaces._tabToSelect = selectTab - 1;
+ } + }
+ if (ZenWorkspaces._initialTab && !gZenVerticalTabsManager._canReplaceNewTab) { + if (gZenWorkspaces._initialTab && !gZenVerticalTabsManager._canReplaceNewTab) {
+ ZenWorkspaces._initialTab._shouldRemove = true; + gZenWorkspaces._initialTab._shouldRemove = true;
+ } + }
+ } + }
+ else { + else {
+ ZenWorkspaces._tabToRemoveForEmpty = this.selectedTab; + gZenWorkspaces._tabToRemoveForEmpty = this.selectedTab;
} }
if (tabs.length > 1 || !tabs[0].selected) { if (tabs.length > 1 || !tabs[0].selected) {
@@ -3912,7 +4031,7 @@ @@ -3881,7 +3971,7 @@
// Ensure we have an index if one was not provided. // Ensure we have an index if one was not provided.
if (typeof index != "number") { if (typeof elementIndex != "number" && typeof tabIndex != "number") {
// Move the new tab after another tab if needed, to the end otherwise. // Move the new tab after another tab if needed, to the end otherwise.
- index = Infinity; - elementIndex = Infinity;
+ index = Services.prefs.getBoolPref("zen.view.show-newtab-button-top") ? this._numVisiblePinTabsWithoutCollapsed : Infinity; + elementIndex = Services.prefs.getBoolPref("zen.view.show-newtab-button-top") ? this._numVisiblePinTabsWithoutCollapsed : Infinity;
if ( if (
!bulkOrderedOpen && !bulkOrderedOpen &&
((openerTab && ((openerTab &&
@@ -3935,7 +4054,7 @@ @@ -3904,7 +3994,7 @@
) { ) {
index = Infinity; elementIndex = Infinity;
} else if (previousTab.visible) { } else if (previousTab.visible) {
- index = previousTab.elementIndex + 1; - elementIndex = previousTab.elementIndex + 1;
+ index = (typeof previousTab.elementIndex === 'undefined') ? index : (previousTab.elementIndex + 1); + elementIndex = (typeof previousTab.elementIndex === 'undefined') ? index : (previousTab.elementIndex + 1);
} else if (previousTab == FirefoxViewHandler.tab) { } else if (previousTab == FirefoxViewHandler.tab) {
index = 0; elementIndex = 0;
}
@@ -3932,14 +4022,14 @@
} }
@@ -3958,18 +4077,18 @@
// Ensure index is within bounds. // Ensure index is within bounds.
if (tab.pinned) { if (tab.pinned) {
- index = Math.max(index, 0); - index = Math.max(index, 0);
@ -409,12 +372,16 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
} else { } else {
- index = Math.max(index, this.pinnedTabCount); - index = Math.max(index, this.pinnedTabCount);
+ index = Math.max(index, this._numVisiblePinTabsWithoutCollapsed); + index = Math.max(index, this._numVisiblePinTabsWithoutCollapsed);
index = Math.min(index, this.tabContainer.ariaFocusableItems.length); index = Math.min(index, allItems.length);
} }
/** @type {MozTabbrowserTab|undefined} */ /** @type {MozTabbrowserTab|undefined} */
- let itemAfter = this.tabContainer.ariaFocusableItems.at(index); - let itemAfter = allItems.at(index);
+ let itemAfter = this.tabContainer.ariaFocusableItems.filter(tab => !tab.hasAttribute("zen-glance-tab")).at(index); + let itemAfter = gZenGlanceManager.getTabOrGlanceParent(allItems.at(index));
// Prevent a flash of unstyled content by setting up the tab content
// and inherited attributes before appending it (see Bug 1592054):
@@ -3947,7 +4037,7 @@
this.tabContainer._invalidateCachedTabs(); this.tabContainer._invalidateCachedTabs();
- if (tabGroup) { - if (tabGroup) {
@ -422,7 +389,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
if (this.isTab(itemAfter) && itemAfter.group == tabGroup) { if (this.isTab(itemAfter) && itemAfter.group == tabGroup) {
// Place at the front of, or between tabs in, the same tab group // Place at the front of, or between tabs in, the same tab group
this.tabContainer.insertBefore(tab, itemAfter); this.tabContainer.insertBefore(tab, itemAfter);
@@ -4290,6 +4409,9 @@ @@ -4268,6 +4358,9 @@
return; return;
} }
@ -432,7 +399,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
this.removeTabs(selectedTabs, { telemetrySource }); this.removeTabs(selectedTabs, { telemetrySource });
} }
@@ -4542,6 +4664,7 @@ @@ -4520,6 +4613,7 @@
telemetrySource, telemetrySource,
} = {} } = {}
) { ) {
@ -440,7 +407,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs // When 'closeWindowWithLastTab' pref is enabled, closing all tabs
// can be considered equivalent to closing the window. // can be considered equivalent to closing the window.
if ( if (
@@ -4626,6 +4749,7 @@ @@ -4604,6 +4698,7 @@
if (lastToClose) { if (lastToClose) {
this.removeTab(lastToClose, aParams); this.removeTab(lastToClose, aParams);
} }
@ -448,20 +415,12 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
@@ -4650,6 +4774,7 @@ @@ -4641,6 +4736,12 @@
telemetrySource,
} = {}
) {
+ gZenUIManager.saveScrollbarState();
if (UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.finish("browser.tabs.opening", window);
}
@@ -4663,6 +4788,12 @@
aTab._closeTimeNoAnimTimerId = Glean.browserTabclose.timeNoAnim.start(); aTab._closeTimeNoAnimTimerId = Glean.browserTabclose.timeNoAnim.start();
} }
+ if (ZenWorkspaces.workspaceEnabled) { + if (gZenWorkspaces.workspaceEnabled) {
+ let newTab = ZenWorkspaces.handleTabBeforeClose(aTab, closeWindowWithLastTab); + let newTab = gZenWorkspaces.handleTabBeforeClose(aTab, closeWindowWithLastTab);
+ if (newTab) { + if (newTab) {
+ this.selectedTab = newTab; + this.selectedTab = newTab;
+ } + }
@ -469,7 +428,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
// Handle requests for synchronously removing an already // Handle requests for synchronously removing an already
// asynchronously closing tab. // asynchronously closing tab.
if (!animate && aTab.closing) { if (!animate && aTab.closing) {
@@ -4677,7 +4808,9 @@ @@ -4655,7 +4756,9 @@
// frame created for it (for example, by updating the visually selected // frame created for it (for example, by updating the visually selected
// state). // state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width; let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
@ -480,97 +439,86 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
if ( if (
!this._beginRemoveTab(aTab, { !this._beginRemoveTab(aTab, {
closeWindowFastpath: true, closeWindowFastpath: true,
@@ -4840,7 +4973,7 @@ @@ -4821,7 +4924,7 @@
closeWindowWithLastTab != null closeWindowWithLastTab != null
? closeWindowWithLastTab ? closeWindowWithLastTab
: !window.toolbar.visible || : !window.toolbar.visible ||
- Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab"); - Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab");
+ Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab") && !ZenWorkspaces._isClosingWindow && !ZenWorkspaces._removedByStartupPage; + Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab") && !gZenWorkspaces._isClosingWindow && !gZenWorkspaces._removedByStartupPage;
if (closeWindow) { if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here, // We've already called beforeunload on all the relevant tabs if we get here,
@@ -4864,6 +4997,7 @@ @@ -4845,6 +4948,7 @@
newTab = true; newTab = true;
} }
+ ZenWorkspaces._removedByStartupPage = false; + gZenWorkspaces._removedByStartupPage = false;
aTab._endRemoveArgs = [closeWindow, newTab]; aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation. // swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -4903,9 +5037,7 @@ @@ -4885,9 +4989,7 @@
aTab._mouseleave(); aTab._mouseleave();
if (newTab) { if (newTab) {
- this.addTrustedTab(BROWSER_NEW_TAB_URL, { - this.addTrustedTab(BROWSER_NEW_TAB_URL, {
- skipAnimation: true, - skipAnimation: true,
- }); - });
+ ZenWorkspaces.selectEmptyTab(BROWSER_NEW_TAB_URL); + gZenWorkspaces.selectEmptyTab(BROWSER_NEW_TAB_URL);
} else { } else {
TabBarVisibility.update(); TabBarVisibility.update();
} }
@@ -5034,6 +5166,8 @@ @@ -5016,6 +5118,8 @@
this.tabs[i]._tPos = i; this.tabs[i]._tPos = i;
} }
+ ZenWorkspaces.updateTabsContainers(); + gZenWorkspaces.updateTabsContainers();
+ +
if (!this._windowIsClosing) { if (!this._windowIsClosing) {
if (wasPinned) { if (wasPinned) {
this.tabContainer._positionPinnedTabs(); this.tabContainer._positionPinnedTabs();
@@ -5159,8 +5293,8 @@ @@ -5230,6 +5334,7 @@
return closedCount;
}
- async explicitUnloadTabs(tabs) {
- let unloadBlocked = await this.runBeforeUnloadForTabs(tabs);
+ async explicitUnloadTabs(tabs, skipPermitUnload = false) {
+ let unloadBlocked = skipPermitUnload ? false : await this.runBeforeUnloadForTabs(tabs);
if (unloadBlocked) {
return;
}
@@ -5248,6 +5382,7 @@
} }
let excludeTabs = new Set(aExcludeTabs); let excludeTabs = new Set(aExcludeTabs);
+ ZenWorkspaces.getTabsToExclude(aTab).forEach(tab => excludeTabs.add(tab)); + gZenWorkspaces.getTabsToExclude(aTab).forEach(tab => excludeTabs.add(tab));
// If this tab has a successor, it should be selectable, since // If this tab has a successor, it should be selectable, since
// hiding or closing a tab removes that tab as a successor. // hiding or closing a tab removes that tab as a successor.
@@ -5260,13 +5395,13 @@ @@ -5242,13 +5347,13 @@
!excludeTabs.has(aTab.owner) && !excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose") Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) { ) {
- return aTab.owner; - return aTab.owner;
+ return ZenWorkspaces.findTabToBlur(aTab.owner); + return gZenWorkspaces.findTabToBlur(aTab.owner);
} }
// Try to find a remaining tab that comes after the given tab // Try to find a remaining tab that comes after the given tab
let remainingTabs = Array.prototype.filter.call( let remainingTabs = Array.prototype.filter.call(
this.visibleTabs, this.visibleTabs,
- tab => !excludeTabs.has(tab) - tab => !excludeTabs.has(tab)
+ tab => !excludeTabs.has(tab) && ZenWorkspaces._shouldChangeToTab(tab) + tab => !excludeTabs.has(tab) && gZenWorkspaces._shouldChangeToTab(tab)
); );
let tab = this.tabContainer.findNextTab(aTab, { let tab = this.tabContainer.findNextTab(aTab, {
@@ -5282,7 +5417,7 @@ @@ -5264,7 +5369,7 @@
} }
if (tab) { if (tab) {
- return tab; - return tab;
+ return ZenWorkspaces.findTabToBlur(tab); + return gZenWorkspaces.findTabToBlur(tab);
} }
// If no qualifying visible tab was found, see if there is a tab in // If no qualifying visible tab was found, see if there is a tab in
@@ -5303,7 +5438,7 @@ @@ -5285,7 +5390,7 @@
}); });
} }
- return tab; - return tab;
+ return ZenWorkspaces.findTabToBlur(tab); + return gZenWorkspaces.findTabToBlur(tab);
} }
_blurTab(aTab) { _blurTab(aTab) {
@@ -5704,10 +5839,10 @@ @@ -5686,10 +5791,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy"); SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
} }
@ -583,21 +531,22 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
aTab.selected || aTab.selected ||
aTab.closing || aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden. // Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -6001,7 +6136,7 @@ @@ -5986,7 +6091,7 @@
// Don't allow mixing pinned and unpinned tabs. // Don't allow mixing pinned and unpinned tabs.
if (this.isTab(element) && element.pinned) { if (this.isTab(element) && element.pinned) {
- tabIndex = Math.min(tabIndex, this.pinnedTabCount - 1); - tabIndex = Math.min(tabIndex, this.pinnedTabCount - 1);
+ tabIndex = element.hasAttribute('zen-essential') ? Math.min(tabIndex, this._numZenEssentials - 1) : Math.min(tabIndex, this.pinnedTabCount - 1); + tabIndex = element.hasAttribute('zen-essential') ? Math.min(tabIndex, this._numZenEssentials - 1) : Math.min(Math.max(tabIndex, this._numZenEssentials), this.pinnedTabCount - 1);
} else { } else {
tabIndex = Math.max(tabIndex, this.pinnedTabCount); tabIndex = Math.max(tabIndex, this.pinnedTabCount);
} }
@@ -6028,9 +6163,16 @@ @@ -6012,10 +6117,16 @@
this.#handleTabMove(
element, element,
() => { () => {
let neighbor = this.tabs[tabIndex]; - let neighbor = this.tabs[tabIndex];
- if (forceUngrouped && neighbor.group) { - if (forceUngrouped && neighbor?.group) {
+ const _tPos = element._tPos; + let neighbor = gZenGlanceManager.getTabOrGlanceParent(this.tabs[tabIndex]);
+ if ((forceUngrouped && neighbor?.group) || neighbor?.group?.hasAttribute("split-view-group")) { + if ((forceUngrouped && neighbor?.group) || neighbor?.group?.hasAttribute("split-view-group")) {
neighbor = neighbor.group; neighbor = neighbor.group;
} }
@ -610,7 +559,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
if (neighbor && this.isTab(element) && tabIndex > element._tPos) { if (neighbor && this.isTab(element) && tabIndex > element._tPos) {
neighbor.after(element); neighbor.after(element);
} else { } else {
@@ -6099,7 +6241,9 @@ @@ -6084,17 +6195,29 @@
targetElement = targetElement.group; targetElement = targetElement.group;
} }
} }
@ -619,23 +568,32 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
+ element = element.group; + element = element.group;
+ } + }
// Don't allow mixing pinned and unpinned tabs. // Don't allow mixing pinned and unpinned tabs.
if (element.pinned && !targetElement?.pinned) { - if (element.pinned && !targetElement?.pinned) {
targetElement = this.tabs[this.pinnedTabCount - 1]; - targetElement = this.tabs[this.pinnedTabCount - 1];
@@ -6109,7 +6253,13 @@ + if (element.hasAttribute('zen-essential') && !targetElement?.hasAttribute('zen-essential')) {
+ targetElement = this.tabs.filter(tab => !tab.hasAttribute('zen-glance-tab'))[this._numZenEssentials - 1];
+ moveBefore = false;
+ } else if (element.pinned && !targetElement?.pinned) {
+ targetElement = this.tabs.filter(tab => !tab.hasAttribute('zen-glance-tab'))[this.pinnedTabCount - 1];
moveBefore = false;
} else if (!element.pinned && targetElement && targetElement.pinned) {
- targetElement = this.tabs[this.pinnedTabCount];
+ targetElement = this.tabs.filter(tab => !tab.hasAttribute('zen-glance-tab'))[this.pinnedTabCount];
moveBefore = true; moveBefore = true;
} }
+ if (targetElement?.group?.hasAttribute("split-view-group")) { + if (targetElement?.group?.hasAttribute("split-view-group")) {
+ targetElement = targetElement.group; + targetElement = targetElement.group;
+ } + }
+ targetElement = gZenGlanceManager.getTabOrGlanceParent(targetElement);
let getContainer = () => { let getContainer = () => {
+ if (element.hasAttribute("zen-essential")) { + if (element.hasAttribute("zen-essential")) {
+ return ZenWorkspaces.getEssentialsSection(element); + return gZenWorkspaces.getEssentialsSection(element);
+ } + }
if (element.pinned && this.tabContainer.verticalMode) { if (element.pinned && this.tabContainer.verticalMode) {
return this.tabContainer.verticalPinnedTabsContainer; return this.tabContainer.verticalPinnedTabsContainer;
} }
@@ -6169,7 +6319,7 @@ @@ -6154,7 +6277,7 @@
if (!this.isTab(aTab)) { if (!this.isTab(aTab)) {
throw new Error("Can only move a tab into a tab group"); throw new Error("Can only move a tab into a tab group");
} }
@ -644,27 +602,27 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
return; return;
} }
if (aTab.group && aTab.group.id === aGroup.id) { if (aTab.group && aTab.group.id === aGroup.id) {
@@ -6263,6 +6413,10 @@ @@ -6248,6 +6371,10 @@
moveActionCallback(); moveActionCallback();
+ ZenWorkspaces._makeSureEmptyTabIsLast(); + gZenWorkspaces._makeSureEmptyTabIsLast();
+ gZenViewSplitter._maybeRemoveFakeBrowser(false); + gZenViewSplitter._maybeRemoveFakeBrowser(false);
+ gZenViewSplitter._canDrop = false; + gZenViewSplitter._canDrop = false;
+ +
// Clear tabs cache after moving nodes because the order of tabs may have // Clear tabs cache after moving nodes because the order of tabs may have
// changed. // changed.
this.tabContainer._invalidateCachedTabs(); this.tabContainer._invalidateCachedTabs();
@@ -7080,7 +7234,7 @@ @@ -7145,7 +7272,7 @@
// preventDefault(). It will still raise the window if appropriate. // preventDefault(). It will still raise the window if appropriate.
break; break;
} }
- this.selectedTab = tab; - this.selectedTab = tab;
+ ZenWorkspaces.switchTabIfNeeded(tab); + gZenWorkspaces.switchTabIfNeeded(tab);
window.focus(); window.focus();
aEvent.preventDefault(); aEvent.preventDefault();
break; break;
@@ -7981,6 +8135,7 @@ @@ -8044,6 +8171,7 @@
aWebProgress.isTopLevel aWebProgress.isTopLevel
) { ) {
this.mTab.setAttribute("busy", "true"); this.mTab.setAttribute("busy", "true");
@ -672,7 +630,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
gBrowser._tabAttrModified(this.mTab, ["busy"]); gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected; this.mTab._notselectedsinceload = !this.mTab.selected;
} }
@@ -8954,7 +9109,7 @@ var TabContextMenu = { @@ -9009,7 +9137,7 @@ var TabContextMenu = {
); );
contextUnpinSelectedTabs.hidden = contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !this.multiselected; !this.contextTab.pinned || !this.multiselected;
@ -681,7 +639,7 @@ index 6dece2b9d0462d90a28e75350ce983d87816ef73..e54e815b04c311464ed53364007d99bb
// Move Tab items // Move Tab items
let contextMoveTabOptions = document.getElementById( let contextMoveTabOptions = document.getElementById(
"context_moveTabOptions" "context_moveTabOptions"
@@ -9223,6 +9378,7 @@ var TabContextMenu = { @@ -9278,6 +9406,7 @@ var TabContextMenu = {
telemetrySource: gBrowser.TabMetrics.METRIC_SOURCE.TAB_STRIP, telemetrySource: gBrowser.TabMetrics.METRIC_SOURCE.TAB_STRIP,
}); });
} else { } else {

View file

@ -0,0 +1,13 @@
diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js
index 6dc774ea335b0c5dba7dcf76cdb23728faae1343..b0b9ef236c2e8517db4bcf3270596456bbefe11d 100644
--- a/browser/components/tabbrowser/content/tabgroup.js
+++ b/browser/components/tabbrowser/content/tabgroup.js
@@ -301,7 +301,7 @@
*/
addTabs(tabs, metricsContext) {
for (let tab of tabs) {
- if (tab.pinned) {
+ if (tab.pinned !== this.pinned) {
tab.ownerGlobal.gBrowser.unpinTab(tab);
}
let tabToMove =

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771c299f2ca 100644 index 84d633471c89230b981d8a07babef4e0c76c0338..de8b1ecf7cb844f6cf3e66a41b6024c574dfc103 100644
--- a/browser/components/tabbrowser/content/tabs.js --- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js +++ b/browser/components/tabbrowser/content/tabs.js
@@ -83,7 +83,7 @@ @@ -83,7 +83,7 @@
@ -11,33 +11,33 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
} }
return true; return true;
}; };
@@ -342,7 +342,7 @@ @@ -293,6 +293,7 @@
on_TabGroupCollapse(event) {
this._invalidateCachedVisibleTabs();
this._unlockTabSizing();
+ return;
// If the user's selected tab is in the collapsing group, kick them off
// the tab. If no tabs exist outside the group, create a new one and
@@ -349,7 +350,7 @@
// and we're not hitting the scroll buttons. // and we're not hitting the scroll buttons.
if ( if (
event.button != 0 || event.button != 0 ||
- event.target != this.arrowScrollbox || - event.target != this.arrowScrollbox ||
+ event.target != document.getElementById("zen-tabs-wrapper") || + !event.target.classList.contains("zen-workspace-normal-tabs-section") ||
event.composedTarget.localName == "toolbarbutton" event.composedTarget.localName == "toolbarbutton"
) { ) {
return; return;
@@ -391,6 +391,7 @@ @@ -699,7 +700,7 @@
// Reset the "ignored click" flag
target._ignoredCloseButtonClicks = false;
}
+ gZenUIManager.saveScrollbarState();
}
/* Protects from close-tab-button errant doubleclick:
@@ -692,7 +693,7 @@
if (this.#isContainerVerticalPinnedGrid(tab)) { if (this.#isContainerVerticalPinnedGrid(tab)) {
// In expanded vertical mode, the max number of pinned tabs per row is dynamic // In expanded vertical mode, the max number of pinned tabs per row is dynamic
// Set this before adjusting dragged tab's position // Set this before adjusting dragged tab's position
- let pinnedTabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount); - let pinnedTabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount);
+ let pinnedTabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(0, gBrowser._numZenEssentials); + let pinnedTabs = this.ariaFocusableItems.slice(0, gBrowser._numZenEssentials);
let tabsPerRow = 0; let tabsPerRow = 0;
let position = 0; let position = 0;
for (let pinnedTab of pinnedTabs) { for (let pinnedTab of pinnedTabs) {
@@ -764,7 +765,7 @@ @@ -772,7 +773,7 @@
} else if (isTabGroupLabel(tab) && !tab.group.collapsed) { } else if (isTabGroupLabel(tab) && !tab.group.collapsed) {
this._lockTabSizing(); this._lockTabSizing();
this.#keepTabSizeLocked = true; this.#keepTabSizeLocked = true;
@ -46,7 +46,16 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
expandGroupOnDrop = true; expandGroupOnDrop = true;
} }
} }
@@ -913,6 +914,10 @@ @@ -868,7 +869,7 @@
? event.screenY - window.screenY - tabOffset
: event.screenY - window.screenY,
scrollPos:
- this.verticalMode && tab.pinned
+ this.verticalMode && tab.pinned && false
? this.verticalPinnedTabsContainer.scrollPosition
: this.arrowScrollbox.scrollPosition,
screenX: event.screenX,
@@ -921,6 +922,10 @@
} }
let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0); let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
@ -57,7 +66,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
if ( if (
(effects == "move" || effects == "copy") && (effects == "move" || effects == "copy") &&
document == draggedTab.ownerDocument && document == draggedTab.ownerDocument &&
@@ -1069,6 +1074,18 @@ @@ -1077,6 +1082,18 @@
this._tabDropIndicator.hidden = true; this._tabDropIndicator.hidden = true;
event.stopPropagation(); event.stopPropagation();
@ -76,32 +85,38 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
if (draggedTab && dropEffect == "copy") { if (draggedTab && dropEffect == "copy") {
let duplicatedDraggedTab; let duplicatedDraggedTab;
let duplicatedTabs = []; let duplicatedTabs = [];
@@ -1108,10 +1125,11 @@ @@ -1116,10 +1133,11 @@
} }
} else { } else {
let isPinned = draggedTab.pinned; let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount; - let numPinned = gBrowser.pinnedTabCount;
- let tabs = this.ariaFocusableItems.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed; + let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential"); + let essential = draggedTab.hasAttribute("zen-essential");
+ let tabs = this.ariaFocusableItems.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice( let tabs = this.ariaFocusableItems.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ isPinned ? (essential ? 0 : gBrowser._numZenEssentials) : numPinned, + isPinned ? (essential ? 0 : gBrowser._numZenEssentials) : numPinned,
+ isPinned ? (essential ? gBrowser._numZenEssentials : numPinned) : undefined + isPinned ? (essential ? gBrowser._numZenEssentials : numPinned) : undefined
); );
let size = this.verticalMode ? "height" : "width"; let size = this.verticalMode ? "height" : "width";
let screenAxis = this.verticalMode ? "screenY" : "screenX"; let screenAxis = this.verticalMode ? "screenY" : "screenX";
@@ -1203,7 +1221,7 @@ @@ -1135,8 +1153,14 @@
item.removeAttribute("tabdrop-samewindow"); (lastMovingTabScreen + tabSize);
resolve();
}; if (this.verticalMode) {
- if (gReduceMotion) { + if (oldTranslateY > 0 && translateOffsetY > tabHeight / 2) {
+ if (true || gReduceMotion) { + newTranslateY += tabHeight;
postTransitionCleanup(); + }
+ if (oldTranslateY < 0 && -translateOffsetY > tabHeight / 2) {
+ newTranslateY -= tabHeight;
+ }
newTranslateY = Math.min(
- Math.max(oldTranslateY, firstBound),
+ Math.max(newTranslateY, firstBound),
lastBound
);
} else { } else {
let onTransitionEnd = transitionendEvent => { @@ -1337,6 +1361,7 @@
@@ -1327,6 +1345,7 @@
let nextItem = this.ariaFocusableItems[newIndex]; let nextItem = this.ariaFocusableItems[newIndex];
let tabGroup = isTab(nextItem) && nextItem.group; let tabGroup = isTab(nextItem) && nextItem.group;
@ -109,7 +124,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
gBrowser.loadTabs(urls, { gBrowser.loadTabs(urls, {
inBackground, inBackground,
replace, replace,
@@ -1359,6 +1378,17 @@ @@ -1369,6 +1394,17 @@
this.finishMoveTogetherSelectedTabs(draggedTab); this.finishMoveTogetherSelectedTabs(draggedTab);
this.finishAnimateTabMove(); this.finishAnimateTabMove();
@ -127,21 +142,21 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
this.#expandGroupOnDrop(draggedTab); this.#expandGroupOnDrop(draggedTab);
if ( if (
@@ -1582,7 +1612,7 @@ @@ -1597,7 +1633,7 @@
} }
get newTabButton() { get newTabButton() {
- return this.querySelector("#tabs-newtab-button"); - return this.querySelector("#tabs-newtab-button");
+ return ZenWorkspaces.activeWorkspaceStrip.querySelector("#tabs-newtab-button"); + return gZenWorkspaces.activeWorkspaceStrip.querySelector("#tabs-newtab-button");
} }
get verticalMode() { get verticalMode() {
@@ -1606,29 +1636,41 @@ @@ -1621,29 +1657,54 @@
if (this.#allTabs) { if (this.#allTabs) {
return this.#allTabs; return this.#allTabs;
} }
- let children = Array.from(this.arrowScrollbox.children); - let children = Array.from(this.arrowScrollbox.children);
+ let children = ZenWorkspaces.tabboxChildren; + let children = gZenWorkspaces.tabboxChildren;
// remove arrowScrollbox periphery element // remove arrowScrollbox periphery element
children.pop(); children.pop();
@ -151,51 +166,55 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
- for (let i = children.length - 1; i >= 0; i--) { - for (let i = children.length - 1; i >= 0; i--) {
- if (children[i].tagName == "tab-group") { - if (children[i].tagName == "tab-group") {
- children.splice(i, 1, ...children[i].tabs); - children.splice(i, 1, ...children[i].tabs);
- } + const pinnedTabs = [...gZenWorkspaces.getCurrentEssentialsContainer().children, ...this.verticalPinnedTabsContainer.children];
- } + const expandTabs = (tabs) => {
+ for (let i = tabs.length - 1; i >= 0; i--) {
this.#allTabs = [ + const tab = tabs[i];
+ if (isTabGroup(tab)) {
+ // remove the group from the list
+ tabs.splice(i, 1);
+ // add the tabs in the group to the list
+ tabs.splice(i, 0, ...tab.tabs);
+ }
}
}
-
- this.#allTabs = [
- ...this.verticalPinnedTabsContainer.children, - ...this.verticalPinnedTabsContainer.children,
+ ...ZenWorkspaces.getCurrentEssentialsContainer().children, ...this.verticalPinnedTabsContainer.children, + expandTabs(pinnedTabs);
+ expandTabs(children);
+ const allTabs = [
+ ...pinnedTabs,
...children, ...children,
]; ];
+ const lastPinnedTabIdx = gBrowser.pinnedTabCount; + const lastPinnedTabIdx = pinnedTabs.length - 1;
+ for (let i = 0; i < this.#allTabs.length; i++) { + let i = 0;
+ for (const tab of [...allTabs]) {
+ // add glance tabs (tabs inside tabs) to the list + // add glance tabs (tabs inside tabs) to the list
+ const glanceTab = this.#allTabs[i].querySelector("tab[zen-glance-tab]"); + const glanceTab = tab.glanceTab;
+ if (glanceTab) { + if (glanceTab) {
+ // insert right after the parent tab. note: it must be inserted before + // insert right after the parent tab. note: it must be inserted before
+ // the last pinned tab so it can be inserted in the correct order + // the last pinned tab so it can be inserted in the correct order
+ this.#allTabs.splice(Math.max(i + 1, lastPinnedTabIdx), 0, glanceTab); + allTabs.splice(Math.max(i++ + 1, lastPinnedTabIdx), 0, glanceTab);
+ i++; + } else if (tab.classList.contains("vertical-pinned-tabs-container-separator")) {
+ } else if (this.#allTabs[i].classList.contains("vertical-pinned-tabs-container-separator")) {
+ // remove the separator from the list + // remove the separator from the list
+ this.#allTabs.splice(i, 1); + allTabs.splice(i, 1);
+ i--; + i--;
+ } else if (this.#allTabs[i].tagName == "tab-group") {
+ this.#allTabs.splice(i, 1, ...this.#allTabs[i].tabs);
+ } + }
+ i++;
+ } + }
+ this.#allTabs = allTabs;
return this.#allTabs; return this.#allTabs;
} }
get allGroups() { get allGroups() {
let children = Array.from(this.arrowScrollbox.children); let children = Array.from(this.arrowScrollbox.children);
- return children.filter(node => node.tagName == "tab-group"); - return children.filter(node => node.tagName == "tab-group");
+ return ZenWorkspaces.allTabGroups; + return gZenWorkspaces.allTabGroups;
} }
/** /**
@@ -1648,7 +1690,7 @@ @@ -1698,23 +1759,18 @@
*/
get visibleTabs() {
if (!this.#visibleTabs) {
- this.#visibleTabs = this.openTabs.filter(tab => tab.visible);
+ this.#visibleTabs = this.openTabs.filter(tab => tab.visible && !tab.hasAttribute("zen-empty-tab"));
}
return this.#visibleTabs;
}
@@ -1683,23 +1725,18 @@
} }
let elementIndex = 0; let elementIndex = 0;
@ -207,11 +226,11 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
- } - }
- let children = Array.from(this.arrowScrollbox.children); - let children = Array.from(this.arrowScrollbox.children);
+ let verticalPinnedTabsContainer = this.verticalPinnedTabsContainer + let verticalPinnedTabsContainer = this.verticalPinnedTabsContainer
+ let children = ZenWorkspaces.tabboxChildrenWithoutEmpty; + let children = gZenWorkspaces.tabboxChildrenWithoutEmpty;
let focusableItems = []; let focusableItems = [];
- for (let child of children) { - for (let child of children) {
+ for (let child of [...ZenWorkspaces.getCurrentEssentialsContainer().children, ...verticalPinnedTabsContainer.children, ...children]) { + for (let child of [...gZenWorkspaces.getCurrentEssentialsContainer().children, ...verticalPinnedTabsContainer.children, ...children]) {
if (isTab(child) && child.visible) { if (isTab(child) && child.visible) {
child.elementIndex = elementIndex++; child.elementIndex = elementIndex++;
focusableItems.push(child); focusableItems.push(child);
@ -223,16 +242,9 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
let visibleTabsInGroup = child.tabs.filter(tab => tab.visible); let visibleTabsInGroup = child.tabs.filter(tab => tab.visible);
visibleTabsInGroup.forEach(tab => { visibleTabsInGroup.forEach(tab => {
tab.elementIndex = elementIndex++; tab.elementIndex = elementIndex++;
@@ -1707,12 +1744,14 @@ @@ -1724,10 +1780,7 @@
focusableItems.push(...visibleTabsInGroup);
} }
} }
+ let glanceTab = child.querySelector("tab[zen-glance-tab]");
+ if (isTab(child) && glanceTab) {
+ glanceTab.elementIndex = elementIndex++;
+ focusableItems.push(glanceTab);
+ }
}
- this.#focusableItems = [ - this.#focusableItems = [
- ...verticalPinnedTabsContainer.children, - ...verticalPinnedTabsContainer.children,
@ -242,15 +254,15 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
return this.#focusableItems; return this.#focusableItems;
} }
@@ -1720,6 +1759,7 @@ @@ -1735,6 +1788,7 @@
_invalidateCachedTabs() { _invalidateCachedTabs() {
this.#allTabs = null; this.#allTabs = null;
this._invalidateCachedVisibleTabs(); this._invalidateCachedVisibleTabs();
+ ZenWorkspaces._allStoredTabs = null; + gZenWorkspaces._allStoredTabs = null;
} }
_invalidateCachedVisibleTabs() { _invalidateCachedVisibleTabs() {
@@ -1734,8 +1774,8 @@ @@ -1749,8 +1803,8 @@
#isContainerVerticalPinnedGrid(tab) { #isContainerVerticalPinnedGrid(tab) {
return ( return (
this.verticalMode && this.verticalMode &&
@ -261,25 +273,25 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
!this.expandOnHover !this.expandOnHover
); );
} }
@@ -1751,7 +1791,7 @@ @@ -1766,7 +1820,7 @@
if (node == null) { if (node == null) {
// We have a container for non-tab elements at the end of the scrollbox. // We have a container for non-tab elements at the end of the scrollbox.
- node = this.arrowScrollbox.lastChild; - node = this.arrowScrollbox.lastChild;
+ node = ZenWorkspaces.activeWorkspaceStrip.lastChild; + node = gZenWorkspaces.activeWorkspaceStrip.lastChild;
} }
node.before(tab); node.before(tab);
@@ -1846,7 +1886,7 @@ @@ -1861,7 +1915,7 @@
// There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and // There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and
// for when the tab strip is overflowed (which is shared by vertical and horizontal tabs); // for when the tab strip is overflowed (which is shared by vertical and horizontal tabs);
// Attach the long click popup to all of them. // Attach the long click popup to all of them.
- const newTab = document.getElementById("new-tab-button"); - const newTab = document.getElementById("new-tab-button");
+ const newTab = ZenWorkspaces.activeWorkspaceStrip.querySelector("#tabs-newtab-button"); + const newTab = gZenWorkspaces.activeWorkspaceStrip.querySelector("#tabs-newtab-button");
const newTab2 = this.newTabButton; const newTab2 = this.newTabButton;
const newTabVertical = document.getElementById( const newTabVertical = document.getElementById(
"vertical-tabs-newtab-button" "vertical-tabs-newtab-button"
@@ -1941,10 +1981,12 @@ @@ -1956,10 +2010,12 @@
_handleTabSelect(aInstant) { _handleTabSelect(aInstant) {
let selectedTab = this.selectedItem; let selectedTab = this.selectedItem;
@ -292,89 +304,53 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
selectedTab._notselectedsinceload = false; selectedTab._notselectedsinceload = false;
} }
@@ -2085,16 +2127,15 @@ @@ -2132,6 +2188,7 @@
// Move pinned tabs to another container when the tabstrip is toggled to vertical
// and when session restore code calls _positionPinnedTabs; update styling whenever
// the number of pinned tabs changes.
- let verticalTabsContainer = document.getElementById(
- "vertical-pinned-tabs-container"
- );
+ let verticalTabsContainer = this.verticalPinnedTabsContainer;
let numPinned = gBrowser.pinnedTabCount;
-
- if (gBrowser.pinnedTabCount !== verticalTabsContainer.children.length) {
- let tabs = this.visibleTabs;
+ if (!ZenWorkspaces._hasInitializedTabsStrip) return;
+ let count = ZenWorkspaces.makeSurePinTabIsInCorrectPosition();
+ if (gBrowser.pinnedTabCount !== (verticalTabsContainer.children.length - count - 1 + ZenWorkspaces.getCurrentEssentialsContainer().children.length)) {
+ let tabs = this.allTabs.filter(tab => !tab.hasAttribute("zen-glance-tab"));
for (let i = 0; i < numPinned; i++) {
tabs[i].style.marginInlineStart = "";
- verticalTabsContainer.appendChild(tabs[i]);
+ tabs[i].hasAttribute("zen-essential") ? ZenWorkspaces.getCurrentEssentialsContainer().appendChild(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i]) : verticalTabsContainer.insertBefore(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i], verticalTabsContainer.lastChild);
}
}
@@ -2102,9 +2143,7 @@
}
_resetVerticalPinnedTabs() {
- let verticalTabsContainer = document.getElementById(
- "vertical-pinned-tabs-container"
- );
+ let verticalTabsContainer = this.verticalPinnedTabsContainer;
if (!verticalTabsContainer.children.length) {
return;
@@ -2117,7 +2156,7 @@
} }
_positionPinnedTabs() { _positionPinnedTabs() {
- let tabs = this.visibleTabs; + if (true) return;
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")); let tabs = this.visibleTabs;
let numPinned = gBrowser.pinnedTabCount; let numPinned = gBrowser.pinnedTabCount;
let absPositionHorizontalTabs = let absPositionHorizontalTabs =
this.overflowing && tabs.length > numPinned && numPinned > 0; @@ -2206,7 +2263,7 @@
@@ -2127,7 +2166,7 @@
if (this.verticalMode) {
this._updateVerticalPinnedTabs();
- } else if (absPositionHorizontalTabs) {
+ } else if (absPositionHorizontalTabs && false) {
let layoutData = this._pinnedTabsLayoutCache;
let uiDensity = document.documentElement.getAttribute("uidensity");
if (!layoutData || layoutData.uiDensity != uiDensity) {
@@ -2191,7 +2230,7 @@
return; return;
} }
- let tabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount); - let tabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount);
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(0, gBrowser._numZenEssentials); + let tabs = this.ariaFocusableItems.slice(0, gBrowser._numZenEssentials);
let directionX = screenX > dragData.animLastScreenX; let directionX = screenX > dragData.animLastScreenX;
let directionY = screenY > dragData.animLastScreenY; let directionY = screenY > dragData.animLastScreenY;
@@ -2199,7 +2238,7 @@ @@ -2215,6 +2272,8 @@
dragData.animLastScreenX = screenX;
let { width: tabWidth, height: tabHeight } = let { width: tabWidth, height: tabHeight } =
- draggedTab.getBoundingClientRect(); draggedTab.getBoundingClientRect();
+ (draggedTab.group?.hasAttribute("split-view-group") ? draggedTab.group : draggedTab).getBoundingClientRect(); + tabWidth += 4; // Add 4px to account for the gap
+ tabHeight += 4;
let shiftSizeX = tabWidth * movingTabs.length; let shiftSizeX = tabWidth * movingTabs.length;
let shiftSizeY = tabHeight; let shiftSizeY = tabHeight;
dragData.tabWidth = tabWidth; dragData.tabWidth = tabWidth;
@@ -2374,12 +2413,16 @@ @@ -2244,7 +2303,7 @@
let translateX = screenX - dragData.screenX;
let translateY = screenY - dragData.screenY;
translateY +=
- this.verticalPinnedTabsContainer.scrollPosition - dragData.scrollPos;
+ dragData.scrollPos;
let firstBoundX = firstTabInRow.screenX - firstMovingTabScreenX;
let firstBoundY = firstTabInRow.screenY - firstMovingTabScreenY;
let lastBoundX =
@@ -2389,12 +2448,16 @@
this.#clearDragOverCreateGroupTimer(); this.#clearDragOverCreateGroupTimer();
- let isPinned = draggedTab.pinned; - let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount; - let numPinned = gBrowser.pinnedTabCount;
- let tabs = this.ariaFocusableItems.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned; + let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned;
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed; + let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential"); + let essential = draggedTab.hasAttribute("zen-essential");
+ let tabs = this.ariaFocusableItems.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice( let tabs = this.ariaFocusableItems.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ isPinned ? (essential ? 0 : gBrowser._numZenEssentials) : numPinned, + isPinned ? (essential ? 0 : gBrowser._numZenEssentials) : numPinned,
+ isPinned ? (essential ? gBrowser._numZenEssentials : numPinned) : undefined + isPinned ? (essential ? gBrowser._numZenEssentials : numPinned) : undefined
); );
@ -384,7 +360,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
if (this.#rtlMode) { if (this.#rtlMode) {
tabs.reverse(); tabs.reverse();
@@ -2393,7 +2436,7 @@ @@ -2408,7 +2471,7 @@
let size = this.verticalMode ? "height" : "width"; let size = this.verticalMode ? "height" : "width";
let translateAxis = this.verticalMode ? "translateY" : "translateX"; let translateAxis = this.verticalMode ? "translateY" : "translateX";
let scrollDirection = this.verticalMode ? "scrollTop" : "scrollLeft"; let scrollDirection = this.verticalMode ? "scrollTop" : "scrollLeft";
@ -393,7 +369,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
let translateX = event.screenX - dragData.screenX; let translateX = event.screenX - dragData.screenX;
let translateY = event.screenY - dragData.screenY; let translateY = event.screenY - dragData.screenY;
@@ -2407,10 +2450,19 @@ @@ -2422,12 +2485,21 @@
let lastTab = tabs.at(-1); let lastTab = tabs.at(-1);
let lastMovingTab = movingTabs.at(-1); let lastMovingTab = movingTabs.at(-1);
let firstMovingTab = movingTabs[0]; let firstMovingTab = movingTabs[0];
@ -411,9 +387,12 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
+ shiftSize += 5; // A hack to allow more space for the group + shiftSize += 5; // A hack to allow more space for the group
+ } + }
let translate = screen - dragData[screenAxis]; let translate = screen - dragData[screenAxis];
if (!isPinned) { - if (!isPinned) {
+ if (true) {
translate += translate +=
@@ -2431,6 +2483,9 @@ this.arrowScrollbox.scrollbox[scrollDirection] - dragData.scrollPos;
} else if (isPinned && this.verticalMode) {
@@ -2446,6 +2518,9 @@
// Shift the `.tab-group-label-container` to shift the label element. // Shift the `.tab-group-label-container` to shift the label element.
item = item.parentElement; item = item.parentElement;
} }
@ -423,7 +402,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
item.style.transform = `${translateAxis}(${translate}px)`; item.style.transform = `${translateAxis}(${translate}px)`;
} }
@@ -2568,6 +2623,9 @@ @@ -2583,6 +2658,9 @@
break; break;
} }
let element = tabs[mid]; let element = tabs[mid];
@ -433,7 +412,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
let elementForSize = isTabGroupLabel(element) let elementForSize = isTabGroupLabel(element)
? element.parentElement ? element.parentElement
: element; : element;
@@ -2590,6 +2648,10 @@ @@ -2605,6 +2683,10 @@
if (!dropElement) { if (!dropElement) {
dropElement = this.ariaFocusableItems[oldDropElementIndex]; dropElement = this.ariaFocusableItems[oldDropElementIndex];
} }
@ -444,7 +423,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
let newDropElementIndex = dropElement let newDropElementIndex = dropElement
? dropElement.elementIndex ? dropElement.elementIndex
: oldDropElementIndex; : oldDropElementIndex;
@@ -2598,7 +2660,7 @@ @@ -2613,7 +2695,7 @@
let shouldCreateGroupOnDrop; let shouldCreateGroupOnDrop;
let dropBefore; let dropBefore;
if (dropElement) { if (dropElement) {
@ -453,7 +432,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
? dropElement.parentElement ? dropElement.parentElement
: dropElement; : dropElement;
@@ -2660,12 +2722,12 @@ @@ -2675,12 +2757,12 @@
} }
} }
@ -468,7 +447,16 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
dropElement != draggedTab && dropElement != draggedTab &&
isTab(dropElement) && isTab(dropElement) &&
!dropElement?.group && !dropElement?.group &&
@@ -2735,7 +2797,7 @@ @@ -2720,7 +2802,7 @@
// Dropping right before the tab group.
dropElement = dropElementGroup;
colorCode = undefined;
- } else if (dropElementGroup.collapsed) {
+ } else if (dropElement?.group?.hasAttribute("split-view-group")) {
// Dropping right after the collapsed tab group.
dropElement = dropElementGroup;
colorCode = undefined;
@@ -2750,7 +2832,7 @@
// Shift background tabs to leave a gap where the dragged tab // Shift background tabs to leave a gap where the dragged tab
// would currently be dropped. // would currently be dropped.
for (let item of tabs) { for (let item of tabs) {
@ -477,7 +465,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
continue; continue;
} }
@@ -2744,6 +2806,9 @@ @@ -2759,6 +2841,9 @@
if (isTabGroupLabel(item)) { if (isTabGroupLabel(item)) {
// Shift the `.tab-group-label-container` to shift the label element. // Shift the `.tab-group-label-container` to shift the label element.
item = item.parentElement; item = item.parentElement;
@ -487,7 +475,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
} }
item.style.transform = transform; item.style.transform = transform;
} }
@@ -2796,8 +2861,9 @@ @@ -2811,8 +2896,9 @@
); );
} }
@ -499,7 +487,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
return; return;
} }
@@ -2809,6 +2875,12 @@ @@ -2824,6 +2910,12 @@
item = item.parentElement; item = item.parentElement;
} }
item.style.transform = ""; item.style.transform = "";
@ -512,7 +500,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
item.removeAttribute("dragover-createGroup"); item.removeAttribute("dragover-createGroup");
} }
this.removeAttribute("movingtab-createGroup"); this.removeAttribute("movingtab-createGroup");
@@ -2855,7 +2927,7 @@ @@ -2870,7 +2962,7 @@
let postTransitionCleanup = () => { let postTransitionCleanup = () => {
movingTab._moveTogetherSelectedTabsData.animate = false; movingTab._moveTogetherSelectedTabsData.animate = false;
}; };
@ -521,7 +509,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
postTransitionCleanup(); postTransitionCleanup();
} else { } else {
let onTransitionEnd = transitionendEvent => { let onTransitionEnd = transitionendEvent => {
@@ -3028,7 +3100,7 @@ @@ -3043,7 +3135,7 @@
} }
_notifyBackgroundTab(aTab) { _notifyBackgroundTab(aTab) {
@ -530,7 +518,7 @@ index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..1a3aa415d08379b00960de398808e771
return; return;
} }
@@ -3154,6 +3226,9 @@ @@ -3169,6 +3261,9 @@
return null; return null;
} }
} }

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372cc11ed40 100644 index 0c5145c3d31862bd2c6b5ed2faa88f02425ffde1..1cf86995514b2c00360f6ed681f0c640dac8ab56 100644
--- a/browser/components/urlbar/UrlbarInput.sys.mjs --- a/browser/components/urlbar/UrlbarInput.sys.mjs
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs +++ b/browser/components/urlbar/UrlbarInput.sys.mjs
@@ -68,6 +68,13 @@ XPCOMUtils.defineLazyPreferenceGetter( @@ -68,6 +68,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
@ -16,7 +16,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
const DEFAULT_FORM_HISTORY_NAME = "searchbar-history"; const DEFAULT_FORM_HISTORY_NAME = "searchbar-history";
const SEARCH_BUTTON_CLASS = "urlbar-search-button"; const SEARCH_BUTTON_CLASS = "urlbar-search-button";
@@ -349,7 +356,16 @@ export class UrlbarInput { @@ -355,7 +362,16 @@ export class UrlbarInput {
// See _on_select(). HTMLInputElement.select() dispatches a "select" // See _on_select(). HTMLInputElement.select() dispatches a "select"
// event but does not set the primary selection. // event but does not set the primary selection.
this._suppressPrimaryAdjustment = true; this._suppressPrimaryAdjustment = true;
@ -33,7 +33,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
this._suppressPrimaryAdjustment = false; this._suppressPrimaryAdjustment = false;
} }
@@ -425,6 +441,10 @@ export class UrlbarInput { @@ -431,6 +447,10 @@ export class UrlbarInput {
hideSearchTerms = false, hideSearchTerms = false,
isSameDocument = false isSameDocument = false
) { ) {
@ -44,7 +44,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
// We only need to update the searchModeUI on tab switch conditionally // We only need to update the searchModeUI on tab switch conditionally
// as we only persist searchMode with ScotchBonnet enabled. // as we only persist searchMode with ScotchBonnet enabled.
if ( if (
@@ -698,8 +718,16 @@ export class UrlbarInput { @@ -735,8 +755,16 @@ export class UrlbarInput {
return; return;
} }
} }
@ -62,7 +62,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
} }
/** /**
@@ -1093,7 +1121,11 @@ export class UrlbarInput { @@ -1142,7 +1170,11 @@ export class UrlbarInput {
} }
if (!this.#providesSearchMode(result)) { if (!this.#providesSearchMode(result)) {
@ -74,8 +74,8 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
+ } + }
} }
this.controller.recordSelectedResult(event, result); if (isCanonized) {
@@ -2125,6 +2157,10 @@ export class UrlbarInput { @@ -2191,6 +2223,10 @@ export class UrlbarInput {
await this.#updateLayoutBreakoutDimensions(); await this.#updateLayoutBreakoutDimensions();
} }
@ -86,7 +86,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
startLayoutExtend() { startLayoutExtend() {
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) { if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
// Do not expand if the Urlbar does not support being expanded or it is // Do not expand if the Urlbar does not support being expanded or it is
@@ -2147,6 +2183,12 @@ export class UrlbarInput { @@ -2205,6 +2241,12 @@ export class UrlbarInput {
this.setAttribute("breakout-extend", "true"); this.setAttribute("breakout-extend", "true");
@ -99,7 +99,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
// Enable the animation only after the first extend call to ensure it // Enable the animation only after the first extend call to ensure it
// doesn't run when opening a new window. // doesn't run when opening a new window.
if (!this.hasAttribute("breakout-extend-animate")) { if (!this.hasAttribute("breakout-extend-animate")) {
@@ -2166,6 +2208,24 @@ export class UrlbarInput { @@ -2224,6 +2266,24 @@ export class UrlbarInput {
return; return;
} }
@ -124,7 +124,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
this.removeAttribute("breakout-extend"); this.removeAttribute("breakout-extend");
this.#updateTextboxPosition(); this.#updateTextboxPosition();
} }
@@ -2485,7 +2545,7 @@ export class UrlbarInput { @@ -2553,7 +2613,7 @@ export class UrlbarInput {
this.textbox.parentNode.style.setProperty( this.textbox.parentNode.style.setProperty(
"--urlbar-container-height", "--urlbar-container-height",
@ -133,7 +133,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
); );
this.textbox.style.setProperty( this.textbox.style.setProperty(
"--urlbar-height", "--urlbar-height",
@@ -2900,6 +2960,7 @@ export class UrlbarInput { @@ -2968,6 +3028,7 @@ export class UrlbarInput {
} }
_toggleActionOverride(event) { _toggleActionOverride(event) {
@ -141,7 +141,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
if ( if (
event.keyCode == KeyEvent.DOM_VK_SHIFT || event.keyCode == KeyEvent.DOM_VK_SHIFT ||
event.keyCode == KeyEvent.DOM_VK_ALT || event.keyCode == KeyEvent.DOM_VK_ALT ||
@@ -2998,7 +3059,7 @@ export class UrlbarInput { @@ -3069,7 +3130,7 @@ export class UrlbarInput {
*/ */
_trimValue(val) { _trimValue(val) {
let trimmedValue = lazy.UrlbarPrefs.get("trimURLs") let trimmedValue = lazy.UrlbarPrefs.get("trimURLs")
@ -150,7 +150,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
: val; : val;
// Only trim value if the directionality doesn't change to RTL and we're not // Only trim value if the directionality doesn't change to RTL and we're not
// showing a strikeout https protocol. // showing a strikeout https protocol.
@@ -3368,6 +3429,10 @@ export class UrlbarInput { @@ -3439,6 +3500,10 @@ export class UrlbarInput {
} }
reuseEmpty = true; reuseEmpty = true;
} }
@ -161,7 +161,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
if ( if (
where == "tab" && where == "tab" &&
reuseEmpty && reuseEmpty &&
@@ -3375,6 +3440,9 @@ export class UrlbarInput { @@ -3446,6 +3511,9 @@ export class UrlbarInput {
) { ) {
where = "current"; where = "current";
} }
@ -171,7 +171,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
return where; return where;
} }
@@ -3632,6 +3700,7 @@ export class UrlbarInput { @@ -3703,6 +3771,7 @@ export class UrlbarInput {
this.setResultForCurrentValue(null); this.setResultForCurrentValue(null);
this.handleCommand(); this.handleCommand();
this.controller.clearLastQueryContextCache(); this.controller.clearLastQueryContextCache();
@ -179,7 +179,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
this._suppressStartQuery = false; this._suppressStartQuery = false;
}); });
@@ -3639,7 +3708,6 @@ export class UrlbarInput { @@ -3710,7 +3779,6 @@ export class UrlbarInput {
contextMenu.addEventListener("popupshowing", () => { contextMenu.addEventListener("popupshowing", () => {
// Close the results pane when the input field contextual menu is open, // Close the results pane when the input field contextual menu is open,
// because paste and go doesn't want a result selection. // because paste and go doesn't want a result selection.
@ -187,7 +187,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
let controller = let controller =
this.document.commandDispatcher.getControllerForCommand("cmd_paste"); this.document.commandDispatcher.getControllerForCommand("cmd_paste");
@@ -4053,6 +4121,11 @@ export class UrlbarInput { @@ -4136,6 +4204,11 @@ export class UrlbarInput {
} }
_on_click(event) { _on_click(event) {
@ -199,7 +199,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
if ( if (
event.target == this.inputField || event.target == this.inputField ||
event.target == this._inputContainer || event.target == this._inputContainer ||
@@ -4124,7 +4197,7 @@ export class UrlbarInput { @@ -4207,7 +4280,7 @@ export class UrlbarInput {
} }
} }
@ -208,7 +208,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
this.view.autoOpen({ event }); this.view.autoOpen({ event });
} else { } else {
if (this._untrimOnFocusAfterKeydown) { if (this._untrimOnFocusAfterKeydown) {
@@ -4164,9 +4237,16 @@ export class UrlbarInput { @@ -4247,9 +4320,16 @@ export class UrlbarInput {
} }
_on_mousedown(event) { _on_mousedown(event) {
@ -226,7 +226,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
if ( if (
event.target != this.inputField && event.target != this.inputField &&
@@ -4178,6 +4258,10 @@ export class UrlbarInput { @@ -4261,6 +4341,10 @@ export class UrlbarInput {
this.focusedViaMousedown = !this.focused; this.focusedViaMousedown = !this.focused;
this._preventClickSelectsAll = this.focused; this._preventClickSelectsAll = this.focused;
@ -237,7 +237,7 @@ index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..66ef8de0d2a767376740ca57d75b5372
// Keep the focus status, since the attribute may be changed // Keep the focus status, since the attribute may be changed
// upon calling this.focus(). // upon calling this.focus().
@@ -4218,7 +4302,7 @@ export class UrlbarInput { @@ -4301,7 +4385,7 @@ export class UrlbarInput {
} }
// Don't close the view when clicking on a tab; we may want to keep the // 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. // view open on tab switch, and the TabSelect event arrived earlier.

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs diff --git a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
index b1481a11ef..925f0dc34b 100644 index 899e808c5f8cf14577404e3d1766fe967b32b065..82854a04edc21ac4552d06d6ba45c4714b5ef5cb 100644
--- a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs --- a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs +++ b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
@@ -35,6 +35,8 @@ const QUERYINDEX_SWITCHTAB = 9; @@ -35,6 +35,8 @@ const QUERYINDEX_SWITCHTAB = 9;
@ -9,14 +9,14 @@ index b1481a11ef..925f0dc34b 100644
+const QUERYINDEX_PINNEDTITLE = 13; +const QUERYINDEX_PINNEDTITLE = 13;
+const QUERYINDEX_PINNEDURL = 14; +const QUERYINDEX_PINNEDURL = 14;
// Constants to support an alternative frecency algorithm. // This SQL query fragment provides the following:
const PAGES_USE_ALT_FRECENCY = Services.prefs.getBoolPref( // - whether the entry is bookmarked (QUERYINDEX_BOOKMARKED)
@@ -65,11 +67,14 @@ const SQL_BOOKMARK_TAGS_FRAGMENT = `EXISTS(SELECT 1 FROM moz_bookmarks WHERE fk @@ -56,11 +58,14 @@ const SQL_BOOKMARK_TAGS_FRAGMENT = `EXISTS(SELECT 1 FROM moz_bookmarks WHERE fk
// condition once, and avoid evaluating "btitle" and "tags" when it is false. // condition once, and avoid evaluating "btitle" and "tags" when it is false.
function defaultQuery(conditions = "") { function defaultQuery(conditions = "") {
let query = `SELECT :query_type, h.url, h.title, ${SQL_BOOKMARK_TAGS_FRAGMENT}, let query = `SELECT :query_type, h.url, h.title, ${SQL_BOOKMARK_TAGS_FRAGMENT},
- h.visit_count, h.typed, h.id, t.open_count, ${PAGES_FRECENCY_FIELD}, t.userContextId, h.last_visit_date - h.visit_count, h.typed, h.id, t.open_count, ${lazy.PAGES_FRECENCY_FIELD}, t.userContextId, h.last_visit_date
+ h.visit_count, h.typed, h.id, t.open_count, ${PAGES_FRECENCY_FIELD}, t.userContextId, h.last_visit_date, + h.visit_count, h.typed, h.id, t.open_count, ${lazy.PAGES_FRECENCY_FIELD}, t.userContextId, h.last_visit_date,
+ zp.title AS pinned_title, zp.url AS pinned_url + zp.title AS pinned_title, zp.url AS pinned_url
FROM moz_places h FROM moz_places h
LEFT JOIN moz_openpages_temp t LEFT JOIN moz_openpages_temp t
@ -26,8 +26,8 @@ index b1481a11ef..925f0dc34b 100644
+ ON zp.url = h.url + ON zp.url = h.url
WHERE ( WHERE (
(:switchTabsEnabled AND t.open_count > 0) OR (:switchTabsEnabled AND t.open_count > 0) OR
${PAGES_FRECENCY_FIELD} <> 0 ${lazy.PAGES_FRECENCY_FIELD} <> 0
@@ -83,7 +88,7 @@ function defaultQuery(conditions = "") { @@ -74,7 +79,7 @@ function defaultQuery(conditions = "") {
:matchBehavior, :searchBehavior, NULL) :matchBehavior, :searchBehavior, NULL)
ELSE ELSE
AUTOCOMPLETE_MATCH(:searchString, h.url, AUTOCOMPLETE_MATCH(:searchString, h.url,
@ -36,7 +36,7 @@ index b1481a11ef..925f0dc34b 100644
h.visit_count, h.typed, h.visit_count, h.typed,
0, t.open_count, 0, t.open_count,
:matchBehavior, :searchBehavior, NULL) :matchBehavior, :searchBehavior, NULL)
@@ -1132,11 +1137,14 @@ Search.prototype = { @@ -1130,11 +1135,14 @@ Search.prototype = {
let lastVisit = lastVisitPRTime let lastVisit = lastVisitPRTime
? lazy.PlacesUtils.toDate(lastVisitPRTime).getTime() ? lazy.PlacesUtils.toDate(lastVisitPRTime).getTime()
: undefined; : undefined;

View file

@ -0,0 +1,12 @@
diff --git a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
index dfa91b76ad3890ceadb1b1b5d7a63b7074fbb776..6369fa1cdb242de32338bbce6debcdab2a04ca02 100644
--- a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
+++ b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
@@ -585,6 +585,7 @@ export class UrlbarValueFormatter {
this.window.requestAnimationFrame(() => {
if (instance == this._resizeInstance) {
this.#ensureFormattedHostVisible();
+ this._formatURL();
}
});
}, 100);

View file

@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
index d5382623595de8daed8cd13ea2eb2de329a4bd92..c3b5d1bad0bf4e1c5a5875a83751cfa96cdf1510 100644 index e17f3d34367d6567c89f632b6d1ce537608a6829..7528dfb0abc8ea8d9315591cd529a341b4c3962a 100644
--- a/browser/components/urlbar/UrlbarView.sys.mjs --- a/browser/components/urlbar/UrlbarView.sys.mjs
+++ b/browser/components/urlbar/UrlbarView.sys.mjs +++ b/browser/components/urlbar/UrlbarView.sys.mjs
@@ -609,7 +609,7 @@ export class UrlbarView { @@ -609,7 +609,7 @@ export class UrlbarView {

View file

@ -1,8 +1,8 @@
diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
index 14183ad7165dc91126b4409b26f669409c4e9905..be979225b89b193b9e9c8903de5740dc04a8999f 100644 index a00011de585a40b91d33364a04c6bf5c86145ecd..f98b6d11519a80aff307513fd77361179f9914a4 100644
--- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
+++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
@@ -215,7 +215,7 @@ export const PREFS_CONFIG = new Map([ @@ -228,7 +228,7 @@ export const PREFS_CONFIG = new Map([
"showSponsoredTopSites", "showSponsoredTopSites",
{ {
title: "Show sponsored top sites", title: "Show sponsored top sites",

View file

@ -1,8 +1,8 @@
diff --git a/browser/locales/en-US/installer/custom.properties b/browser/locales/en-US/installer/custom.properties diff --git a/browser/locales/en-US/installer/custom.properties b/browser/locales/en-US/installer/custom.properties
index a9dc6fb90caa50a9ba9ec63a6cd90b4d8dcc2bc0..48d11c0c5a3b926d2d29c30d1ca8630941514210 100644 index 8c33192e589de1d819cbb21c31cec0480ed4c85e..9db296363303c153dc05ad9e85493f1197bb1efd 100644
--- a/browser/locales/en-US/installer/custom.properties --- a/browser/locales/en-US/installer/custom.properties
+++ b/browser/locales/en-US/installer/custom.properties +++ b/browser/locales/en-US/installer/custom.properties
@@ -77,7 +77,7 @@ STATUS_INSTALL_LANG=Installing Language Files (${AB_CD}) @@ -73,7 +73,7 @@ STATUS_INSTALL_APP=Installing $BrandShortName
STATUS_UNINSTALL_MAIN=Uninstalling $BrandShortName STATUS_UNINSTALL_MAIN=Uninstalling $BrandShortName
STATUS_CLEANUP=A Little Housekeeping STATUS_CLEANUP=A Little Housekeeping

View file

@ -1,8 +1,8 @@
diff --git a/browser/modules/ExtensionsUI.sys.mjs b/browser/modules/ExtensionsUI.sys.mjs diff --git a/browser/modules/ExtensionsUI.sys.mjs b/browser/modules/ExtensionsUI.sys.mjs
index 3f74e47bf7602fa800d1cf3034ec67055cc792b6..e700b88d1aee80c946e234f89f695a31d71ff608 100644 index 9734d95742035dbe6f608ad3cdaaefc6ed5b83bc..9a7bbb272025e84968d3173faca259f558746c5e 100644
--- a/browser/modules/ExtensionsUI.sys.mjs --- a/browser/modules/ExtensionsUI.sys.mjs
+++ b/browser/modules/ExtensionsUI.sys.mjs +++ b/browser/modules/ExtensionsUI.sys.mjs
@@ -436,7 +436,7 @@ export var ExtensionsUI = { @@ -466,7 +466,7 @@ export var ExtensionsUI = {
eventCallback, eventCallback,
removeOnDismissal: true, removeOnDismissal: true,
popupOptions: { popupOptions: {

View file

@ -1,8 +1,8 @@
diff --git a/browser/themes/BuiltInThemeConfig.sys.mjs b/browser/themes/BuiltInThemeConfig.sys.mjs diff --git a/browser/themes/BuiltInThemeConfig.sys.mjs b/browser/themes/BuiltInThemeConfig.sys.mjs
index 081187147736f56abfe5866a69e00ac13a8dd940..9a980fe858c1a77af7634037aebc332d237e9c11 100644 index a5361f1f0ec57f575f8d76e118ff762dc7547501..db5c5eb2059b4ceef3911fd807bf985408859d1a 100644
--- a/browser/themes/BuiltInThemeConfig.sys.mjs --- a/browser/themes/BuiltInThemeConfig.sys.mjs
+++ b/browser/themes/BuiltInThemeConfig.sys.mjs +++ b/browser/themes/BuiltInThemeConfig.sys.mjs
@@ -33,13 +33,6 @@ export const BuiltInThemeConfig = new Map([ @@ -33,11 +33,4 @@ export const BuiltInThemeConfig = new Map([
path: "resource://builtin-themes/dark/", path: "resource://builtin-themes/dark/",
}, },
], ],
@ -13,6 +13,4 @@ index 081187147736f56abfe5866a69e00ac13a8dd940..9a980fe858c1a77af7634037aebc332d
- path: "resource://builtin-themes/alpenglow/", - path: "resource://builtin-themes/alpenglow/",
- }, - },
- ], - ],
[ ]);
"2022red-colorway@mozilla.org",
{

View file

@ -1,22 +0,0 @@
diff --git a/browser/themes/addons/jar.mn b/browser/themes/addons/jar.mn
index 69bb3000d6d2d249d1d77262dc2a0057d0318308..bbed04a6b6f11c582e17e08201db260b9ed496b7 100644
--- a/browser/themes/addons/jar.mn
+++ b/browser/themes/addons/jar.mn
@@ -5,8 +5,8 @@
browser.jar:
% resource builtin-themes %content/builtin-themes/
- content/builtin-themes/alpenglow (alpenglow/*.svg)
- content/builtin-themes/alpenglow/manifest.json (alpenglow/manifest.json)
+# content/builtin-themes/alpenglow (alpenglow/*.svg)
+# content/builtin-themes/alpenglow/manifest.json (alpenglow/manifest.json)
content/builtin-themes/dark (dark/*.svg)
content/builtin-themes/dark (dark/*.css)
@@ -100,3 +100,5 @@ browser.jar:
content/builtin-themes/colorways/2022innovator/balanced/manifest.json (colorways/2022-independent-voices/innovator/balanced/manifest.json)
content/builtin-themes/colorways/2022innovator/bold (colorways/2022-independent-voices/innovator/bold/*.svg)
content/builtin-themes/colorways/2022innovator/bold/manifest.json (colorways/2022-independent-voices/innovator/bold/manifest.json)
+
+#include zen-addons.inc.mn
\ No newline at end of file

View file

@ -1,20 +1,18 @@
diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
index 5c9891e5ed4b865ed4ecc98d794a239b0f96a8f9..e13bf7277edeb49ebbb12cf9359ac6193bb47ebd 100644 index 195cf888a61893cc9b0015e07e27bce94ec9d409..5f4cb6a1922730e8a0f1e9ad04169fb092917938 100644
--- a/browser/themes/linux/browser.css --- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css +++ b/browser/themes/linux/browser.css
@@ -42,21 +42,25 @@ @@ -42,7 +42,8 @@
-moz-default-appearance: -moz-window-decorations; -moz-default-appearance: -moz-window-decorations;
appearance: auto; appearance: auto;
- #navigator-toolbox, - #navigator-toolbox,
- dialog::backdrop {
+ #zen-main-app-wrapper, + #zen-main-app-wrapper,
+ dialog::backdrop, + #zen-browser-background,
+ #browser::after, dialog::backdrop {
+ #browser::before {
border-top-left-radius: env(-moz-gtk-csd-titlebar-radius); border-top-left-radius: env(-moz-gtk-csd-titlebar-radius);
border-top-right-radius: env(-moz-gtk-csd-titlebar-radius); border-top-right-radius: env(-moz-gtk-csd-titlebar-radius);
} @@ -50,13 +51,14 @@
/* stylelint-disable-next-line media-query-no-invalid */ /* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("widget.gtk.rounded-bottom-corners.enabled") { @media -moz-pref("widget.gtk.rounded-bottom-corners.enabled") {
@ -27,8 +25,7 @@ index 5c9891e5ed4b865ed4ecc98d794a239b0f96a8f9..e13bf7277edeb49ebbb12cf9359ac619
body, body,
- dialog::backdrop { - dialog::backdrop {
+ dialog::backdrop, + dialog::backdrop,
+ #browser::after, + #zen-browser-background {
+ #browser::before {
/* Use an uniform clip to allow WebRender to optimize it better */ /* Use an uniform clip to allow WebRender to optimize it better */
border-radius: env(-moz-gtk-csd-titlebar-radius); border-radius: env(-moz-gtk-csd-titlebar-radius);
} }

View file

@ -1,5 +1,5 @@
diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css
index 7fc76bc82bd5d6311442b85a76d885dcfb6d753d..61b1b3ac8241c4f12e4ca8966a7ac1fae0eb41ee 100644 index 9f795cd5b67b12ed4e6d0838d6e0b8e1048f6e50..e9d9326f174a25140113de40f4c57e8bc67677ff 100644
--- a/browser/themes/osx/browser.css --- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css +++ b/browser/themes/osx/browser.css
@@ -38,7 +38,7 @@ @@ -38,7 +38,7 @@

View file

@ -1,24 +0,0 @@
diff --git a/browser/themes/shared/customizableui/panelUI-shared.css b/browser/themes/shared/customizableui/panelUI-shared.css
index bdbfd3521b4921f7d6d44623181019a8263b5825..e69b1fb9ee7e553f1183f7a52f9104d6f99d4288 100644
--- a/browser/themes/shared/customizableui/panelUI-shared.css
+++ b/browser/themes/shared/customizableui/panelUI-shared.css
@@ -18,7 +18,7 @@
--menu-panel-width-wide: 29em;
--arrowpanel-menuitem-margin-block: 0;
- --arrowpanel-menuitem-margin-inline: 8px;
+ --arrowpanel-menuitem-margin-inline: 4px;
--arrowpanel-menuitem-margin: var(--arrowpanel-menuitem-margin-block) var(--arrowpanel-menuitem-margin-inline);
--arrowpanel-menuitem-padding-block: 8px;
--arrowpanel-menuitem-padding-inline: 8px;
@@ -819,8 +819,8 @@ toolbarbutton[constrain-size="true"][cui-areatype="panel"] > .toolbarbutton-badg
/* Firefox Account Toolbar Panel */
#fxa-avatar-image {
- width: 16px;
- height: 16px;
+ width: 20px;
+ height: 20px;
}
:root {

View file

@ -380,7 +380,7 @@ groupbox h2 {
} }
.zenCKSOption-unsafed { .zenCKSOption-unsafed {
color: yellow; color: light-dark(orange, yellow);
margin-left: 10px; margin-left: 10px;
margin-top: 5px; margin-top: 5px;
} }
@ -390,7 +390,7 @@ groupbox h2 {
} }
.zenCKSOption-input.zenCKSOption-input-unsafed { .zenCKSOption-input.zenCKSOption-input-unsafed {
border-color: yellow; border-color: light-dark(orange, yellow);
} }
.zenCKSOption-input.zenCKSOption-input-valid { .zenCKSOption-input.zenCKSOption-input-valid {

View file

@ -1,13 +0,0 @@
diff --git a/browser/themes/shared/tabbrowser/fullscreen-and-pointerlock.css b/browser/themes/shared/tabbrowser/fullscreen-and-pointerlock.css
index 787e3153e2e07b383445e94aa9e25177eb49c929..a017e4c003f6c3b9af7c226c637b37aea6baa7e5 100644
--- a/browser/themes/shared/tabbrowser/fullscreen-and-pointerlock.css
+++ b/browser/themes/shared/tabbrowser/fullscreen-and-pointerlock.css
@@ -7,7 +7,7 @@
:root[inDOMFullscreen] #sidebar-box,
:root[inDOMFullscreen] #sidebar-main,
:root[inDOMFullscreen] #sidebar-splitter,
-:root[inFullscreen]:not([macOSNativeFullscreen]) toolbar:not([fullscreentoolbar=true]),
+:root[inFullscreen]:not([macOSNativeFullscreen]) toolbar:not([fullscreentoolbar=true]):not(.zen-dont-hide-on-fullscreen),
:root[inFullscreen] .global-notificationbox {
visibility: collapse;
}

View file

@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c9681952b078526 100644 index 5b9ad123d819c6ef068acd427416957a1d0939fe..311caa27ee268c95215d459be02a93d20e129f8b 100644
--- a/browser/themes/shared/tabbrowser/tabs.css --- a/browser/themes/shared/tabbrowser/tabs.css
+++ b/browser/themes/shared/tabbrowser/tabs.css +++ b/browser/themes/shared/tabbrowser/tabs.css
@@ -32,7 +32,7 @@ @@ -33,7 +33,7 @@
--tab-block-margin: 4px; --tab-block-margin: 4px;
--tab-icon-end-margin: 5.5px; --tab-icon-end-margin: 5.5px;
--tab-label-line-height: 1.7; --tab-label-line-height: 1.7;
@ -11,7 +11,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
--tab-hover-background-color: color-mix(in srgb, currentColor 11%, transparent); --tab-hover-background-color: color-mix(in srgb, currentColor 11%, transparent);
--tab-selected-textcolor: var(--toolbar-color); --tab-selected-textcolor: var(--toolbar-color);
--tab-selected-bgcolor: var(--toolbar-bgcolor); --tab-selected-bgcolor: var(--toolbar-bgcolor);
@@ -210,8 +210,7 @@ @@ -211,8 +211,7 @@
} }
#tabbrowser-tabs[positionpinnedtabs] > #tabbrowser-arrowscrollbox > &[pinned] { #tabbrowser-tabs[positionpinnedtabs] > #tabbrowser-arrowscrollbox > &[pinned] {
@ -21,7 +21,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
} }
#tabbrowser-tabs[movingtab] &:is(:active, [multiselected]) { #tabbrowser-tabs[movingtab] &:is(:active, [multiselected]) {
@@ -257,7 +256,6 @@ @@ -258,7 +257,6 @@
} }
:root:not([uidensity=compact], [sidebar-expand-on-hover]) &[pinned] { :root:not([uidensity=compact], [sidebar-expand-on-hover]) &[pinned] {
@ -29,7 +29,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
} }
&:is([selected], [multiselected]) { &:is([selected], [multiselected]) {
@@ -271,6 +269,7 @@ @@ -272,6 +270,7 @@
border-radius: inherit; border-radius: inherit;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
@ -37,15 +37,34 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
&::before { &::before {
position: absolute; position: absolute;
@@ -458,6 +457,7 @@ @@ -459,14 +458,11 @@
.tab-icon-image { .tab-icon-image {
-moz-context-properties: fill, stroke; -moz-context-properties: fill, stroke;
fill: currentColor; fill: currentColor;
+ border-radius: 4px; + border-radius: 4px;
/* Apply crisp rendering for favicons at exactly 2dppx resolution */ /* stylelint-disable-next-line media-query-no-invalid */
@media (resolution: 2dppx) { @media -moz-pref("browser.tabs.fadeOutUnloadedTabs") {
@@ -557,7 +557,7 @@ &[pending] {
- filter: grayscale(100%);
- @media (prefers-color-scheme: dark) {
- filter: grayscale(100%) invert();
- }
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -483,10 +479,6 @@
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("browser.tabs.fadeOutExplicitlyUnloadedTabs") {
&[pending][discarded] {
- filter: grayscale(100%);
- @media (prefers-color-scheme: dark) {
- filter: grayscale(100%) invert();
- }
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -559,7 +551,7 @@
z-index: 1; /* Overlay tab title */ z-index: 1; /* Overlay tab title */
#tabbrowser-tabs[orient=vertical] & { #tabbrowser-tabs[orient=vertical] & {
@ -54,7 +73,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
} }
&[crashed] { &[crashed] {
@@ -565,7 +565,7 @@ @@ -567,7 +559,7 @@
} }
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]), #tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]),
@ -63,7 +82,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
&[soundplaying] { &[soundplaying] {
list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg"); list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg");
} }
@@ -595,7 +595,7 @@ @@ -597,7 +589,7 @@
background-image: linear-gradient(var(--audio-overlay-extra-background)), background-image: linear-gradient(var(--audio-overlay-extra-background)),
linear-gradient(var(--toolbox-bgcolor)); linear-gradient(var(--toolbox-bgcolor));
-moz-context-properties: fill; -moz-context-properties: fill;
@ -72,7 +91,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
color-scheme: var(--tab-selected-color-scheme); color-scheme: var(--tab-selected-color-scheme);
border-radius: var(--border-radius-circle); border-radius: var(--border-radius-circle);
@@ -1362,7 +1362,7 @@ tab-group { @@ -1365,7 +1357,7 @@ tab-group {
} }
} }
@ -81,7 +100,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
#vertical-tabs-newtab-button { #vertical-tabs-newtab-button {
appearance: none; appearance: none;
min-height: var(--tab-min-height); min-height: var(--tab-min-height);
@@ -1373,7 +1373,7 @@ tab-group { @@ -1376,7 +1368,7 @@ tab-group {
margin-inline: var(--tab-inner-inline-margin); margin-inline: var(--tab-inner-inline-margin);
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text { #tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text {
@ -90,7 +109,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
} }
&:hover { &:hover {
@@ -1397,7 +1397,7 @@ tab-group { @@ -1400,7 +1392,7 @@ tab-group {
* flex container. #tabs-newtab-button is a child of the arrowscrollbox where * 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. * we don't want a gap (between tabs), so we have to add some margin.
*/ */
@ -99,7 +118,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
margin-block: var(--tab-block-margin); margin-block: var(--tab-block-margin);
} }
@@ -1471,8 +1471,6 @@ tab-group { @@ -1474,8 +1466,6 @@ tab-group {
} }
:root:not([sidebar-expand-on-hover]) & { :root:not([sidebar-expand-on-hover]) & {
@ -108,7 +127,15 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
/* stylelint-disable-next-line media-query-no-invalid */ /* stylelint-disable-next-line media-query-no-invalid */
@media not -moz-pref("sidebar.visibility", "expand-on-hover") { @media not -moz-pref("sidebar.visibility", "expand-on-hover") {
/* We need these rules to apply at all times when the sidebar.visibility /* We need these rules to apply at all times when the sidebar.visibility
@@ -1717,7 +1715,7 @@ tab-group { @@ -1585,7 +1575,6 @@ tab-group {
&:not([expanded]) {
.tabbrowser-tab[pinned] {
- width: var(--tab-collapsed-width);
}
.tab-background {
@@ -1716,7 +1705,7 @@ tab-group {
toolbarbutton:not(#firefox-view-button), toolbarbutton:not(#firefox-view-button),
toolbarpaletteitem:not(#wrapper-firefox-view-button) toolbarpaletteitem:not(#wrapper-firefox-view-button)
) ~ #tabbrowser-tabs { ) ~ #tabbrowser-tabs {
@ -117,7 +144,7 @@ index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c968195
padding-inline-start: calc(var(--tab-overflow-pinned-tabs-width) + 2px); padding-inline-start: calc(var(--tab-overflow-pinned-tabs-width) + 2px);
margin-inline-start: 2px; margin-inline-start: 2px;
} }
@@ -1751,7 +1749,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button { @@ -1750,7 +1739,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
list-style-image: url(chrome://global/skin/icons/plus.svg); list-style-image: url(chrome://global/skin/icons/plus.svg);
} }

View file

@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/toolbarbuttons.css b/browser/themes/shared/toolbarbuttons.css diff --git a/browser/themes/shared/toolbarbuttons.css b/browser/themes/shared/toolbarbuttons.css
index 26b58ee104a432a359ba2667d2e49a9231e81fef..7cb950e7b3fcb6f599e9cb645ea24a515e2cc491 100644 index d84326072652a48d7fc9b61c585fb00ac4b506ab..c91654eb852460721cf7e45623fb471027f06d90 100644
--- a/browser/themes/shared/toolbarbuttons.css --- a/browser/themes/shared/toolbarbuttons.css
+++ b/browser/themes/shared/toolbarbuttons.css +++ b/browser/themes/shared/toolbarbuttons.css
@@ -218,7 +218,7 @@ toolbar[brighttext] .toolbaritem-combined-buttons > separator { @@ -249,7 +249,7 @@ toolbar[brighttext] .toolbaritem-combined-buttons > separator {
#nav-bar-overflow-button { #nav-bar-overflow-button {
list-style-image: url("chrome://global/skin/icons/chevron.svg"); list-style-image: url("chrome://global/skin/icons/chevron.svg");
@ -11,7 +11,7 @@ index 26b58ee104a432a359ba2667d2e49a9231e81fef..7cb950e7b3fcb6f599e9cb645ea24a51
display: none; display: none;
} }
@@ -428,7 +428,7 @@ toolbarbutton.bookmark-item:not(.subviewbutton) { @@ -459,7 +459,7 @@ toolbarbutton.bookmark-item:not(.subviewbutton) {
*/ */
align-items: stretch; align-items: stretch;
> .toolbarbutton-icon { > .toolbarbutton-icon {

View file

@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css
index e237ee9edea85c1d2ef22f988df6b22755e343e6..b06fc06686a7a969e924ad0df662dec937b3c70d 100644 index 23661cf489d97cdbd6d4c66de199fd9dc0c8475f..2677dc60a92cebe014c817414a6067be9543cf98 100644
--- a/browser/themes/shared/urlbar-searchbar.css --- a/browser/themes/shared/urlbar-searchbar.css
+++ b/browser/themes/shared/urlbar-searchbar.css +++ b/browser/themes/shared/urlbar-searchbar.css
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
@ -11,14 +11,18 @@ index e237ee9edea85c1d2ef22f988df6b22755e343e6..b06fc06686a7a969e924ad0df662dec9
--urlbar-margin-inline: 5px; --urlbar-margin-inline: 5px;
--urlbar-padding-block: 4px; --urlbar-padding-block: 4px;
} }
@@ -292,7 +292,9 @@ @@ -303,10 +303,14 @@
}
#urlbar[breakout][breakout-extend] { #urlbar[breakout][breakout-extend] {
- margin-left: calc(-1 * var(--urlbar-margin-inline)); height: auto;
+ :root:not([zen-single-toolbar='true']) { + :root:not([zen-single-toolbar='true']) {
+ margin-left: calc(-1 * var(--urlbar-margin-inline)); margin-left: calc(-1 * var(--urlbar-margin-inline));
+ } + }
+ align-items: center;
width: calc(var(--urlbar-width) + 2 * var(--urlbar-margin-inline)); width: calc(var(--urlbar-width) + 2 * var(--urlbar-margin-inline));
> .urlbar-input-container { > .urlbar-input-container {
+ align-items: center;
height: var(--urlbar-container-height);
padding-block: calc((var(--urlbar-container-height) - var(--urlbar-height)) / 2 + var(--urlbar-container-padding));
padding-inline: calc(var(--urlbar-margin-inline) + var(--urlbar-container-padding));

View file

@ -60,18 +60,6 @@
list-style-image: url('sidebars-right.svg') !important; list-style-image: url('sidebars-right.svg') !important;
} }
#context_zenSplitTabs {
--menu-image: url('sidebars-right.svg') !important;
}
#context-zen-change-workspace-tab {
--menu-image: url('move-tab.svg') !important;
}
#context-zenSplitLink {
--menu-image: url('split.svg') !important;
}
#sidebar-button:-moz-locale-dir(ltr):not([positionend]), #sidebar-button:-moz-locale-dir(ltr):not([positionend]),
#sidebar-button:-moz-locale-dir(rtl)[positionend] { #sidebar-button:-moz-locale-dir(rtl)[positionend] {
list-style-image: url('chrome://browser/skin/sidebars.svg') !important; list-style-image: url('chrome://browser/skin/sidebars.svg') !important;
@ -133,6 +121,10 @@
list-style-image: url('tab.svg') !important; list-style-image: url('tab.svg') !important;
} }
#context-navigation > menuitem {
padding: 4px;
}
#history-panelmenu, #history-panelmenu,
.urlbarView-row[source='history'] .urlbarView-row[source='history']
> .urlbarView-row-inner > .urlbarView-row-inner
@ -173,15 +165,6 @@
list-style-image: url('open.svg') !important; list-style-image: url('open.svg') !important;
} }
#context_zenOpenWorkspace {
--menu-image: url('open.svg') !important;
}
#context_zenEditWorkspace,
#zenToolbarThemePicker {
--menu-image: url('edit-theme.svg') !important;
}
#add-ons-button, #add-ons-button,
#appMenu-extensions-themes-button, #appMenu-extensions-themes-button,
#unified-extensions-button { #unified-extensions-button {
@ -303,6 +286,11 @@
list-style-image: url('home.svg') !important; list-style-image: url('home.svg') !important;
} }
#toggle_toolbar-menubar,
#appMenu_menu_openHelp {
display: none;
}
#library-button { #library-button {
list-style-image: url('library.svg') !important; list-style-image: url('library.svg') !important;
} }
@ -426,7 +414,6 @@
list-style-image: url('customize.svg') !important; list-style-image: url('customize.svg') !important;
} }
#appmenu-zen-share-rice,
#zen-copy-current-url-button { #zen-copy-current-url-button {
list-style-image: url('share.svg'); list-style-image: url('share.svg');
} }
@ -448,6 +435,11 @@
#zen-glance-sidebar-split { #zen-glance-sidebar-split {
list-style-image: url('split.svg'); list-style-image: url('split.svg');
&[disabled='true'] {
opacity: 0.5;
cursor: not-allowed;
}
} }
#sidebar-box[sidebarcommand='viewTabsSidebar'] #sidebar-box[sidebarcommand='viewTabsSidebar']
@ -636,371 +628,6 @@
list-style-image: url('manage.svg') !important; list-style-image: url('manage.svg') !important;
} }
/* Context Menu Icons */
#context-video-pictureinpicture:not([checked='true']) .menu-iconic-icon {
list-style-image: url('media-pip.svg') !important;
}
#context-media-loop:not([checked='true']) .menu-iconic-icon {
list-style-image: url('media-loop.svg') !important;
}
:not(:not(menubar) > menu, #ContentSelectDropdown)
> menupopup
> menuitem:not(
.menuitem-iconic,
[type='checkbox'],
[type='radio'],
.in-menulist,
.in-menulist menuitem,
.unified-nav-current
),
:not(:not(menubar) > menu, #ContentSelectDropdown)
> menupopup
> menu:not(
.menu-iconic,
[type='checkbox'],
[type='radio'],
.in-menulist,
.in-menulist menu,
.unified-nav-current
),
#toggle_toolbar-menubar,
#PanelUI-history toolbarbutton,
#unified-extensions-context-menu menuitem {
background-image: var(--menu-image) !important;
background-size: 16px !important;
background-position: var(--fp-contextmenu-menuitem-padding-inline) center !important;
background-repeat: no-repeat !important;
-moz-context-properties: fill, fill-opacity !important;
fill: currentColor !important;
}
@media not (-moz-platform: windows) {
menu > .menu-iconic-text,
menuitem > .menu-iconic-text {
padding-inline-start: var(--fp-contextmenu-menuicon-margin-inline) !important;
}
}
#context-savepage {
--menu-image: url('save.svg');
}
#context-selectall,
.textbox-contextmenu menuitem[cmd*='selectAll'],
#context_selectAllTabs,
#toolbar-context-selectAllTabs {
--menu-image: url('edit-select-all.svg');
}
#context-undo,
.textbox-contextmenu menuitem[cmd*='undo'],
#context_undoCloseTab,
#toolbar-context-undoCloseTab {
--menu-image: url('edit-undo.svg');
}
#toggle_toolbar-menubar {
--menu-image: url('menu-bar.svg');
}
#context-redo,
.textbox-contextmenu menuitem[cmd*='redo'] {
--menu-image: url('edit-redo.svg');
}
#context-copy,
.textbox-contextmenu menuitem[cmd*='copy'],
.textbox-contextmenu #strip-on-share,
#placesContext_copy {
--menu-image: url('edit-copy.svg');
}
#context-paste,
.textbox-contextmenu menuitem[cmd*='paste'],
#placesContext_paste_group {
--menu-image: url('edit-paste.svg');
}
#context-cut,
.textbox-contextmenu menuitem[cmd*='cut'],
#placesContext_cut {
--menu-image: url('edit-cut.svg');
}
#context-delete,
.customize-context-removeExtension,
.unified-extensions-context-menu-remove-extension,
.textbox-contextmenu menuitem[cmd*='delete'],
menuitem[id='placesContext_deleteBookmark'],
menuitem[id='placesContext_deleteFolder'],
menuitem[id='placesContext_delete'],
menuitem[id='placesContext_delete_history'],
menuitem[id='placesContext_deleteHost'],
#context_zenDeleteWebPanel,
#context_zenDeleteWorkspace {
--menu-image: url('edit-delete.svg');
}
#paste-and-go {
--menu-image: url('paste-and-go.svg');
}
#context-print-selection {
--menu-image: url('print.svg');
}
#context-take-screenshot {
--menu-image: url('screenshot.svg');
}
#context-viewsource {
--menu-image: url('source-code.svg');
}
#context-inspect-a11y {
--menu-image: url('accessibility.svg');
}
#context-inspect {
--menu-image: url('inspect.svg');
}
#context-searchselect {
--menu-image: url('search-glass.svg');
}
#context-viewimage {
--menu-image: url('image-open.svg');
}
#context-viewimageinfo {
--menu-image: url('info.svg');
}
#context-saveimage,
#context-video-saveimage {
--menu-image: url('image-save.svg');
}
#context-savevideo {
--menu-image: url('video-save.svg');
}
#context-viewvideo {
--menu-image: url('video-open.svg');
}
#context-saveaudio {
--menu-image: url('audio-save.svg');
}
#context-copyimage-contents {
--menu-image: url('image-copy.svg');
}
#context-copyimage,
#context-copyvideourl,
#context-copylink,
#context-stripOnShareLink,
#context_zenOpenNewTabWebPanel,
#context-pdfjs-copy {
--menu-image: url('link.svg');
}
#context-openlinkincurrent {
--menu-image: url('ext-link.svg');
}
#context-viewsource,
#context-viewframesource,
#context-viewpartialsource-selection {
--menu-image: url('source-code.svg');
}
#context-sendimage,
#context-sendvideo,
#context-sendaudio {
--menu-image: url('mail.svg');
}
#context-setDesktopBackground,
.viewCustomizeToolbar {
--menu-image: url('customize.svg');
}
#context-reloadimage,
#context_reloadTab,
#context_reloadSelectedTabs,
#toolbar-context-reloadSelectedTab,
#toolbar-context-reloadSelectedTabs,
#context_zen-reset-pinned-tab {
--menu-image: url('reload.svg');
}
#context-sendlinktodevice,
#context_sendTabToDevice,
#context-sendpagetodevice {
--menu-image: url('send-to-device.svg');
}
#context-openlinkintab,
#context-openlinkincontainertab,
#context_zenWorkspacesOpenInContainerTab,
#context_zenWebPanelContextInContainer,
menuitem[id='placesContext_open:newtab'],
menuitem[id='placesContext_openLinks:tabs'],
menuitem[id='placesContext_openBookmarkLinks:tabs'],
menuitem[id='placesContext_openBookmarkContainer:tabs'] {
--menu-image: url('tab.svg');
}
#context_openANewTab,
#toolbar-context-openANewTab {
--menu-image: url('new-tab-image.svg');
}
#context-openlinkinusercontext-menu,
menu[id='placesContext_open:newcontainertab'],
menu[id='placesContext_openContainer:tabs'] {
--menu-image: url('container-tab.svg');
}
#context-openlink,
menuitem[id='placesContext_open:newwindow'] {
--menu-image: url('window.svg');
}
#context-openlinkprivate,
menuitem[id='placesContext_open:newprivatewindow'] {
--menu-image: url('private-window.svg');
}
#context-savelink {
--menu-image: url('downloads.svg');
}
#spell-add-to-dictionary {
--menu-image: url('add-to-dictionary.svg');
}
#manage-saved-logins {
--menu-image: url('passwords.svg');
}
#context-media-play,
#context_playTab,
#context_playSelectedTabs {
--menu-image: url('media-play.svg');
}
#context-media-pause {
--menu-image: url('media-pause.svg');
}
#context-media-mute,
#context_toggleMuteTab,
#context_toggleMuteSelectedTabs,
#context_zenToggleMuteWebPanel {
--menu-image: url('media-mute.svg');
}
#context-media-unmute,
#context_toggleMuteTab[muted],
#context_toggleMuteSelectedTabs[muted],
#context_zenToggleMuteWebPanel[muted] {
--menu-image: url('media-unmute.svg');
}
#context-media-playbackrate {
--menu-image: url('media-speed.svg');
}
#context-video-fullscreen {
--menu-image: url('fullscreen.svg');
}
#context-leave-dom-fullscreen,
menuitem[contexttype='fullscreen'][label*='Exit'] {
--menu-image: url('fullscreen-exit.svg');
}
#context-media-hidecontrols,
#context-media-showcontrols {
--menu-image: url('permissions.svg');
}
#context_pinTab,
#context_unpinTab,
#context_pinSelectedTabs,
#context_unpinSelectedTabs,
.customize-context-moveToPanel,
#context_zen-replace-pinned-url-with-current {
--menu-image: url('pin.svg');
}
#context_zen-add-essential {
--menu-image: url('essential-add.svg');
}
#context_zen-remove-essential {
--menu-image: url('essential-remove.svg');
}
.customize-context-removeFromToolbar {
--menu-image: url('unpin.svg');
}
#zen-sidebar-web-panel-pinned[pinned='true'] {
list-style-image: url('pin.svg') !important;
}
#zen-sidebar-web-panel-pinned {
list-style-image: url('unpin.svg') !important;
}
#context_duplicateTab,
#context_duplicateTabs {
--menu-image: url('duplicate-tab.svg');
}
#zen-context-menu-compact-mode {
--menu-image: url('sidebar.svg');
}
#context_bookmarkTab,
#context_bookmarkSelectedTabs,
#toggle_PersonalToolbar,
#context-bookmarklink,
#toolbar-context-bookmarkSelectedTab,
#toolbar-context-bookmarkSelectedTabs {
--menu-image: url('bookmark-hollow.svg');
}
menuitem[id='placesContext_show_bookmark:info'],
menuitem[id='placesContext_show_folder:info'],
menuitem[id='placesContext_show:info'] {
--menu-image: url('edit.svg');
}
menuitem[id='placesContext_showAllBookmarks'],
#BMB_bookmarksShowAllTop,
#BMB_bookmarksShowAll,
.customize-context-manageExtension,
.unified-extensions-context-menu-manage-extension {
--menu-image: url('manage.svg');
}
#BMB_viewBookmarksSidebar {
--menu-image: url('chrome://browser/skin/sidebars.svg');
}
#BMB_searchBookmarks {
--menu-image: url('search-page.svg');
}
#appMenuRecentlyClosedTabs { #appMenuRecentlyClosedTabs {
list-style-image: url('container-tab.svg') !important; list-style-image: url('container-tab.svg') !important;
} }
@ -1021,58 +648,12 @@ menuitem[id='placesContext_showAllBookmarks'],
list-style-image: url('manage.svg') !important; list-style-image: url('manage.svg') !important;
} }
menuitem[id='placesContext_new:bookmark'],
menuitem[id='placesContext_new:folder'],
menuitem[id='placesContext_new:separator'] {
--menu-image: url('plus.svg');
}
#context-savelinktopocket,
#context-pocket {
--menu-image: url('pocket-outline.svg');
}
#context_moveTabOptions {
--menu-image: url('move-tab.svg');
}
.share-tab-url-item {
--menu-image: url('share.svg');
}
#context_reopenInContainer {
--menu-image: url('container-tab.svg');
}
#context_closeTab {
--menu-image: url('close.svg');
}
#context_closeTabOptions {
--menu-image: url('close-all.svg');
}
#context_zenUnloadTab,
#context_zenUnloadWebPanel,
#context_zenTabActions {
--menu-image: url('close-all.svg');
}
.customize-context-reportExtension,
.unified-extensions-context-menu-report-extension {
--menu-image: url('report.svg');
}
/* FIX header icons for the app menu sub menus (eg. fx account, history...) */ /* FIX header icons for the app menu sub menus (eg. fx account, history...) */
.panel-header > h1 { .panel-header > h1 {
text-align: left; text-align: left;
margin-left: 8px !important; margin-left: 8px !important;
} }
.wordmark::after {
content: 'Plus' !important;
}
/* header icons for the app menu sub menus (eg. fx account, history...) */ /* header icons for the app menu sub menus (eg. fx account, history...) */
.panel-header > h1 > span::before { .panel-header > h1 > span::before {
content: ''; content: '';
@ -1117,67 +698,10 @@ menuitem[id='placesContext_new:separator'] {
--fp-enabled: 1; --fp-enabled: 1;
} }
@media not (-moz-platform: linux) {
.unified-extensions-context-menu-pin-to-toolbar {
--menu-image: url('pin.svg');
}
}
.unified-extensions-context-menu-move-widget-down {
--menu-image: url('arrow-down.svg');
}
.unified-extensions-context-menu-move-widget-up {
--menu-image: url('arrow-up.svg');
}
#alltabs-button { #alltabs-button {
list-style-image: url('chrome://browser/skin/tabs.svg') !important; list-style-image: url('chrome://browser/skin/tabs.svg') !important;
} }
:not(:not(menubar) > menu, #ContentSelectDropdown)
> menupopup
> menuitem:not(
.menuitem-iconic,
[type='checkbox'],
[type='radio'],
.in-menulist,
.in-menulist menuitem,
.unified-nav-current
),
:not(:not(menubar) > menu, #ContentSelectDropdown)
> menupopup
> menu:not(
.menu-iconic,
[type='checkbox'],
[type='radio'],
.in-menulist,
.in-menulist menu,
.unified-nav-current
),
:not(:not(menubar) > menu, #ContentSelectDropdown) > menupopup > menucaption {
padding-inline-start: calc(
var(--fp-contextmenu-menuitem-padding-inline) + 16px +
var(--fp-contextmenu-menuicon-margin-inline)
) !important;
}
menupopup > menuitem:is([type='checkbox']) .menu-iconic-left {
--menu-image: none !important;
margin-inline-start: 4px;
@media not (-moz-platform: windows) {
margin-inline-end: 0;
padding-inline-end: 0;
}
}
@media (-moz-platform: windows) {
menupopup > menuitem[checked='true'] {
padding-inline-start: 6px;
}
}
#toolbar-context-toggle-vertical-tabs, #toolbar-context-toggle-vertical-tabs,
#toolbar-context-customize-sidebar, #toolbar-context-customize-sidebar,
#sidebarRevampSeparator { #sidebarRevampSeparator {

View file

@ -1,21 +1,12 @@
diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css
index 3e75a5f366e76acf4b9457a510b58b0cb8af580f..99b5712d533e99f3bb3f13c1485e771ab66731cd 100644 index 007aec91e089a1d2df20235890b268b820b0a529..ac0592cbcec62ffefb58b491dff48749852f2d88 100644
--- a/browser/themes/windows/browser.css --- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css
@@ -34,7 +34,6 @@ @@ -31,7 +31,6 @@
/* stylelint-disable-next-line media-query-no-invalid */ /* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("widget.windows.mica.toplevel-backdrop", 2) { @media -moz-pref("widget.windows.mica.toplevel-backdrop", 2) {
/* For acrylic, do the same we do for popups to guarantee some contrast */ /* For acrylic, do the same we do for popups to guarantee some contrast */
- background-color: light-dark(rgba(255, 255, 255, .6), rgba(0, 0, 0, .6)); - background-color: light-dark(rgba(255, 255, 255, .6), rgba(0, 0, 0, .6));
} }
} }
}
@@ -57,7 +56,7 @@
}
}
- &[sizemode="normal"] #navigator-toolbox {
+ &[sizemode="normal"] #browser {
border-top: .5px solid ActiveBorder;
&:-moz-window-inactive {
border-top-color: InactiveBorder;

View file

@ -1,8 +1,8 @@
diff --git a/build/moz.build b/build/moz.build diff --git a/build/moz.build b/build/moz.build
index ad78395c33bba4f6a7bd73bae2a3b6e0658ed59e..a3ba1001a60b764c9ef1c824917fe4d5b81ed0b2 100644 index f7a912ec35dd089ea9a7e712765e954854f55cb3..a84534efbc7662f81573a4a80bc045e0a6d2ed3e 100644
--- a/build/moz.build --- a/build/moz.build
+++ b/build/moz.build +++ b/build/moz.build
@@ -90,7 +90,7 @@ if CONFIG["MOZ_APP_BASENAME"]: @@ -89,7 +89,7 @@ if CONFIG["MOZ_APP_BASENAME"]:
if CONFIG[var]: if CONFIG[var]:
appini_defines[var] = True appini_defines[var] = True

View file

@ -1,5 +1,5 @@
diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py
index c59efbdc5382da897dcac31da7039cdc92e1d7dc..9b14add5b0c5afec5b7efc7f9df7d04d3169fc80 100755 index 6017810c873f6be5a5d133dc9386f7cd8879e81b..6d399e0c8135d2c27157c81d75515de04c39f1d7 100755
--- a/build/pgo/profileserver.py --- a/build/pgo/profileserver.py
+++ b/build/pgo/profileserver.py +++ b/build/pgo/profileserver.py
@@ -18,7 +18,13 @@ from mozprofile import FirefoxProfile, Preferences @@ -18,7 +18,13 @@ from mozprofile import FirefoxProfile, Preferences

View file

@ -1,5 +1,5 @@
diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp
index e95ff966b34576439c745aa206ff534a835c956f..5691cb2baa76b7cd543bb030b7c8d3028359bc4c 100644 index 77491402cb2921ad52c028ee8fe940636cbe3cf1..e93265e1bb96a07a6d9a66074f191cb8c16fa37a 100644
--- a/docshell/base/nsAboutRedirector.cpp --- a/docshell/base/nsAboutRedirector.cpp
+++ b/docshell/base/nsAboutRedirector.cpp +++ b/docshell/base/nsAboutRedirector.cpp
@@ -108,7 +108,7 @@ static const RedirEntry kRedirMap[] = { @@ -108,7 +108,7 @@ static const RedirEntry kRedirMap[] = {

View file

@ -1,8 +1,8 @@
diff --git a/dom/base/use_counter_metrics.yaml b/dom/base/use_counter_metrics.yaml diff --git a/dom/base/use_counter_metrics.yaml b/dom/base/use_counter_metrics.yaml
index 58755773c26952b79df258dd8f55147c77db9c5f..041bd3fe99303621733cd3543e196b6a03950526 100644 index 6d2b80297f728af4e6b363e09dac4244d9ffd312..03ca7d1c7f27430923f146a3d3a708a09e351948 100644
--- a/dom/base/use_counter_metrics.yaml --- a/dom/base/use_counter_metrics.yaml
+++ b/dom/base/use_counter_metrics.yaml +++ b/dom/base/use_counter_metrics.yaml
@@ -21402,6 +21402,22 @@ use.counter.css.page: @@ -21527,6 +21527,22 @@ use.counter.css.page:
send_in_pings: send_in_pings:
- use-counters - use-counters
@ -25,7 +25,7 @@ index 58755773c26952b79df258dd8f55147c77db9c5f..041bd3fe99303621733cd3543e196b6a
css_transform_origin: css_transform_origin:
type: counter type: counter
description: > description: >
@@ -33372,6 +33388,22 @@ use.counter.css.doc: @@ -33497,6 +33513,22 @@ use.counter.css.doc:
send_in_pings: send_in_pings:
- use-counters - use-counters

View file

@ -1,8 +1,8 @@
diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp
index 677a2f25b16f4cf724b57d86a2b83acf40ec6164..e06f85366866c1cc99d27bc10cbebf2cb986e5cb 100644 index add22d0f3c462eae3d5b5140779ff7a4e25f9321..7653df83680ee0e6c765432b1539fe1c90bfae35 100644
--- a/dom/html/HTMLMediaElement.cpp --- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp
@@ -455,6 +455,7 @@ class HTMLMediaElement::MediaControlKeyListener final @@ -452,6 +452,7 @@ class HTMLMediaElement::MediaControlKeyListener final
// audible state. Therefore, in that case we would noitfy the audible state // audible state. Therefore, in that case we would noitfy the audible state
// when media starts playing. // when media starts playing.
if (mState == MediaPlaybackState::ePlayed) { if (mState == MediaPlaybackState::ePlayed) {
@ -10,8 +10,8 @@ index 677a2f25b16f4cf724b57d86a2b83acf40ec6164..e06f85366866c1cc99d27bc10cbebf2c
NotifyAudibleStateChanged(mIsOwnerAudible NotifyAudibleStateChanged(mIsOwnerAudible
? MediaAudibleState::eAudible ? MediaAudibleState::eAudible
: MediaAudibleState::eInaudible); : MediaAudibleState::eInaudible);
@@ -6967,6 +6968,9 @@ void HTMLMediaElement::FireTimeUpdate(TimeupdateType aType) { @@ -6955,6 +6956,9 @@ void HTMLMediaElement::FireTimeUpdate(TimeupdateType aType) {
DispatchAsyncEvent(std::move(runner)); QueueTask(std::move(runner));
mQueueTimeUpdateRunnerTime = TimeStamp::Now(); mQueueTimeUpdateRunnerTime = TimeStamp::Now();
mLastCurrentTime = CurrentTime(); mLastCurrentTime = CurrentTime();
+ if (aType == TimeupdateType::eMandatory) { + if (aType == TimeupdateType::eMandatory) {

View file

@ -1,8 +1,8 @@
diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp
index b3bec3821582d48c79cd88a4efe5c7bae1fd42e6..0bb81a8b0fa9478c894f80cfa81fd04c67fdd79f 100644 index 51f63f998e47aa4b1dffc3cacdb0a698b33b4623..0387738ce1f29b5db4a5d03a3b2f5f3a91011125 100644
--- a/dom/script/ScriptLoader.cpp --- a/dom/script/ScriptLoader.cpp
+++ b/dom/script/ScriptLoader.cpp +++ b/dom/script/ScriptLoader.cpp
@@ -2670,6 +2670,36 @@ void ScriptLoader::CalculateBytecodeCacheFlag(ScriptLoadRequest* aRequest) { @@ -2679,6 +2679,36 @@ void ScriptLoader::CalculateBytecodeCacheFlag(ScriptLoadRequest* aRequest) {
hasFetchCountMin = false; hasFetchCountMin = false;
break; break;
} }

View file

@ -1,8 +1,8 @@
diff --git a/gfx/wr/webrender/src/picture.rs b/gfx/wr/webrender/src/picture.rs diff --git a/gfx/wr/webrender/src/picture.rs b/gfx/wr/webrender/src/picture.rs
index 7a811bc074959e0f0e7e25603acc4bf50edce4dc..4954cd9b2b3c9efdbe32343152c877186751ec26 100644 index 3b0671ec8ffb8cbd0843e18569a948203c2b9cfe..77d4953cc9bf07d38efd26f4fe95e465b244598c 100644
--- a/gfx/wr/webrender/src/picture.rs --- a/gfx/wr/webrender/src/picture.rs
+++ b/gfx/wr/webrender/src/picture.rs +++ b/gfx/wr/webrender/src/picture.rs
@@ -7957,7 +7957,12 @@ fn get_relative_scale_offset( @@ -8027,7 +8027,12 @@ fn get_relative_scale_offset(
CoordinateSpaceMapping::Local => ScaleOffset::identity(), CoordinateSpaceMapping::Local => ScaleOffset::identity(),
CoordinateSpaceMapping::ScaleOffset(scale_offset) => scale_offset, CoordinateSpaceMapping::ScaleOffset(scale_offset) => scale_offset,
CoordinateSpaceMapping::Transform(m) => { CoordinateSpaceMapping::Transform(m) => {

View file

@ -1,8 +1,8 @@
diff --git a/image/decoders/nsJXLDecoder.h b/image/decoders/nsJXLDecoder.h diff --git a/image/decoders/nsJXLDecoder.h b/image/decoders/nsJXLDecoder.h
index 6cde7456ca03f79e74401c1d215b9d50453ebf41..2f593ca3b70100c600b86e753d7a458c83b4f15c 100644 index 0b723878aefdc5a37c2cffb72a561f859ad79cdf..6d39326dbefa9a85cc02b426de5c9f9149fe612d 100644
--- a/image/decoders/nsJXLDecoder.h --- a/image/decoders/nsJXLDecoder.h
+++ b/image/decoders/nsJXLDecoder.h +++ b/image/decoders/nsJXLDecoder.h
@@ -48,6 +48,18 @@ class nsJXLDecoder final : public Decoder { @@ -46,6 +46,18 @@ class nsJXLDecoder final : public Decoder {
Vector<uint8_t> mBuffer; Vector<uint8_t> mBuffer;
Vector<uint8_t> mOutBuffer; Vector<uint8_t> mOutBuffer;
JxlBasicInfo mInfo{}; JxlBasicInfo mInfo{};

View file

@ -1,8 +1,8 @@
diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp
index 0fff882bd3b643e3ab59cfaada984bef0ae7fee4..71e981251fa9395cbb14927d9bd3473c1e18a2cb 100644 index fe05efa67f97e0d8cc327a4744a225ed5c6132c9..cce0dfb537fa1735b8e7ff67684d373a3081a527 100644
--- a/layout/generic/nsIFrame.cpp --- a/layout/generic/nsIFrame.cpp
+++ b/layout/generic/nsIFrame.cpp +++ b/layout/generic/nsIFrame.cpp
@@ -11721,6 +11721,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const { @@ -11810,6 +11810,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const {
gfx::Matrix4x4 matrix = nsStyleTransformMatrix::ReadTransforms( gfx::Matrix4x4 matrix = nsStyleTransformMatrix::ReadTransforms(
uiReset->mMozWindowTransform, refBox, float(appUnitsPerDevPixel)); uiReset->mMozWindowTransform, refBox, float(appUnitsPerDevPixel));

View file

@ -1,8 +1,8 @@
diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp
index f89bade8099183baa55b38ccc3c77c7ba9f1a290..8ada58a7965e7f2c9375d8b9bf64a5c78d80bf3f 100644 index 8f587542ad248f7c0183e1787c81f37170c7ba54..3b213204e0faabb7ad8988872c8b39c776b87d73 100644
--- a/layout/style/nsStyleStruct.cpp --- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp
@@ -3204,6 +3204,9 @@ nsStyleUIReset::nsStyleUIReset() @@ -3229,6 +3229,9 @@ nsStyleUIReset::nsStyleUIReset()
mWindowShadow(StyleWindowShadow::Auto), mWindowShadow(StyleWindowShadow::Auto),
mWindowOpacity(1.0), mWindowOpacity(1.0),
mMozWindowInputRegionMargin(StyleLength::Zero()), mMozWindowInputRegionMargin(StyleLength::Zero()),
@ -12,7 +12,7 @@ index f89bade8099183baa55b38ccc3c77c7ba9f1a290..8ada58a7965e7f2c9375d8b9bf64a5c7
mTransitions( mTransitions(
nsStyleAutoArray<StyleTransition>::WITH_SINGLE_INITIAL_ELEMENT), nsStyleAutoArray<StyleTransition>::WITH_SINGLE_INITIAL_ELEMENT),
mTransitionTimingFunctionCount(1), mTransitionTimingFunctionCount(1),
@@ -3247,6 +3250,7 @@ nsStyleUIReset::nsStyleUIReset(const nsStyleUIReset& aSource) @@ -3272,6 +3275,7 @@ nsStyleUIReset::nsStyleUIReset(const nsStyleUIReset& aSource)
mWindowOpacity(aSource.mWindowOpacity), mWindowOpacity(aSource.mWindowOpacity),
mMozWindowInputRegionMargin(aSource.mMozWindowInputRegionMargin), mMozWindowInputRegionMargin(aSource.mMozWindowInputRegionMargin),
mMozWindowTransform(aSource.mMozWindowTransform), mMozWindowTransform(aSource.mMozWindowTransform),

View file

@ -1,8 +1,8 @@
diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h
index 472c15a359ecd7ad0834d479f1acc53b4527f5ac..9f8377ab507b5883b92621160987a97e0be80014 100644 index 1c6e2b5a3d4a0ca2b5ef50a84c220958885ce3e3..d74f5558ab70c53fc2649f0f3ab40a456c3e1c6a 100644
--- a/layout/style/nsStyleStruct.h --- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h +++ b/layout/style/nsStyleStruct.h
@@ -1876,6 +1876,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleUIReset { @@ -2003,6 +2003,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleUIReset {
// The margin of the window region that should be transparent to events. // The margin of the window region that should be transparent to events.
mozilla::StyleLength mMozWindowInputRegionMargin; mozilla::StyleLength mMozWindowInputRegionMargin;
mozilla::StyleTransform mMozWindowTransform; mozilla::StyleTransform mMozWindowTransform;

View file

@ -1,8 +1,8 @@
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
index a8ba391326f811ae80510585a3c6ab8d7579f739..5e4569032d4c62e59065262f7069663f9acadad1 100644 index c3b88faf0b3294a143139487d3dac1127b84bd4f..7fdb31b61ced2e1f9131396ed88f1216ce7c5b1f 100644
--- a/modules/libpref/init/StaticPrefList.yaml --- a/modules/libpref/init/StaticPrefList.yaml
+++ b/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml
@@ -18804,6 +18804,7 @@ @@ -18839,6 +18839,7 @@
mirror: always mirror: always
#endif #endif

View file

@ -11,3 +11,8 @@
value: 1 value: 1
mirror: always mirror: always
#endif #endif
- name: zen.haptic-feedback.enabled
type: bool
value: true
mirror: always

View file

@ -1,8 +1,8 @@
diff --git a/netwerk/protocol/http/moz.build b/netwerk/protocol/http/moz.build diff --git a/netwerk/protocol/http/moz.build b/netwerk/protocol/http/moz.build
index a83080d963322d7baa581f1ca61f93d42bb5a938..0741be2ffc5449be829af7f6067d1abcdc86d155 100644 index 4e60ca2b579aa3e02c7769fd966e36d297dd0068..24dbb5de95d4f7dbec354c30f9b2c4d64384225e 100644
--- a/netwerk/protocol/http/moz.build --- a/netwerk/protocol/http/moz.build
+++ b/netwerk/protocol/http/moz.build +++ b/netwerk/protocol/http/moz.build
@@ -223,7 +223,7 @@ LOCAL_INCLUDES += [ @@ -222,7 +222,7 @@ LOCAL_INCLUDES += [
"/netwerk/url-classifier", "/netwerk/url-classifier",
] ]

View file

@ -1,13 +0,0 @@
diff --git a/old-configure.in b/old-configure.in
index 036734708f20d658248a8b5b3a6d8adc2530a878..4e1f0d96cd355cc1195b58548b29c1a5d6bedaa8 100644
--- a/old-configure.in
+++ b/old-configure.in
@@ -89,7 +89,7 @@ dnl Mac bundle identifier (based on MOZ_APP_DISPLAYNAME)
if test -z "$MOZ_MACBUNDLE_ID"; then
MOZ_MACBUNDLE_ID=`echo $MOZ_APP_DISPLAYNAME | tr 'A-Z' 'a-z' | tr -dc 'a-z-'`
fi
-MOZ_MACBUNDLE_ID=${MOZ_DISTRIBUTION_ID}.${MOZ_MACBUNDLE_ID}
+MOZ_MACBUNDLE_ID=app.zen-browser.zen
if test "$MOZ_DEBUG"; then
MOZ_MACBUNDLE_ID=${MOZ_MACBUNDLE_ID}debug
fi

View file

@ -1,5 +1,5 @@
diff --git a/toolkit/actors/PictureInPictureChild.sys.mjs b/toolkit/actors/PictureInPictureChild.sys.mjs diff --git a/toolkit/actors/PictureInPictureChild.sys.mjs b/toolkit/actors/PictureInPictureChild.sys.mjs
index 7ae1aa58bbaeab7a1835a3ea8328735d4f4ecfb1..9d0679dde3c031c2459c09ffbc157f32bc7d003a 100644 index e4dea54a29e2a1575d76091061781a504da38465..d5248eebdd018feca7bb9d5ee3284d6f253a4b35 100644
--- a/toolkit/actors/PictureInPictureChild.sys.mjs --- a/toolkit/actors/PictureInPictureChild.sys.mjs
+++ b/toolkit/actors/PictureInPictureChild.sys.mjs +++ b/toolkit/actors/PictureInPictureChild.sys.mjs
@@ -291,6 +291,7 @@ export class PictureInPictureLauncherChild extends JSWindowActorChild { @@ -291,6 +291,7 @@ export class PictureInPictureLauncherChild extends JSWindowActorChild {

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