Compare commits

..

150 Commits
1.8.1b ... 1.9b

Author SHA1 Message Date
mr. M
ff339c3fb0 Update @zen-browser/surfer dependency to version 1.9.20 2025-03-08 02:01:04 +01:00
mr. M
2e21bcc542 Enhance sidebar and vertical tab styles with workspace-specific adjustments 2025-03-07 23:28:04 +01:00
mr. M
5484aea042 Enhance tab movement functionality with error handling and style reset for dragged tabs 2025-03-07 17:39:05 +01:00
mr. M
4c7955b099 Add actions cache variable exposure to build workflows 2025-03-07 17:04:27 +01:00
mr. M
00654c168f Fix promise handling in ZenViewSplitter to prevent memory leaks 2025-03-07 16:26:30 +01:00
mr. M
8e789732f9 Refactor CSS for vertical tabs and URL bar to improve layout and responsiveness 2025-03-07 16:25:36 +01:00
mr. M
b69e8aebab Refactor transition properties for improved readability in zen-glance.css 2025-03-07 15:30:13 +01:00
mr. M
d8265d4513 Remove zombie lock file in Windows release build workflow 2025-03-07 15:29:59 +01:00
mr. M
1b0c3a5d9a Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-03-07 15:29:30 +01:00
mr. M
124d5e0cdb Enhance button hover effects with scaling transitions for improved interactivity 2025-03-07 15:29:26 +01:00
mr. m
3b86f317d1 Fixed animating split views in 2025-03-07 14:07:49 +01:00
mr. m
39fdda8958 Added support to unsplit tabs when dragging them to the sidebar 2025-03-07 13:59:23 +01:00
mr. m
0575373167 Fixed dragging split views tabs outisde of the container 2025-03-07 13:37:28 +01:00
mr. m
9466f6ee86 Fixed dragging multiple tabs with split view groups 2025-03-07 13:33:18 +01:00
mr. m
ad491edee3 Make sure to show split views group as selected when multiselecting 2025-03-07 13:27:51 +01:00
mr. m
4557d87ed9 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-03-07 13:26:21 +01:00
mr. m
ea245cd213 Common fixes before releasing 2025-03-07 13:26:11 +01:00
mr. M
f9f126a842 Update tab selected text color to use !important for better visibility 2025-03-07 12:12:32 +01:00
mr. m
65433172f3 Added a corner radius to tab icons 2025-03-07 11:59:00 +01:00
mr. m
3325dc0d9f Fixed session restore identifying the empty tab as a normal one 2025-03-07 11:54:57 +01:00
mr. m
00533fb956 Merge pull request #6130 from Samueru-sama/patch-2
fix crash on sleep by switching appimage runtime
2025-03-07 11:02:05 +01:00
Samuel
0d499b3c25 fix crash on sleep by switching appimage runtime
This also has the benefit of faster launch times

Signed-off-by: Samuel <36420837+Samueru-sama@users.noreply.github.com>
2025-03-06 22:33:54 -04:00
mr. m
eda9b1f20b The split view dragging should always show the cursor pointer 2025-03-06 22:40:00 +01:00
mr. M
b9eb13f033 Fix sidebar width calculations and improve compact mode styling; ensure accurate width properties are set and remove unnecessary transformations. 2025-03-06 20:39:34 +01:00
mr. M
391cb84117 Fix tab position calculation to ensure new tabs are inserted correctly after the current tab 2025-03-06 16:10:25 +01:00
mr. M
8ed5b50c3d Fix tab label handling and improve pinned tab state management; ensure static labels are correctly set and cached. 2025-03-06 16:06:15 +01:00
mr. M
b93faff771 Fix CSS width calculation for expanded sidebar and correct typo in opacity removal; ensure proper tab icon updates on pinning. 2025-03-06 15:25:06 +01:00
mr. M
671a76bf86 Refactor workspace settings and improve tab management; remove individual pinned tabs preference, update bootstrap command, and enhance tab removal logic for non-existent workspaces. 2025-03-06 14:58:35 +01:00
mr. M
d698c51ce0 Fix tab container assignment to retain existing vertical pinned tabs 2025-03-06 13:36:43 +01:00
mr. M
ddb0a65957 Refactor Zen components: update CSS variable for toolbar button fill, improve tab unloading logic, and enhance tab icon URLs 2025-03-06 12:55:34 +01:00
mr. M
10b6551ea3 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-03-06 12:50:45 +01:00
mr. M
713ceab89f Enhance styling and functionality in Zen components; adjust URL bar border radius, update tab unloading logic, and refine element separation settings 2025-03-06 12:50:42 +01:00
mr. m
ba864200ee Merge pull request #6116 from dillontkh/fix-#4874
Fix compact mode top toolbar hiding prematurely
2025-03-06 12:38:26 +01:00
dillontkh
98084457ff Fix compact mode top toolbar hiding prematurely 2025-03-06 19:22:13 +08:00
mr. m
ba1411b9cd Merge pull request #6104 from imcvampire/patch-1
Update README.md: fix small typo on version format
2025-03-06 07:33:53 +01:00
Quoc-Anh Nguyen
ff4fe92c9f Update README.md: fix small typo on version format
Signed-off-by: Quoc-Anh Nguyen <9426721+imcvampire@users.noreply.github.com>
2025-03-06 03:10:51 +02:00
mr. M
8d3b9098c0 Adjust URL bar container height for breakout state and remove redundant width/height calculations in URL bar styles 2025-03-05 21:32:47 +01:00
mr. M
43da147d44 Fix event coordinate check in ZenViewSplitter; use screenX and screenY instead of clickX and clientY 2025-03-05 20:17:49 +01:00
mr. M
148c9661c2 Refactor tab movement logic in ZenViewSplitter; ensure empty tab is last and adjust fake browser removal behavior 2025-03-05 20:08:35 +01:00
mr. M
f0e2a68abf Refactor tab handling logic in ZenViewSplitter; ensure empty tab is last and remove fake browser when moving tabs 2025-03-05 20:06:53 +01:00
mr. m
d16a263480 Merge pull request #6086 from Samueru-sama/patch-1
fix appimage not being able to set itself as default web browser
2025-03-05 20:04:02 +01:00
mr. m
d50f6001d8 Merge pull request #6082 from Slowlife01/dragover
Feat: add drag event support for compact mode
2025-03-05 20:03:56 +01:00
mr. m
bb5b0895a8 Merge pull request #6072 from Slowlife01/externalurl
Fix: External link not opening in default container
2025-03-05 20:03:43 +01:00
mr. M
162e6abcc1 Enhance tab icon handling and improve event detection in ZenViewSplitter; update version numbers in surfer.json 2025-03-05 20:02:10 +01:00
Samuel
ce2e492632 fix appimage not being able to set itself as default web browser
Signed-off-by: Samuel <36420837+Samueru-sama@users.noreply.github.com>
2025-03-05 11:33:28 -04:00
Slowlife01
03f6e61935 Feat: add drag event support for compact mode 2025-03-05 21:34:16 +07:00
mr. m
996f042961 Increased border radius for compact mode 2025-03-05 15:08:10 +01:00
mr. m
55275b23aa Small adjustments to compact mode and the URL bar background 2025-03-05 13:05:39 +01:00
mr. m
188a6ea801 Small fixes to the URL bar 2025-03-05 12:51:44 +01:00
mr. m
ab127daa35 Small fixes to the welcome page 2025-03-05 12:34:42 +01:00
mr. m
c61112bc6d Fixed common issues with split views not being properly registered 2025-03-05 12:14:03 +01:00
Slowlife01
9b07fd528b Fix: External link not opening in default container 2025-03-05 15:25:28 +07:00
mr. m
1ba809825d Fixed fully opening glance appearing on random places if container specific essentials are on
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-03-04 21:00:17 +01:00
mr. m
09119f9d18 Merge pull request #6021 from Nosferatu31/martial-arts-emoji
Feature: add martial arts uniform emoji
2025-03-04 20:51:19 +01:00
mr. M
c78cafe605 Refactor CSS styles for zen components and update tab icon handling in ZenPinnedTabManager 2025-03-04 20:46:57 +01:00
mr. M
1c49cffc66 Update vertical-tabs.css to set a fixed minimum width for tab columns 2025-03-04 20:26:46 +01:00
mr. M
452c19a7ea Refactor ZenViewSplitter to improve drag-and-drop functionality and enhance split view behavior 2025-03-04 20:23:21 +01:00
mr. M
cc8a5cf367 Update Firefox version to 136.0 in README and surfer.json; modify ToolbarContextMenu context menu items 2025-03-04 19:20:12 +01:00
mr. m
5bbd881f01 Fixed common issues with split views and glance 2025-03-04 15:21:00 +01:00
Gabriel Fernandes
1c2ddea3d4 fix: remove extra words from martial arts uniform emoji 2025-03-04 10:05:56 +00:00
mr. M
096a28002f Refactor compact mode styles and improve tab positioning for better layout consistency 2025-03-04 00:22:40 +01:00
mr. M
23a60e79c1 Update split view tab styles for collapsed mode 2025-03-03 23:52:09 +01:00
mr. M
473698c744 Refactor split view styles and update theme variables for improved UI consistency 2025-03-03 23:36:34 +01:00
Gabriel Fernandes
b955be65f4 Feature: add martial arts uniform emoji 2025-03-03 12:24:39 +00:00
mr. m
98668d5380 Did more common fixes with the new split views implementation 2025-03-03 10:56:10 +01:00
mr. m
e057e952b6 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-03-03 08:47:14 +01:00
mr. m
e04cb679f9 Fixed registring the empty tab as last selected on split views 2025-03-03 08:47:10 +01:00
mr. m
fd1f2fa0c4 Merge pull request #5999 from noaione/jxl-frame-counts
Report JXL frame counts properly
2025-03-03 07:54:27 +01:00
mr. m
f1f80f3d57 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-03-03 01:18:07 +01:00
mr. m
7440f12117 Made so split view can be rearranged without ctrl button event 2025-03-03 01:18:03 +01:00
mr. M
2f8847b8fe Add initial padding for animation in compact mode styles 2025-03-03 01:17:47 +01:00
mr. M
8aaccf06b2 Enhance tab selection handling and improve drag-and-drop functionality in ZenViewSplitter 2025-03-03 00:11:31 +01:00
noaione
b83ec80e7c Ensure we check if we have animation or not first 2025-03-03 03:48:18 +07:00
mr. M
7ca57da6fe Refactor tab addition logic and streamline tab filtering in Zen components 2025-03-02 21:36:53 +01:00
mr. M
0cb7b0af95 Refactor tab management and drag-and-drop functionality; improve animation durations and conditions for splitting tabs. 2025-03-02 21:36:31 +01:00
mr. m
7646c43f45 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-03-02 18:21:23 +01:00
mr. m
7cb1ae6d3c Fixed compact mode sidebar animating on an empty state and not animating properly 2025-03-02 18:21:18 +01:00
noaione
9454ab9d6c Report JXL frame counts properly
Ref:
- https://phabricator.services.mozilla.com/D212831
- https://github.com/zen-browser/desktop/pull/5634#issuecomment-2692802618
2025-03-03 00:03:29 +07:00
mr. M
780b514cc0 Refine animation for browser wrapper opacity and adjust easing for smoother transitions 2025-03-02 17:11:18 +01:00
mr. M
7b124f1dc2 Add preference to hide one-off search buttons and adjust CSS positioning 2025-03-02 17:03:58 +01:00
mr. m
a500407dc3 Merge pull request #5988 from Slowlife01/hideemptytab
Hide empty tab from add-ons
2025-03-02 16:47:56 +01:00
mr. M
d415bde66c Implement drag-and-drop functionality for split view and refine CSS styles for better layout and visibility 2025-03-02 16:45:57 +01:00
Slowlife
314bdf61ef Merge branch 'zen-browser:dev' into hideemptytab 2025-03-02 21:35:56 +07:00
Slowlife01
43c98b7ddd hide empty tab from add-ons 2025-03-02 21:30:52 +07:00
mr. m
e065ccb7b7 Merge pull request #5467 from mokazemi/fix/panel-pin-icon
keep the "pinned" attribute of the side web panel and the button in sync
2025-03-02 15:07:42 +01:00
mr. M
eea9e060c8 Add patches for Cargo.lock and Cargo.toml to include mime_guess and update dependencies 2025-03-02 14:02:52 +01:00
mr. M
3377885587 Remove unused Cargo.lock and Cargo.toml patches; update PlacesUIUtils.sys.mjs for improved bookmark workspace handling 2025-03-02 12:56:59 +01:00
mr. m
39f4f4f0ea Merge pull request #5634 from noaione/complete-jxl-support
Implement a more complete JXL features
2025-03-02 12:53:44 +01:00
mr. m
85c54eda7d Merge pull request #5976 from Slowlife01/dev
Fix: bookmark items not opening
2025-03-02 12:51:55 +01:00
Slowlife01
fc6d9ba67a Fix: bookmark items not opening 2025-03-02 18:10:02 +07:00
mr. m
ff25a5b432 Fixed reordering tabs not being correctly saved 2025-03-02 11:30:10 +01:00
mr. M
fd8a56762d Refactor pinned tab management and improve initialization logic 2025-03-02 10:41:14 +01:00
mr. M
7e4c3c0df0 Enable JavaScript and properties minification in build configuration 2025-03-02 10:27:58 +01:00
mr. M
fae2187394 Enhance split view tab management and styling adjustments 2025-03-01 23:01:29 +01:00
mr. M
86390bde02 Enhance split view functionality and styling improvements 2025-03-01 19:19:22 +01:00
mr. M
595aa9b062 Improved stylings for split view goups 2025-03-01 14:23:41 +01:00
mr. m
3eed6de797 Formatted the project 2025-03-01 13:26:39 +01:00
mr. m
8655aa8c37 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-03-01 13:18:34 +01:00
mr. m
47c64661ec Fixed split view groups being unpinned / pinned 2025-03-01 13:18:30 +01:00
mr-cheff
aa4646692e Update monthly issue metrics 2025-03-01 02:36:53 +00:00
mr. m
67ee00c3f8 Merge pull request #5914 from zwamdurkel/dev
Allow having full url without https in sidebar
2025-03-01 00:06:36 +01:00
mr. m
52e18e5125 Formatted the project 2025-02-28 22:58:06 +01:00
mr. m
30a7bd49a9 Fixed creating essentials being in the wrong order and fixed watermark not waiting enough time 2025-02-28 22:57:41 +01:00
Aloys Riswick
654d35bc89 Allow having full url without https in sidebar 2025-02-28 22:57:38 +01:00
mr. m
1ae11fef58 Worked a bit more on split view groups 2025-02-28 21:20:11 +01:00
mr. m
6023462bbd Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-02-28 20:10:38 +01:00
mr. m
163cc6b6bd Merge pull request #5898 from fkobi/patch-1
README: specify license version
2025-02-28 16:02:58 +01:00
fkobi
891e9bacaa README: specify license version
Signed-off-by: fkobi <fkobi@pm.me>
2025-02-28 14:41:02 +00:00
mr. m
c8796d9a54 Fixed mute button being missaligned 2025-02-28 10:48:42 +01:00
mr. m
0c918caed2 Small fixed for new split view groups 2025-02-28 08:37:08 +01:00
noaione
46f6d28fca Remove pdf.mjs patch 2025-02-28 07:15:06 +07:00
mr. m
7d4641c5ec Fixed changing tabs while having glance open 2025-02-28 00:30:02 +01:00
mr. m
fc1ec9123d Fixed preference when listening for vibrancy changes on macos 2025-02-27 23:26:48 +01:00
mr. m
220415f698 Fixed vibrancy not updating on macos when changing the pref 2025-02-27 22:26:45 +01:00
mr. m
82389925bc Fixed vibrancy manager for macos preference, not being at startup anymore 2025-02-27 21:31:47 +01:00
mr. m
7714ef83aa Bumped rust version to 1.81 for windows builds 2025-02-27 21:30:46 +01:00
mr. m
09ce9f3107 Transparency types on macos now update when the preference change 2025-02-27 21:29:00 +01:00
mr. m
a409016f7a Added different transparency modes for macos and stopped initializing workspaces on closed windows 2025-02-27 19:06:50 +01:00
mr. m
7585514868 Started to add support for dragging folders and split view groups 2025-02-27 13:31:51 +01:00
mr. m
99ab59f3a3 Added better rendering for gradients 2025-02-27 12:50:27 +01:00
mr. m
7d20a9ed84 Formatted folders 2025-02-27 12:05:58 +01:00
mr. M
3878dcd27f Enhance tab grouping logic to correctly handle pinned tabs and improve insertion behavior 2025-02-27 00:30:50 +01:00
mr. M
9fb2e9d30d Update split view logic to check for 'zen-essential' attribute instead of pinned tabs 2025-02-27 00:30:12 +01:00
mr. M
d6a1889e9f Refactor tab movement logic to ensure selected tabs move together during drag-and-drop operations 2025-02-27 00:20:13 +01:00
noaione
34b0c8e774 Recognizes .jxl as a proper image type
Based on:
90702891fe/f/0002-Bug-1539075-Register-.jxl-extension-in-Firefox.-r-tn.patch
2025-02-27 06:01:37 +07:00
noaione
f11ae35b07 Implement a more complete JXL features
Based on this following phabricator patch/commits:
- https://phabricator.services.mozilla.com/D119700
- https://phabricator.services.mozilla.com/D122158
- https://phabricator.services.mozilla.com/D122159

Which add the following:
- Proper color profiles support for JPEG XL
- Animated JPEG XL
- Progressive decoding

Co-authored-by: wwwwwwww <wvvwvvvvwvvw@gmail.com>
2025-02-27 06:01:34 +07:00
mr. M
18d62429bf Started working on folders implementation and better split view integration 2025-02-26 23:51:38 +01:00
mr. M
65d56afc02 Center glance tab opening position in the browser 2025-02-26 22:06:36 +01:00
mr. M
71dde4d0dd Fixed opening bookmarks on empty tab pages (closes https://github.com/zen-browser/desktop/issues/5818) 2025-02-26 21:59:34 +01:00
mr. M
576632fbbf Adjustments while updating to firefox 136.0 2025-02-26 21:00:21 +01:00
mr. M
f7995f6da7 Update to firefox 136.0 2025-02-26 20:14:31 +01:00
mr. m
6115bbabc8 Applied common fixes 2025-02-26 13:27:58 +01:00
mr. m
dc1c166ac2 Make sure to hide the URL bar when hiding it on multiple toolbar compact mode 2025-02-25 22:01:08 +01:00
mr. m
279849debe Make sure to properly align the urlbar when it's not floating on compact mode 2025-02-25 21:58:15 +01:00
mr. m
07c5474cf2 Increased margins on reset tab URL 2025-02-25 18:42:31 +01:00
mr. m
bd5fc861df For security reasons, dont trim the URL bar when it's not explicitly https 2025-02-25 18:15:44 +01:00
mr. m
6988060269 Ignore localhost URLs when trimming the URL in collapsed mode 2025-02-25 18:04:23 +01:00
mr. m
cf6ed8c382 Removed flatpak artifacts once build and commits has been done 2025-02-25 17:53:43 +01:00
mr. m
d536f3e93c Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-02-25 17:46:27 +01:00
mr. m
cc2262dbaf Common bug fixes 2025-02-25 17:46:20 +01:00
mr. m
f3fa0eb849 Merge pull request #5730 from ifdskfjsdkfjsd/dev
Native English proofread on README
2025-02-25 16:58:41 +01:00
ifdskfjsdkfjsd
7c9bca1325 Native English proofread
Signed-off-by: ifdskfjsdkfjsd <192259704+ifdskfjsdkfjsd@users.noreply.github.com>
2025-02-25 10:40:23 -05:00
mr. m
493f299cce Enabled compilation with sccache and disable rust incremental builds (formatted from 5d7248d4c7) 2025-02-25 15:24:41 +01:00
mr. m
5d7248d4c7 Enabled compilation with sccache and disable rust incremental builds 2025-02-25 15:23:15 +01:00
mr. m
d9e8fb3469 Disabled sccache temporarilly 2025-02-25 13:39:41 +01:00
mr. m
a5051e116a FIxed opening bookmarks not inheriting 2025-02-25 13:36:22 +01:00
mr. m
3358d0e3d7 Fixed tabs being reordered 2025-02-25 13:04:15 +01:00
mr. m
ca183c7de6 Common fixes and optimizations 2025-02-25 12:30:33 +01:00
mr. m
b39961e43e Fixed reordering tabs when having essentials 2025-02-25 09:07:22 +01:00
Mohammad Kazemi
19bb1a1ce1 add pinned="true" attribute to web panel pin icon, also keep the pinned state of the panel and the button in sync 2025-02-17 15:58:54 +03:30
207 changed files with 3803 additions and 2669 deletions

View File

@@ -384,6 +384,8 @@ jobs:
- name: Execute AppImage build
run: |
set -eux
export ARCH=${{ matrix.arch }}
UPINFO="gh-releases-zsync|$GITHUB_REPOSITORY_OWNER|desktop|latest|zen-$ARCH.AppImage.zsync"
rm AppDir/.DirIcon || true
cp configs/branding/${{ inputs.update_branch }}/logo128.png AppDir/usr/share/icons/hicolor/128x128/apps/zen.png
cp configs/branding/${{ inputs.update_branch }}/logo128.png AppDir/zen.png && ln -s zen.png AppDir/.DirIcon
@@ -396,18 +398,23 @@ jobs:
APPDIR=AppDir
tar -xvf *.tar.* && rm -rf *.tar.*
mv zen/* $APPDIR/
wget https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
wget "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
wget "https://github.com/VHSgunzo/uruntime/releases/latest/download/uruntime-appimage-squashfs-lite-$ARCH"
chmod +x *.AppImage
chmod +x ./uruntime-appimage-squashfs-lite-"$ARCH"
chmod +x ./AppDir/AppRun
# keep the uruntime mountpoint (massively speeds up launch time)
sed -i 's|URUNTIME_MOUNT=[0-9]|URUNTIME_MOUNT=0|' ./uruntime-appimage-squashfs-lite-"$ARCH"
echo "AppDir: $APPDIR"
ls -al
find .
ls -al "$APPDIR"
ARCH=${{ matrix.arch }} ./appimagetool-x86_64.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 10 \
-u "gh-releases-zsync|$GITHUB_REPOSITORY_OWNER|desktop|latest|zen-${{ matrix.arch }}.AppImage.zsync" \
"$APPDIR" zen-${{ matrix.arch }}.AppImage
./appimagetool-x86_64.AppImage -u "$UPINFO" "$APPDIR" zen-"$ARCH".AppImage --runtime-file ./uruntime-appimage-squashfs-lite-"$ARCH"
mkdir dist
mv zen*AppImage* dist/.
unset ARCH
- name: Upload artifact
uses: actions/upload-artifact@v4
@@ -464,10 +471,6 @@ jobs:
submodules: recursive
token: ${{ secrets.DEPLOY_KEY }}
- name: Git pull
run: |
git pull
- name: Download artifact
uses: actions/download-artifact@v4
@@ -693,6 +696,7 @@ jobs:
rm -rf zen-browser
rm -rf archive.tar
rm -rf zen.linux-x86_64.tar.xz
rm -rf zen.linux-aarch64.tar.xz
- name: Upload Flatpak manifest
uses: actions/upload-artifact@v4

View File

@@ -30,6 +30,7 @@ jobs:
SCCACHE_GHA_ENABLED: 'true'
CARGO_TERM_COLOR: always
RUSTC_WRAPPER: 'sccache'
CARGO_INCREMENTAL: 0
name: Build Linux - ${{ matrix.arch }}
steps:
@@ -38,6 +39,10 @@ jobs:
with:
tool-cache: false
# Bug: https://github.com/actions/checkout/issues/1153
- name: Remove zombie lock file
run: rm -f /home/ubuntu/actions-runner/_work/desktop/desktop/.git/modules/l10n/index.lock
- name: Checkout repository
uses: actions/checkout@v4
with:
@@ -50,7 +55,16 @@ jobs:
node-version-file: '.nvmrc'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.7
uses: mozilla-actions/sccache-action@main
with:
disable_annotations: true
- name: Expose actions cache variables
uses: actions/github-script@v6
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env['ACTIONS_CACHE_URL'])
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env['ACTIONS_RUNTIME_TOKEN'])
- name: Setup Git
run: |
@@ -147,7 +161,3 @@ jobs:
retention-days: 5
name: linux_update_manifest_${{ matrix.arch }}
path: ./dist/update
- name: Run sccache stat for check
shell: bash
run: ${SCCACHE_PATH} --show-stats

View File

@@ -29,6 +29,7 @@ jobs:
SCCACHE_GHA_ENABLED: 'true'
CARGO_TERM_COLOR: always
RUSTC_WRAPPER: 'sccache'
CARGO_INCREMENTAL: 0
steps:
- name: Checkout repository
uses: actions/checkout@v4
@@ -42,7 +43,16 @@ jobs:
node-version-file: '.nvmrc'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.7
uses: mozilla-actions/sccache-action@main
with:
disable_annotations: true
- name: Expose actions cache variables
uses: actions/github-script@v6
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env['ACTIONS_CACHE_URL'])
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env['ACTIONS_RUNTIME_TOKEN'])
- name: Setup Python
uses: actions/setup-python@v5
@@ -163,7 +173,3 @@ jobs:
retention-days: 1
name: platform.ini
path: ./platform.ini
- name: Run sccache stat for check
shell: bash
run: ${SCCACHE_PATH} --show-stats

View File

@@ -32,6 +32,7 @@ jobs:
SCCACHE_GHA_ENABLED: 'true'
CARGO_TERM_COLOR: always
RUSTC_WRAPPER: 'sccache'
CARGO_INCREMENTAL: 0
strategy:
fail-fast: false
matrix:
@@ -44,6 +45,10 @@ jobs:
with:
tool-cache: false
# Bug: https://github.com/actions/checkout/issues/1153
- name: Remove zombie lock file
run: rm -f /home/ubuntu/actions-runner/_work/desktop/desktop/.git/modules/l10n/index.lock
- name: Checkout repository
uses: actions/checkout@v4
with:
@@ -56,7 +61,16 @@ jobs:
node-version-file: '.nvmrc'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.7
uses: mozilla-actions/sccache-action@main
with:
disable_annotations: true
- name: Expose actions cache variables
uses: actions/github-script@v6
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env['ACTIONS_CACHE_URL'])
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env['ACTIONS_RUNTIME_TOKEN'])
- name: Setup Git
run: |
@@ -163,7 +177,7 @@ jobs:
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
run: |
cd engine/
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.80
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.81
source $HOME/.cargo/env
if test "${{ matrix.arch }}" = "aarch64"; then
rustup target add aarch64-pc-windows-msvc
@@ -312,7 +326,3 @@ jobs:
retention-days: 5
name: windows_update_manifest_${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
path: ./dist/update
- name: Run sccache stat for check
shell: bash
run: ${SCCACHE_PATH} --show-stats

View File

@@ -9,6 +9,7 @@ DEFAULT_XDG_DATA_DIRS='./share/:/usr/share/gnome:/usr/local/share/:/usr/share/'
export XDG_DATA_DIRS="${HERE}/usr/share/:${XDG_DATA_DIRS:-$DEFAULT_XDG_DATA_DIRS}"
export PERLLIB="${HERE}/usr/share/perl5/:${HERE}/usr/lib/perl5/${PERLLIB:+:$PERLLIB}"
export GSETTINGS_SCHEMA_DIR="${HERE}/usr/share/glib-2.0/schemas/${GSETTINGS_SCHEMA_DIR:+:$GSETTINGS_SCHEMA_DIR}"
export MOZ_APP_LAUNCHER="${APPIMAGE}"
export QT_PLUGIN_PATH="${HERE}/usr/lib/qt4/plugins/:${HERE}/usr/lib/i386-linux-gnu/qt4/plugins/:${HERE}/usr/lib/x86_64-linux-gnu/qt4/plugins/:${HERE}/usr/lib32/qt4/plugins/:${HERE}/usr/lib64/qt4/plugins/:${HERE}/usr/lib/qt5/plugins/:${HERE}/usr/lib/i386-linux-gnu/qt5/plugins/:${HERE}/usr/lib/x86_64-linux-gnu/qt5/plugins/:${HERE}/usr/lib32/qt5/plugins/:${HERE}/usr/lib64/qt5/plugins/${QT_PLUGIN_PATH:+:$QT_PLUGIN_PATH}"
EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2 | cut -d " " -f 1)
exec "${EXEC}" "$@"

View File

@@ -28,9 +28,9 @@
## 🖥️ Compatibility
Zen is currently built using firefox version `135.0.1`! 🚀
Zen is currently built using Firefox version `136.0`! 🚀
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using firefox version `RC 135.0.1`!
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 136.0`!
- 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!
@@ -40,11 +40,11 @@ Zen is an open-source project, and we welcome contributions from the community!
### Issue metrics
We keep track of how many issues are closed at the end of the month in [docs/issue-metrics](./docs/issue-metrics). This is to keep track of how many issues are being closed, because who doesn't like to see progress? 📈
We keep track of how many issues are closed at the end of the month in [docs/issue-metrics](./docs/issue-metrics). We use this to keep track of our issues and see our progress! 📈
### Versioning
Zen uses [Semantic Versioning](https://semver.org/) for versioning. Meaning, versions are displayed as `a.bc.d` where:
Zen uses [Semantic Versioning](https://semver.org/), meaning versions are displayed as `a.b.cd` where:
- `a` is the major version
- `b` is the minor version
@@ -67,7 +67,7 @@ Zen is built with performance in mind, and we have optimized the browser to be a
Zen is available for Linux, macOS, and Windows. You can download the latest version from the official website at [zen-browser.app](https://zen-browser.app/download), or from the [GitHub Releases](https://github.com/zen-browser/desktop/releases) page.
If you dont see your OS listed below, that's because we already have it in our [downloads page](https://zen-browser.app/download)! Make sure to check it out!
If you don't see your OS listed below, that's because we already have it in our [downloads page](https://zen-browser.app/download)! Make sure to check it out!
#### Windows
@@ -117,7 +117,7 @@ Some components used by @zen-browser as an attempt to make firefox forks a bette
#### `Run Locally`
In order to download and run zen locally, please follow [these instructions](https://docs.zen-browser.app/building).
In order to download and run Zen locally, please follow [these instructions](https://docs.zen-browser.app/building).
#### `Special Thanks`
@@ -133,10 +133,10 @@ Zen couldn't be in its current state without the help of these amazing projects!
### 🖥️ Comparison with other browsers
Thanks everyone for making zen stand out among these giants!
Thanks everyone for making Zen stand out among these giants!
[![Star History Chart](https://api.star-history.com/svg?repos=zen-browser/desktop,chromium/chromium,brave/brave-browser&type=Date)](https://star-history.com/#zen-browser/desktop&chromium/chromium&brave/brave-browser&Date)
## 📄 License
Zen browser is under the [MPL LICENSE](./LICENSE). All the code is open-source and free to use! Attributions are appreciated but not required.
Zen browser is under the [MPL 2.0 LICENSE](./LICENSE). All the code is open-source and free to use! Attribution is appreciated but not required.

View File

@@ -34,7 +34,7 @@ fi
if test "$ZEN_RELEASE"; then
ac_add_options --enable-clang-plugin
ac_add_options --enable-bootstrap
ac_add_options --enable-bootstrap=-sccache
ac_add_options --enable-release
ac_add_options --disable-debug

View File

@@ -0,0 +1,817 @@
# Issue Metrics
| Metric | Average | Median | 90th percentile |
| --- | --- | --- | ---: |
| Time to first response | 1 day, 0:35:15 | 3:19:46 | 2 days, 19:34:34 |
| Time to close | 2 days, 6:58:59 | 7:28:52 | 8 days, 5:28:28 |
| Metric | Count |
| --- | ---: |
| Number of items that remain open | 513 |
| Number of items closed | 286 |
| Total number of items created | 799 |
| Title | URL | Time to first response | Time to close |
| --- | --- | --- | --- |
| Ctrl+T doesn't open a new tab | https://github.com/zen-browser/desktop/issues/5918 | 1:34:03 | None |
| Browser Wiping All Saved Tabs | https://github.com/zen-browser/desktop/issues/5917 | None | None |
| Zen Browser freaks out when entering `´` `˙` `˛` | https://github.com/zen-browser/desktop/issues/5915 | 0:47:22 | 0:47:22 |
| Ctrl +H opens History Sidebar but not working properly | https://github.com/zen-browser/desktop/issues/5912 | 3:27:54 | None |
| When opening the new tab bar and pressing CTRL to autofill ".com" it just duplicates current tab | https://github.com/zen-browser/desktop/issues/5910 | None | None |
| I am trying to open a new tab and this is happening | https://github.com/zen-browser/desktop/issues/5908 | 4:40:40 | 4:40:40 |
| Extension buttons don't load | https://github.com/zen-browser/desktop/issues/5906 | None | None |
| Closing tabs can result in app freeze | https://github.com/zen-browser/desktop/issues/5905 | None | None |
| First tab is sent to end of tabs list after reopening browser | https://github.com/zen-browser/desktop/issues/5904 | None | None |
| Unable to reorder tabs in private browsing | https://github.com/zen-browser/desktop/issues/5902 | None | None |
| split view resize trigger not work when AI Chatbot panel is open next to the split view | https://github.com/zen-browser/desktop/issues/5900 | None | None |
| Couldn't load homepage | https://github.com/zen-browser/desktop/issues/5899 | None | 5:31:41 |
| URL bar being cutoff | https://github.com/zen-browser/desktop/issues/5896 | 1:12:20 | None |
| TrimURL and TrimHttps effects should be independent | https://github.com/zen-browser/desktop/issues/5895 | None | None |
| Mouse back button switches to previous workspace | https://github.com/zen-browser/desktop/issues/5894 | 1:59:57 | None |
| Mystery new tab after launching the browser | https://github.com/zen-browser/desktop/issues/5893 | None | None |
| Invisible Tab when opening Zen | https://github.com/zen-browser/desktop/issues/5892 | 1:36:17 | 11:34:31 |
| Popups related to extension installation render beyond the window's borders | https://github.com/zen-browser/desktop/issues/5891 | None | None |
| Tabs wiped on opening new window | https://github.com/zen-browser/desktop/issues/5890 | None | None |
| [Twilight] Split view group issues | https://github.com/zen-browser/desktop/issues/5889 | None | None |
| Mods | https://github.com/zen-browser/desktop/issues/5888 | None | None |
| Unable to access url when site is on http | https://github.com/zen-browser/desktop/issues/5887 | None | None |
| Renamed pinned tab changes title upon loading, when unloading title changes back to previously set name | https://github.com/zen-browser/desktop/issues/5886 | None | None |
| Have had to delete the .zen folder after update | https://github.com/zen-browser/desktop/issues/5885 | None | None |
| After each Zen restart, the top page moves to the bottom of the sidebar | https://github.com/zen-browser/desktop/issues/5883 | 6:31:36 | None |
| "Switch to Tab" option (in URL bar) does not work | https://github.com/zen-browser/desktop/issues/5881 | None | None |
| Searchbar isnt center and a bit hidden on widescreen | https://github.com/zen-browser/desktop/issues/5880 | None | None |
| Workspace Not Working on Restarting Browser | https://github.com/zen-browser/desktop/issues/5878 | None | 0:13:31 |
| Bookmarks don't open anymore after latest update | https://github.com/zen-browser/desktop/issues/5877 | 0:15:28 | None |
| URL bar ignores spacings | https://github.com/zen-browser/desktop/issues/5873 | None | None |
| Search bar visual bug when exiting youtube fullscreen player | https://github.com/zen-browser/desktop/issues/5872 | 0:06:09 | 0:19:32 |
| Right click menu disappears when releasing mouseclick | https://github.com/zen-browser/desktop/issues/5871 | None | None |
| Tabs move to bottom on start up | https://github.com/zen-browser/desktop/issues/5869 | 0:17:08 | None |
| Consistent font sizes in sidebar UI | https://github.com/zen-browser/desktop/issues/5868 | None | None |
| [BUG] When Closing all Tabs instead of opening a New Home Tab just no Tabs are Open | https://github.com/zen-browser/desktop/issues/5867 | None | None |
| Startup Page Not Displaying Properly in Zen Browser (Latest Build, Windows 11 | https://github.com/zen-browser/desktop/issues/5866 | 0:52:35 | 21:19:37 |
| 'Set Default Container' still shown when containers disabled | https://github.com/zen-browser/desktop/issues/5865 | None | None |
| Itch.io incorrectly rendering screenshots and embeds | https://github.com/zen-browser/desktop/issues/5864 | None | None |
| Wallpaper dissappear from the homepage | https://github.com/zen-browser/desktop/issues/5863 | None | None |
| Crash when using GPU rendering | https://github.com/zen-browser/desktop/issues/5862 | None | None |
| Sidebar extend on hover being wonky | https://github.com/zen-browser/desktop/issues/5861 | 7:15:46 | None |
| Addons section right of the url bar keeps dissapearing | https://github.com/zen-browser/desktop/issues/5858 | 0:22:45 | None |
| Potential credential-stealing behavior detected in zen.exe (T1555.003)" | https://github.com/zen-browser/desktop/issues/5857 | None | None |
| New tabs not opening when switching between containers/profiles. | https://github.com/zen-browser/desktop/issues/5856 | None | None |
| Closing all tabs opens a normal tab in private window | https://github.com/zen-browser/desktop/issues/5855 | None | None |
| Functional Anomalies in Bookmark Management Page | https://github.com/zen-browser/desktop/issues/5854 | None | None |
| Reordering tabs to top or bottom is still funky | https://github.com/zen-browser/desktop/issues/5851 | None | None |
| Passkeys not displaying (macos) | https://github.com/zen-browser/desktop/issues/5850 | 7:12:16 | None |
| Can't Switch Profile | https://github.com/zen-browser/desktop/issues/5849 | 0:28:47 | None |
| . | https://github.com/zen-browser/desktop/issues/5848 | None | 0:09:55 |
| When I click on the Zen Url bar, the URL bar comes out of the Zen screen zen 1.8.2b | https://github.com/zen-browser/desktop/issues/5847 | 2:52:35 | None |
| URL Search | https://github.com/zen-browser/desktop/issues/5846 | 2:58:34 | None |
| Sidebar Popup Glitches | https://github.com/zen-browser/desktop/issues/5845 | 2:04:30 | None |
| [Regression 1.8b+] Multiple tab issues regarding extensions | https://github.com/zen-browser/desktop/issues/5844 | 2:05:36 | None |
| Boomarks without any function | https://github.com/zen-browser/desktop/issues/5841 | None | None |
| Zen using 99% GPU | https://github.com/zen-browser/desktop/issues/5840 | None | None |
| Sites pinned to other containers will not open in (some) other containers from new tab menu | https://github.com/zen-browser/desktop/issues/5838 | None | None |
| Zen Browser bugged after PC got force power off during sleep mode | https://github.com/zen-browser/desktop/issues/5837 | 10:42:47 | None |
| Sidebar not appearing in Compact Mode | https://github.com/zen-browser/desktop/issues/5836 | None | None |
| Something new about your translation | https://github.com/zen-browser/desktop/issues/5835 | 0:12:15 | 0:12:15 |
| In a new tab, the search bar appears on the left side of the screen and across the screen. | https://github.com/zen-browser/desktop/issues/5834 | 0:18:45 | 1 day, 6:00:02 |
| If i try to login in the outlook in the browser the browser freezes | https://github.com/zen-browser/desktop/issues/5833 | None | None |
| Plugins not working properly | https://github.com/zen-browser/desktop/issues/5832 | None | None |
| The Tree Style Tab extension does not refresh the tab list when switching workspaces | https://github.com/zen-browser/desktop/issues/5831 | None | None |
| Tab don't show when opened through bookmark | https://github.com/zen-browser/desktop/issues/5830 | 1:23:17 | None |
| macOS window share icon does not cover buttons sometimes | https://github.com/zen-browser/desktop/issues/5829 | 1 day, 8:01:43 | None |
| Tabs do not move as they should | https://github.com/zen-browser/desktop/issues/5828 | 1 day, 9:24:57 | None |
| zen.view.compact.show-sidebar-and-toolbar-on-hover | https://github.com/zen-browser/desktop/issues/5827 | None | None |
| Zen forgets some pinned tabs and loads a blank tab instead on launch | https://github.com/zen-browser/desktop/issues/5826 | 3:14:43 | None |
| sidebar glitches when holding pointer to left | https://github.com/zen-browser/desktop/issues/5825 | None | 0:00:58 |
| mica not available | https://github.com/zen-browser/desktop/issues/5824 | 0:51:20 | None |
| Middle clicking some links opens them as glance instead of in a new tab | https://github.com/zen-browser/desktop/issues/5823 | None | None |
| WebPanel cant turn off floating mode | https://github.com/zen-browser/desktop/issues/5821 | None | 0:02:54 |
| Tabs show icon only in horizontal line, goes off-screen | https://github.com/zen-browser/desktop/issues/5820 | 1:28:43 | 0:41:00 |
| New blank page thing is buggy with bookmarks | https://github.com/zen-browser/desktop/issues/5818 | None | 2:46:46 |
| Upon zen browser update 2/23/25 18.b ALL workspaces lost, each workspace I now create has same bookmarks | https://github.com/zen-browser/desktop/issues/5817 | 9:16:52 | None |
| When clicking a link in the Pinned Tab Glance tab that is set to open in a different container, pinned tab is then blurry | https://github.com/zen-browser/desktop/issues/5816 | None | None |
| New URL bar when opening new tab not working correctly on 32:9 monitor | https://github.com/zen-browser/desktop/issues/5813 | 2 days, 5:30:15 | None |
| New tabs are not getting preserved in the same Workspace | https://github.com/zen-browser/desktop/issues/5812 | None | None |
| Window resize management | https://github.com/zen-browser/desktop/issues/5811 | None | None |
| Changing workspace name or icon resets workspaces set in bookmarks | https://github.com/zen-browser/desktop/issues/5810 | None | None |
| v1.8.2b not displaying home screen | https://github.com/zen-browser/desktop/issues/5809 | 2:28:44 | None |
| Zen 1.7.x and 1.8.x regression | https://github.com/zen-browser/desktop/issues/5808 | 7:44:24 | None |
| Whatsapp Contacts | https://github.com/zen-browser/desktop/issues/5807 | None | None |
| weired tabs bug | https://github.com/zen-browser/desktop/issues/5806 | None | None |
| Zen Profiles replaced with setting button in 1.8.2b | https://github.com/zen-browser/desktop/issues/5805 | 0:14:38 | 11:40:50 |
| Not updating on browser restart | https://github.com/zen-browser/desktop/issues/5804 | None | None |
| Default container not set when opening a website from outside of Zen (Linux) | https://github.com/zen-browser/desktop/issues/5803 | None | None |
| Cannot open sites from history panel | https://github.com/zen-browser/desktop/issues/5802 | 0:27:54 | None |
| Download / library shortcut | https://github.com/zen-browser/desktop/issues/5801 | None | 0:06:56 |
| Sidebar button is gone | https://github.com/zen-browser/desktop/issues/5800 | 1:35:18 | None |
| Opening a link from another tab doesn't use containers correctly | https://github.com/zen-browser/desktop/issues/5799 | None | None |
| Tab groups not working | https://github.com/zen-browser/desktop/issues/5798 | 11:37:32 | None |
| Cannot drag pinned tabs | https://github.com/zen-browser/desktop/issues/5797 | 3:39:24 | None |
| Cannot open bookmark from panel opened using Ctrl+B | https://github.com/zen-browser/desktop/issues/5796 | None | None |
| Returning from picture in picture to essential tab does not return to original workspace | https://github.com/zen-browser/desktop/issues/5795 | None | None |
| Closing glance tab does not return to parent tab | https://github.com/zen-browser/desktop/issues/5794 | None | None |
| I can't put the acrylic background on | https://github.com/zen-browser/desktop/issues/5793 | 0:43:58 | None |
| Passbolt Password Manager doesn't work properly | https://github.com/zen-browser/desktop/issues/5792 | None | None |
| No Profiles switcher - after upgrade | https://github.com/zen-browser/desktop/issues/5790 | 0:30:26 | None |
| Performance issues | https://github.com/zen-browser/desktop/issues/5789 | None | None |
| Cannot drag tabs in private mode | https://github.com/zen-browser/desktop/issues/5788 | 0:41:47 | None |
| Can not using open.spotify.com | https://github.com/zen-browser/desktop/issues/5785 | 2:35:46 | 5:36:49 |
| "Back to the tab" button in "picture in picture" mode doesn't work | https://github.com/zen-browser/desktop/issues/5784 | None | None |
| Floating URL bar appears in the unintended place | https://github.com/zen-browser/desktop/issues/5783 | 0:23:20 | 0:26:43 |
| Pinned tabs are not visible | https://github.com/zen-browser/desktop/issues/5782 | 0:16:04 | None |
| Poor handling of light colored favicons in light mode (icons) | https://github.com/zen-browser/desktop/issues/5781 | 0:44:44 | None |
| Profile icon disappeared | https://github.com/zen-browser/desktop/issues/5780 | 0:06:14 | 0:07:25 |
| Homepage, new windows and new tabs with blank screen | https://github.com/zen-browser/desktop/issues/5779 | 1:06:32 | None |
| Updater deleted zen.exe | https://github.com/zen-browser/desktop/issues/5778 | None | None |
| 1.8b new Color Picker seems to clear custom colors after switching workspaces | https://github.com/zen-browser/desktop/issues/5777 | 2 days, 4:20:36 | None |
| Essentials Tabs Vanish from UI | https://github.com/zen-browser/desktop/issues/5776 | 1:21:51 | None |
| Deleting workspaces make temporary unavailable creating new workspaces and appear these workspaces' tabs when opening Zen again | https://github.com/zen-browser/desktop/issues/5773 | 4:54:49 | None |
| Unable to apply themeing in Private mode | https://github.com/zen-browser/desktop/issues/5772 | None | None |
| CTRL+T displays search bar out of window | https://github.com/zen-browser/desktop/issues/5770 | 0:14:04 | 3:42:49 |
| "Hidden" tab when opening from a bookmark | https://github.com/zen-browser/desktop/issues/5769 | 2 days, 2:11:30 | None |
| No pinned extensions after restart browser and more tools button stuck | https://github.com/zen-browser/desktop/issues/5768 | None | None |
| Pinned tabs missing | https://github.com/zen-browser/desktop/issues/5767 | 0:52:30 | None |
| Browser flickers when using mission control | https://github.com/zen-browser/desktop/issues/5766 | None | None |
| Disabling "Shortcuts" from Address Bar Settings breaks "Always" Floating url bar. It reverts to "Floating only when typing". | https://github.com/zen-browser/desktop/issues/5765 | None | None |
| New tab intermittently opening sidebar in compact mode | https://github.com/zen-browser/desktop/issues/5763 | None | None |
| Cannot see cursor or highlight when typing in new tab (or Ctrl+T) | https://github.com/zen-browser/desktop/issues/5762 | 0:23:44 | None |
| Can't drag tabs from below to first | https://github.com/zen-browser/desktop/issues/5761 | 0:06:55 | None |
| AppImage fails to run | https://github.com/zen-browser/desktop/issues/5760 | 3:48:52 | None |
| Visual glitch exiting fullscreen in compact mode | https://github.com/zen-browser/desktop/issues/5759 | 2:07:30 | None |
| Container pinned and essential error | https://github.com/zen-browser/desktop/issues/5757 | None | None |
| Error when dragging tabs | https://github.com/zen-browser/desktop/issues/5756 | 3:39:59 | 11:14:10 |
| URL bar does not hide completely in compact mode | https://github.com/zen-browser/desktop/issues/5755 | 7:02:14 | 7:02:14 |
| Dragging pinned tabs to reoder them puts them in a random place | https://github.com/zen-browser/desktop/issues/5754 | 3:09:24 | None |
| Zen occasionally modifying webpage background styles | https://github.com/zen-browser/desktop/issues/5753 | None | 0:16:11 |
| Scrolling Freeze on touchpad when dragging and dropping (i3wm) | https://github.com/zen-browser/desktop/issues/5752 | None | None |
| In light mode, every popup is black with black text. | https://github.com/zen-browser/desktop/issues/5751 | 11:21:24 | None |
| Workspace tabs disappear | https://github.com/zen-browser/desktop/issues/5750 | None | 0:15:37 |
| Dark Theme Styles option in Look and Feel missing | https://github.com/zen-browser/desktop/issues/5749 | 0:15:47 | 0:15:47 |
| Tabs not apearing on the sidebar when opening a new window. | https://github.com/zen-browser/desktop/issues/5748 | None | None |
| Tabs can't be reordered by dragging upwards in the sidebar | https://github.com/zen-browser/desktop/issues/5747 | None | 0:03:03 |
| Floating Urlbar issue misposition | https://github.com/zen-browser/desktop/issues/5745 | 0:49:27 | 3:14:37 |
| Huge tabs on compact SideBar | https://github.com/zen-browser/desktop/issues/5744 | None | None |
| Tab disappearing in Sidebar in the new version | https://github.com/zen-browser/desktop/issues/5742 | 23:32:10 | None |
| Zen Update to 1.8b created a new profile | https://github.com/zen-browser/desktop/issues/5741 | 0:13:22 | None |
| Web panel does not obey default zoom | https://github.com/zen-browser/desktop/issues/5739 | None | None |
| theme colors are confusing or bugged | https://github.com/zen-browser/desktop/issues/5738 | 3:31:55 | 12:10:14 |
| Closing a pinned tab causes zen to not open tabs and many other features stop working | https://github.com/zen-browser/desktop/issues/5737 | 5:14:48 | 15:50:20 |
| Homarr tiles no longer open in a new tab when pinned/added to Essentials; instead, they open in Glance mode | https://github.com/zen-browser/desktop/issues/5736 | None | None |
| Opening settings opens the wrong tab | https://github.com/zen-browser/desktop/issues/5735 | None | 0:35:12 |
| Webpage scrolling leads to 100% GPU + freezes compared to Firefox | https://github.com/zen-browser/desktop/issues/5734 | None | None |
| Essential tabs prevent first few tabs from moving up | https://github.com/zen-browser/desktop/issues/5733 | None | None |
| Mac OS Browser thinks there's one more tab open than there actually is | https://github.com/zen-browser/desktop/issues/5732 | 17:00:45 | None |
| Adjusting to system-wide dark mode does not work properly on macOS | https://github.com/zen-browser/desktop/issues/5729 | None | None |
| Twitch "follow" button and "grab points" button doesn't work | https://github.com/zen-browser/desktop/issues/5728 | None | None |
| Gradient tool "forgets" custom colors | https://github.com/zen-browser/desktop/issues/5727 | None | 16:09:01 |
| Color Picker - no visualization for custom colors | https://github.com/zen-browser/desktop/issues/5726 | 4:12:49 | 0:23:49 |
| newtab urlbar bugged and unusable (not fully displayed) | https://github.com/zen-browser/desktop/issues/5725 | 2:10:54 | 4:01:15 |
| Can't resize vertical tab bar on right-side mode (single toolbar) | https://github.com/zen-browser/desktop/issues/5723 | 0:10:54 | None |
| Media autoplay built-in feature not working properly | https://github.com/zen-browser/desktop/issues/5722 | 4:12:27 | None |
| GPU fan | https://github.com/zen-browser/desktop/issues/5721 | 0:08:31 | None |
| Reordering tabs not working after update | https://github.com/zen-browser/desktop/issues/5719 | 1:41:05 | None |
| Toolbar item in sidebar | https://github.com/zen-browser/desktop/issues/5718 | None | None |
| bad urlbar size | https://github.com/zen-browser/desktop/issues/5717 | None | None |
| Sudden errors when watching videos on sites like YouTube | https://github.com/zen-browser/desktop/issues/5716 | 12:37:11 | None |
| Right-click context menu Fully white &#124; Not visible / usable | https://github.com/zen-browser/desktop/issues/5715 | 2 days, 8:31:10 | None |
| new tab drop down bugged | https://github.com/zen-browser/desktop/issues/5714 | 10:30:38 | 10:30:38 |
| About Zen browser's own translate | https://github.com/zen-browser/desktop/issues/5713 | None | 2:58:06 |
| Passkey functionality not working on Mac OS Ventura | https://github.com/zen-browser/desktop/issues/5712 | 2:20:57 | 1 day, 9:44:34 |
| Bitwarden extension window sizing | https://github.com/zen-browser/desktop/issues/5710 | None | None |
| No websites rendering | https://github.com/zen-browser/desktop/issues/5709 | None | None |
| Cant pin new tabs in workspaces | https://github.com/zen-browser/desktop/issues/5707 | None | None |
| Pinned tabs disappeared and profiles bugged | https://github.com/zen-browser/desktop/issues/5706 | 1:11:12 | 18:49:21 |
| Dragging a tab to the pinned tabs section pins it as essential. | https://github.com/zen-browser/desktop/issues/5705 | None | 2 days, 7:13:44 |
| Opening a tab from glance IN essential create an essential tab | https://github.com/zen-browser/desktop/issues/5704 | 1 day, 0:59:17 | None |
| Tab order is upside down | https://github.com/zen-browser/desktop/issues/5703 | 0:55:57 | 1:48:20 |
| Clicking on a link opens it using incorrect workspace | https://github.com/zen-browser/desktop/issues/5702 | 3:50:08 | None |
| URL Overflow Issue | https://github.com/zen-browser/desktop/issues/5701 | None | None |
| Toolbar hiding incompatible with top-aligned taskbar | https://github.com/zen-browser/desktop/issues/5700 | None | None |
| Website pathnames not being shown on single toolbar | https://github.com/zen-browser/desktop/issues/5698 | 3:20:52 | 21:46:49 |
| Barely readable light font color on light background in system theme on PopOS Light | https://github.com/zen-browser/desktop/issues/5697 | 4:17:37 | None |
| Mods on zen browser no longer work properly | https://github.com/zen-browser/desktop/issues/5695 | 0:13:38 | 2:19:25 |
| Tabs change their positions and wrong active tab from previous session is selected when launching the browser. | https://github.com/zen-browser/desktop/issues/5694 | 3:36:41 | None |
| Topmost pinned tab on every workspace moves to bottom after relaunch | https://github.com/zen-browser/desktop/issues/5693 | 2:43:57 | 1 day, 10:36:48 |
| Removes route when on localhost | https://github.com/zen-browser/desktop/issues/5691 | None | None |
| Glance messes up the tab order | https://github.com/zen-browser/desktop/issues/5690 | None | None |
| Closing tabs and moving the search bar off the screen on the left side | https://github.com/zen-browser/desktop/issues/5689 | 5:14:33 | None |
| Having multiple default tabs loads them in the wrong order. Putting an extension url such as nightTab will clear the entire default tabs text once leaving the settings page. | https://github.com/zen-browser/desktop/issues/5687 | None | None |
| Compact Sidebar animation constantly retriggers (improper offset) | https://github.com/zen-browser/desktop/issues/5685 | 13:15:05 | None |
| Zen trying to open pages from previous session even though option disabled | https://github.com/zen-browser/desktop/issues/5684 | None | None |
| "Side panel" icon opens bookmarks panel instead of custom website set earlier | https://github.com/zen-browser/desktop/issues/5683 | None | None |
| lost memory on another workspace, basically when i runned my browser the workspace that i was all sites was still there, but when a went to the other workspace did not existed any sites | https://github.com/zen-browser/desktop/issues/5682 | 7:15:10 | None |
| Zen Browser Sidebar Continuously Appears on Hover When Switching Windows | https://github.com/zen-browser/desktop/issues/5679 | None | None |
| Excalidraw is extremely laggy when trying to draw on the canvas | https://github.com/zen-browser/desktop/issues/5677 | None | None |
| Opening local html file doesn't allow referencing other files | https://github.com/zen-browser/desktop/issues/5676 | None | None |
| Private browsing now has a delay when opening | https://github.com/zen-browser/desktop/issues/5675 | 5:10:38 | None |
| Zen doesn't minimise when clicking on the icon in the taskbar. | https://github.com/zen-browser/desktop/issues/5674 | None | 19:33:50 |
| open tab from bookmarks | https://github.com/zen-browser/desktop/issues/5673 | 0:36:45 | None |
| version 1.8 killed all pinned tabs (12 pieces) ■ SOLVED, just update the mods :) | https://github.com/zen-browser/desktop/issues/5672 | 0:07:25 | 15:32:21 |
| Zen's URL bar breaks when signing in with Mozilla Sync | https://github.com/zen-browser/desktop/issues/5671 | None | None |
| Top toolbar still expands even when Zen uses only left toolbar and system title bar | https://github.com/zen-browser/desktop/issues/5669 | 3:37:27 | None |
| Error in TabsBase selectedIndex | https://github.com/zen-browser/desktop/issues/5668 | None | None |
| Custom shortcut broke the Esc key in the browser. | https://github.com/zen-browser/desktop/issues/5667 | None | None |
| Add hex code field in 'change theme colors' seems to be gone | https://github.com/zen-browser/desktop/issues/5666 | 0:08:05 | 2:09:20 |
| [macOS 1.8b] Pinned Tabs removed after updating to the latest version | https://github.com/zen-browser/desktop/issues/5663 | 1:22:44 | None |
| Workspaces except the first one lost all open tabs after 1.8b update | https://github.com/zen-browser/desktop/issues/5662 | 0:20:36 | None |
| When i create a new profile using the new profile wizard, the new profile is set as the default one, and if i close the browser and reopen it, the button to switch to the other profile is not visible in the side bar. | https://github.com/zen-browser/desktop/issues/5661 | 13:53:19 | None |
| Beta and Twilight both appear set as default browser | https://github.com/zen-browser/desktop/issues/5660 | None | None |
| Zen browser does not start on the current windows desktop | https://github.com/zen-browser/desktop/issues/5659 | None | None |
| no switch profiles button after update | https://github.com/zen-browser/desktop/issues/5658 | 1:32:27 | 5:02:01 |
| `vertical-pinned-tabs-container-separator` is inside `zen-workspace-tabs-section` grid container | https://github.com/zen-browser/desktop/issues/5657 | 7:01:28 | 7:01:28 |
| Certificate Manager does not responds to interactions | https://github.com/zen-browser/desktop/issues/5656 | 0:22:52 | None |
| Open in New Container Tab when Switch to Workspace with Container Tab is on causes the tab to disappear | https://github.com/zen-browser/desktop/issues/5655 | 6:02:01 | None |
| UI Bugs in Zen 1.8b Off-Position Elements & Blank Screen in New Tab Window | https://github.com/zen-browser/desktop/issues/5654 | 1 day, 3:23:11 | None |
| Sideberry bug in new v1.8b | https://github.com/zen-browser/desktop/issues/5653 | 1:57:36 | None |
| After 1.8b, the search popup spawns in right bottom | https://github.com/zen-browser/desktop/issues/5652 | 3:15:59 | 3:54:17 |
| I can see that the new update has arrived, but my browser does not show it ? | https://github.com/zen-browser/desktop/issues/5651 | 4:26:41 | 1 day, 2:17:46 |
| Video player are broken after update to 1.8b | https://github.com/zen-browser/desktop/issues/5650 | None | 1 day, 0:23:43 |
| Essential tabs have the transparency filter applied | https://github.com/zen-browser/desktop/issues/5649 | None | None |
| Horizontal Scrolling with mouse wheel is not working | https://github.com/zen-browser/desktop/issues/5647 | None | None |
| 1.8b - Tab Groups dissapear after restart | https://github.com/zen-browser/desktop/issues/5646 | 3:01:15 | None |
| Home menu broken after update | https://github.com/zen-browser/desktop/issues/5645 | 15:28:28 | None |
| Added support renaming pinned tabs (But there is no options to rename the pinned tabs) | https://github.com/zen-browser/desktop/issues/5644 | 1:48:18 | 3:05:52 |
| Missing Vietnamese in 'translation to' language | https://github.com/zen-browser/desktop/issues/5643 | None | 0:25:10 |
| When zen brower turns on "Use smooth scrolling" option to browse forums, YouTube, Pinterest and other types of websites, there will be a problem of delayed scrolling or the mouse does not follow the hand. | https://github.com/zen-browser/desktop/issues/5641 | None | None |
| Error when typing in Korean in the address window | https://github.com/zen-browser/desktop/issues/5640 | 0:06:16 | 0:09:19 |
| [1.8t-1.8b] Clicking Settings button doesn't switch tabs properly | https://github.com/zen-browser/desktop/issues/5639 | None | 1 day, 3:24:31 |
| Sidebar doesn't hide after dismissal of urlbar | https://github.com/zen-browser/desktop/issues/5638 | None | 0:10:36 |
| Fixed tabs on different tabs fail to sync with each other | https://github.com/zen-browser/desktop/issues/5636 | None | None |
| tanstack router dev-tool crashing during HMR with "path is undefined" (only in Zen Browser) | https://github.com/zen-browser/desktop/issues/5635 | None | 0:20:53 |
| Transparent New Tab Modal when clicking Ctrl+T while playing a video | https://github.com/zen-browser/desktop/issues/5633 | 6:18:17 | None |
| You must login to this network pop up | https://github.com/zen-browser/desktop/issues/5631 | 1 day, 18:49:46 | None |
| Pinned Tabs Keep Unloading (1.7.6b Linux flatpak fresh install) | https://github.com/zen-browser/desktop/issues/5628 | None | None |
| Unable to type directly after opening a new Zen window. | https://github.com/zen-browser/desktop/issues/5627 | None | None |
| Mouse does not become pointer on hover | https://github.com/zen-browser/desktop/issues/5626 | 17:55:25 | None |
| Application Error: Memory Could Not Be Written in zen.exe | https://github.com/zen-browser/desktop/issues/5622 | None | None |
| "Canva" Lags and Cursor not appearing | https://github.com/zen-browser/desktop/issues/5621 | None | None |
| Highlighted text in URL Bar is light colored in light mode | https://github.com/zen-browser/desktop/issues/5619 | None | None |
| Glanced tabs that are expanded align wrongly in the viewport on mac | https://github.com/zen-browser/desktop/issues/5617 | None | None |
| Scrolling not as smooth as on other browsers | https://github.com/zen-browser/desktop/issues/5615 | None | 3:30:28 |
| [Twilight] Window controls not showing on hover | https://github.com/zen-browser/desktop/issues/5611 | None | None |
| Floating URL bar appears way off the expected position | https://github.com/zen-browser/desktop/issues/5609 | 1 day, 13:01:37 | None |
| Change theme color wipes out previous hex codes | https://github.com/zen-browser/desktop/issues/5608 | 3 days, 23:48:20 | None |
| Preferences constantly resetting. | https://github.com/zen-browser/desktop/issues/5607 | None | None |
| Search box off center | https://github.com/zen-browser/desktop/issues/5604 | 0:07:53 | 0:18:26 |
| Zen is being blocked consistently by BattlEye anti-cheat software | https://github.com/zen-browser/desktop/issues/5603 | None | 0:03:33 |
| Window is out of View Bug | https://github.com/zen-browser/desktop/issues/5600 | None | 0:06:59 |
| In Zen Browser, there is no clear indication when a webpage is loading | https://github.com/zen-browser/desktop/issues/5599 | 1:44:23 | 2 days, 5:12:39 |
| [Twilight] Tab groups not working 😅 | https://github.com/zen-browser/desktop/issues/5597 | 2:57:17 | 2:57:17 |
| New tab shows all essentials | https://github.com/zen-browser/desktop/issues/5596 | 3:18:41 | None |
| Customize toolbar | https://github.com/zen-browser/desktop/issues/5595 | 1 day, 11:08:32 | None |
| Firefox sync not getting "Ask to save passwords" toggle in Zen | https://github.com/zen-browser/desktop/issues/5594 | 3:50:43 | None |
| Session restore only restoring one window | https://github.com/zen-browser/desktop/issues/5593 | 1 day, 3:20:59 | None |
| Youtube sound delay | https://github.com/zen-browser/desktop/issues/5592 | 3 days, 20:07:44 | None |
| [Twilight] Floating urlbar typing area/prompt moving up and down making it hard to see. | https://github.com/zen-browser/desktop/issues/5590 | 8:06:32 | 8:06:32 |
| Sound not working on new tabs sometimes | https://github.com/zen-browser/desktop/issues/5589 | None | None |
| Laggy when scrolling | https://github.com/zen-browser/desktop/issues/5588 | None | None |
| Twilight not on Firefox 135.0.1 | https://github.com/zen-browser/desktop/issues/5587 | 0:49:14 | 0:49:14 |
| Latest Twilight Broken | https://github.com/zen-browser/desktop/issues/5586 | 0:53:59 | 0:53:59 |
| Moving tabs between two windows of Zen Browser moves the tab | https://github.com/zen-browser/desktop/issues/5585 | None | None |
| Render Issue | https://github.com/zen-browser/desktop/issues/5584 | 13:54:43 | 13:54:43 |
| Toggle button only seen as black dot. | https://github.com/zen-browser/desktop/issues/5583 | 2 days, 7:30:27 | None |
| Addons - General popup are shifted to the right, and in full screen they are not visible | https://github.com/zen-browser/desktop/issues/5582 | 5:39:40 | None |
| Youtube crashed on playlist. | https://github.com/zen-browser/desktop/issues/5580 | None | None |
| Input focus issue with Chinese IME in new tab page | https://github.com/zen-browser/desktop/issues/5578 | 2:11:15 | 4 days, 20:59:45 |
| Closing an essential tab removes it from essentials | https://github.com/zen-browser/desktop/issues/5575 | 18:01:45 | None |
| Bookmark and New Tab Issue | https://github.com/zen-browser/desktop/issues/5574 | None | None |
| Cant scroll tab list on touch screen. | https://github.com/zen-browser/desktop/issues/5573 | None | None |
| Cannot Select/Copy/Edit in URL Bar | https://github.com/zen-browser/desktop/issues/5570 | 1 day, 0:52:42 | None |
| youtube mouse pointer lag | https://github.com/zen-browser/desktop/issues/5568 | None | None |
| Adaptive tab bar color is not changing Zen's theme when the active window focus is on Zen but theme is changed when the focus is switched to other application. | https://github.com/zen-browser/desktop/issues/5567 | None | None |
| Dragging a tab to the edge of the sidebar detaches the tab from cursor | https://github.com/zen-browser/desktop/issues/5566 | None | None |
| General typing shortcuts with Control key are breaking | https://github.com/zen-browser/desktop/issues/5565 | None | 18:11:47 |
| Context menu renders cropped | https://github.com/zen-browser/desktop/issues/5564 | None | None |
| WebPanels - New added website doesn't appear immediately | https://github.com/zen-browser/desktop/issues/5563 | None | None |
| Links from External Apps Open as Blank Tabs in Zen Browser | https://github.com/zen-browser/desktop/issues/5562 | 2:11:24 | None |
| [Twilight 1.8] Sidebar is misalligned upon initlialization | https://github.com/zen-browser/desktop/issues/5560 | 1 day, 5:46:13 | 1 day, 5:46:13 |
| [Twilight 1.8] New Windows native Icons are poorly designed and uneccesary | https://github.com/zen-browser/desktop/issues/5559 | None | 22:24:06 |
| [Twilight 1.8] The new windows native icons are a eye sore to look at and I much prefer the original icons in 1.7.6 b | https://github.com/zen-browser/desktop/issues/5558 | None | 0:00:53 |
| {Twilight} Broken Workspace Swipe Gestures | https://github.com/zen-browser/desktop/issues/5557 | None | None |
| 1.7.6b Restore Previous Session does not work | https://github.com/zen-browser/desktop/issues/5556 | 12:28:14 | None |
| Separating a tab to a new window will convert the essential tab to pinned tab in the new window | https://github.com/zen-browser/desktop/issues/5555 | 1 day, 16:31:35 | None |
| Problems when typing in the URL bar in the IME | https://github.com/zen-browser/desktop/issues/5554 | 1 day, 9:24:59 | 1 day, 9:24:59 |
| Keyboard shortcut binding: Recieve keys as accent characters | https://github.com/zen-browser/desktop/issues/5553 | 4 days, 3:24:51 | None |
| Ctrl+Shift+Tab not work as switch to previous tab cuz "Show all tabs" is using it | https://github.com/zen-browser/desktop/issues/5552 | 0:29:24 | 5:42:48 |
| Tabs sent to Zen through Firefox sync "send to device" feature is added to essentials tab | https://github.com/zen-browser/desktop/issues/5551 | None | None |
| Signing in with Google is Not working. | https://github.com/zen-browser/desktop/issues/5550 | 9:57:05 | None |
| The active tab is above the URL bar overlay | https://github.com/zen-browser/desktop/issues/5545 | None | 5 days, 12:56:26 |
| Inspect Mode issue | https://github.com/zen-browser/desktop/issues/5542 | None | None |
| Essential Tabs | https://github.com/zen-browser/desktop/issues/5540 | 12:40:20 | None |
| Fullscreen mode for videos and the Full Screen JS API on MacOS are not totally fullscreen | https://github.com/zen-browser/desktop/issues/5539 | None | None |
| New tab floating search bar breaks when typing special dead-key characters | https://github.com/zen-browser/desktop/issues/5536 | None | None |
| Can't select multiple tabs/ can't use split tabs. | https://github.com/zen-browser/desktop/issues/5533 | None | None |
| All open tabs are blank and unresponsive | https://github.com/zen-browser/desktop/issues/5531 | 3:42:46 | None |
| Pinned Tabs loose link | https://github.com/zen-browser/desktop/issues/5529 | None | None |
| Keyboard shortcut rebinding: warning label how to save the shortcut is yellow-on-white | https://github.com/zen-browser/desktop/issues/5528 | None | None |
| Blurred fonts on ultrawide monitor full screen | https://github.com/zen-browser/desktop/issues/5527 | 5:31:30 | None |
| Need to restart browser for workspace changes to take effect. | https://github.com/zen-browser/desktop/issues/5526 | None | None |
| Icons Search is not working | https://github.com/zen-browser/desktop/issues/5525 | None | 6 days, 10:45:58 |
| Can't close the notification when I navigate to a new tab | https://github.com/zen-browser/desktop/issues/5523 | None | None |
| [Twilight 1.8t]macos 'traffic light' doesnt work | https://github.com/zen-browser/desktop/issues/5522 | 7 days, 13:30:51 | None |
| Glance Icons appear above Zen web panel | https://github.com/zen-browser/desktop/issues/5521 | None | 1 day, 8:12:42 |
| CloudFlare captcha error | https://github.com/zen-browser/desktop/issues/5520 | 1:35:43 | 1:50:28 |
| Can't Connect on twitch | https://github.com/zen-browser/desktop/issues/5519 | None | None |
| Pinned links disappear | https://github.com/zen-browser/desktop/issues/5518 | None | None |
| Fullscreen webpage from gmail preview loads part of webpage (see images) | https://github.com/zen-browser/desktop/issues/5515 | None | None |
| google suit apps load impoperly | https://github.com/zen-browser/desktop/issues/5514 | None | None |
| Unexpected blurred fonts when opening a web while using fractional scaling | https://github.com/zen-browser/desktop/issues/5513 | None | None |
| Glance's buttons are rendered above the sidebar | https://github.com/zen-browser/desktop/issues/5511 | 9 days, 5:17:09 | None |
| Broken profiles (switching, workspaces) | https://github.com/zen-browser/desktop/issues/5509 | 9:40:26 | None |
| System Crashing when opening pdf | https://github.com/zen-browser/desktop/issues/5507 | None | None |
| Essentials keep getting rearranged | https://github.com/zen-browser/desktop/issues/5505 | None | None |
| Active essential follow you to next workspace | https://github.com/zen-browser/desktop/issues/5504 | 8:47:21 | None |
| Chart Labels Render Incorrectly | https://github.com/zen-browser/desktop/issues/5501 | None | 7 days, 3:34:14 |
| **Performance Issue: High CPU Usage with Zen UI Mods** | https://github.com/zen-browser/desktop/issues/5500 | 1 day, 6:39:29 | None |
| Plugin icons are misalligned after the fresh install on MacOS | https://github.com/zen-browser/desktop/issues/5498 | None | None |
| (Manual) Glance no longer works on local webpages | https://github.com/zen-browser/desktop/issues/5497 | None | None |
| [Twilight 1.8] URL bar on side bar dissapears when clicking new tab | https://github.com/zen-browser/desktop/issues/5496 | None | 0:13:58 |
| [Twilight 1.8] Windows acrylic theme doesn't work | https://github.com/zen-browser/desktop/issues/5495 | None | 5:19:16 |
| New Tab Opens a Pop-Up Instead of a Blank Page Bug or Design Flaw? | https://github.com/zen-browser/desktop/issues/5494 | 6:52:09 | None |
| [Twilight 1.8] Floating URL bar doesn't stay stationary when in compact mode and twitches | https://github.com/zen-browser/desktop/issues/5493 | None | 3 days, 1:02:26 |
| Twilight build [1.8t] - pinned tabs doesn't save renamed name after closing | https://github.com/zen-browser/desktop/issues/5492 | 8:04:46 | None |
| Dragging link from tab to same workspace in different window causes container indicator to show up | https://github.com/zen-browser/desktop/issues/5489 | None | None |
| [Twilight 1.8t] Strange looking tab bar at startup | https://github.com/zen-browser/desktop/issues/5488 | None | 9:53:15 |
| Click and Drag one hand trackpad | https://github.com/zen-browser/desktop/issues/5487 | None | 2 days, 11:12:48 |
| [Twilight 1.8t] URL Search Bar is Misalligned in Compact Mode | https://github.com/zen-browser/desktop/issues/5486 | None | 4:56:35 |
| flatpak crashes Clear Linux OS | https://github.com/zen-browser/desktop/issues/5484 | None | None |
| Compact mode don´t working | https://github.com/zen-browser/desktop/issues/5483 | 1:04:09 | 1:04:09 |
| tab preview | https://github.com/zen-browser/desktop/issues/5482 | 2:43:58 | 2:43:58 |
| Pinned tabs do not load on startup | https://github.com/zen-browser/desktop/issues/5481 | None | None |
| Twilight should have a different bundle id, since is seperate .app | https://github.com/zen-browser/desktop/issues/5479 | None | None |
| Moving bookmarks on the bookmarkbar doesn't work properly | https://github.com/zen-browser/desktop/issues/5478 | None | None |
| Alt-Tab Behavior: Mouse Focus Interference | https://github.com/zen-browser/desktop/issues/5476 | None | None |
| Glancing a link in split view causes tab to glitch | https://github.com/zen-browser/desktop/issues/5475 | 2 days, 19:02:25 | None |
| Letterboxing adds +1 to width when not in compact mode and sidebar is resized (e.g., 1400 → 1401) | https://github.com/zen-browser/desktop/issues/5473 | None | None |
| Mac Text Replacements don't work | https://github.com/zen-browser/desktop/issues/5472 | 2 days, 23:30:41 | None |
| Built-in Screenshot feature buttons unreacheable in Split View | https://github.com/zen-browser/desktop/issues/5471 | None | None |
| SSO SAML Microsoft azure | https://github.com/zen-browser/desktop/issues/5470 | None | None |
| Toggle compact mode button can't be added anymore after latest release | https://github.com/zen-browser/desktop/issues/5469 | 7 days, 19:41:40 | 8 days, 3:56:17 |
| Zen browser does not honor the browser.quitShortcut.disabled setting | https://github.com/zen-browser/desktop/issues/5468 | None | None |
| Mac OS toolbar customization - missing icons and broken toolbar view | https://github.com/zen-browser/desktop/issues/5466 | None | None |
| New tab and the awesomebar appears over the current tab/content instead of a blank page | https://github.com/zen-browser/desktop/issues/5465 | 0:10:43 | 1:24:31 |
| Problem with Screensharing tabs on Zen (Meet, Jitsi, and alike) | https://github.com/zen-browser/desktop/issues/5464 | 3:00:19 | None |
| Browser can't connect to internet after waking from sleep. | https://github.com/zen-browser/desktop/issues/5463 | 5 days, 4:42:51 | None |
| [Twilight 1.7.7t] General UI inconsistencies and unpolished aspects | https://github.com/zen-browser/desktop/issues/5462 | 3:30:32 | 16:40:49 |
| UI Disappears and Cursor Jumps When Typing Traditional Chinese in a New Tab | https://github.com/zen-browser/desktop/issues/5461 | 2:23:41 | None |
| New tabs directly in Essentials without being pinned has essential. | https://github.com/zen-browser/desktop/issues/5458 | 1 day, 11:05:36 | None |
| [Twilight 1.7.7t] UI issue with window buttons | https://github.com/zen-browser/desktop/issues/5456 | 0:06:27 | 6:50:55 |
| Unable to use on-device passkeys on macOS | https://github.com/zen-browser/desktop/issues/5450 | 0:56:40 | 0:56:40 |
| When syncing to mozzila account I'm told to "Open Zen Browser on your mobile device" | https://github.com/zen-browser/desktop/issues/5448 | None | None |
| Too high memory uses | https://github.com/zen-browser/desktop/issues/5447 | None | None |
| Can't load any Reddit pages | https://github.com/zen-browser/desktop/issues/5446 | None | None |
| Error searching with an accented character | https://github.com/zen-browser/desktop/issues/5444 | 22:14:23 | None |
| Search Box Misalignment and Glitching When Opening Sidebar | https://github.com/zen-browser/desktop/issues/5442 | 0:42:19 | None |
| Workspace button doesn't appear? | https://github.com/zen-browser/desktop/issues/5441 | 23:55:47 | None |
| Developer Tools Not Loading and Unresponsive | https://github.com/zen-browser/desktop/issues/5439 | None | None |
| Unable to Update Zen Browser Twilight | https://github.com/zen-browser/desktop/issues/5438 | 0:54:12 | 22:15:33 |
| [Twilight] Container specific essentials: Essential tab keeps the focus when switching workspace | https://github.com/zen-browser/desktop/issues/5437 | None | None |
| The Ctrl + T is useless | https://github.com/zen-browser/desktop/issues/5436 | 2:17:15 | None |
| Random, open link in new tab behaviour | https://github.com/zen-browser/desktop/issues/5434 | None | None |
| Top side is getting cut off randomly | https://github.com/zen-browser/desktop/issues/5433 | None | None |
| Netflix Wont Persist Login | https://github.com/zen-browser/desktop/issues/5431 | 1 day, 8:19:32 | None |
| Welcome page after initial setup has absolute positioning for buttons | https://github.com/zen-browser/desktop/issues/5429 | None | None |
| Option to Lock Sidebar and Prevent Automatic Expansion on Mouse Hover Near Edge | https://github.com/zen-browser/desktop/issues/5428 | None | None |
| Add Option to Restore Previous Session (Windows and Tabs) | https://github.com/zen-browser/desktop/issues/5427 | None | 0:01:13 |
| Add Option to Restore Previous Session (Windows and Tabs) | https://github.com/zen-browser/desktop/issues/5426 | 1 day, 11:46:52 | None |
| Missing Shortcut to Switch to Last Active Tab | https://github.com/zen-browser/desktop/issues/5424 | 1 day, 5:28:34 | 9 days, 13:30:06 |
| Allow Drag-and-Drop to Open Tabs in a New Window | https://github.com/zen-browser/desktop/issues/5423 | 23:56:49 | None |
| Add Notification for New Tabs When Sidebar is Collapsed | https://github.com/zen-browser/desktop/issues/5422 | None | None |
| Option to Lock Sidebar and Prevent Automatic Expansion on Mouse Hover Near Edge | https://github.com/zen-browser/desktop/issues/5421 | None | 15:51:11 |
| Toggle Sidebar's Width button dissapears upon shrinking the sidebar's width | https://github.com/zen-browser/desktop/issues/5416 | None | 9 days, 20:01:47 |
| The url bar gets a little busted when the tab bar is open or close | https://github.com/zen-browser/desktop/issues/5415 | None | None |
| No hamburger (three dots) on Mac | https://github.com/zen-browser/desktop/issues/5413 | 1 day, 11:31:15 | 1 day, 11:31:15 |
| First tab in workspace with default container not logged in properly | https://github.com/zen-browser/desktop/issues/5412 | None | None |
| Address bar out of bounds | https://github.com/zen-browser/desktop/issues/5411 | None | None |
| New Tab Button Unresponsive When Signed-In to Firefox Account | https://github.com/zen-browser/desktop/issues/5410 | None | None |
| Text corrupting | https://github.com/zen-browser/desktop/issues/5409 | 2 days, 19:23:23 | 4 days, 15:42:45 |
| My Zen Browser is keep forcing to use dark mode on some website that doesn't have a default background been set | https://github.com/zen-browser/desktop/issues/5408 | 12:02:25 | 12:02:25 |
| Twitter/X does not automatically change light/dark theme, whereas Firefox does | https://github.com/zen-browser/desktop/issues/5401 | None | None |
| I have lags while I'm watching youtube video | https://github.com/zen-browser/desktop/issues/5399 | 0:04:37 | None |
| Zooming with Cmd + Scroll Wheel Not Working on Mac | https://github.com/zen-browser/desktop/issues/5398 | None | None |
| Firefox logos/website in certain about: pages | https://github.com/zen-browser/desktop/issues/5397 | None | None |
| Zen URL bar glitchy animation in compact mode | https://github.com/zen-browser/desktop/issues/5396 | None | None |
| Ctrl + V doesn't work when creating new tab | https://github.com/zen-browser/desktop/issues/5395 | 6:42:48 | None |
| Text and other elements in some webpages is significatly smaller on a display with scaling applied | https://github.com/zen-browser/desktop/issues/5394 | None | None |
| bookmark bar persists when opening folder | https://github.com/zen-browser/desktop/issues/5393 | 2 days, 15:06:01 | 12 days, 0:17:13 |
| pip not adjustable with trackpad | https://github.com/zen-browser/desktop/issues/5392 | None | 5 days, 8:39:48 |
| media player "unknown app" | https://github.com/zen-browser/desktop/issues/5391 | None | None |
| sidebar glitch when creating new tab | https://github.com/zen-browser/desktop/issues/5390 | None | 9 days, 22:30:29 |
| Themes Inconsistent | https://github.com/zen-browser/desktop/issues/5389 | 17:46:52 | None |
| Compact mode does not show popup/redirect warnings | https://github.com/zen-browser/desktop/issues/5388 | None | None |
| where did all the themes go? | https://github.com/zen-browser/desktop/issues/5387 | 0:58:22 | 1:35:56 |
| Memory Leak in Side Panels - Websites Remain Active in Background After Closing Panels | https://github.com/zen-browser/desktop/issues/5385 | 1:57:07 | 1:57:07 |
| Workspace container not applied on new window | https://github.com/zen-browser/desktop/issues/5384 | None | None |
| Bookmarks don't open in new tab when using new tab | https://github.com/zen-browser/desktop/issues/5383 | 4 days, 15:48:15 | None |
| Sidebar showing up way too early | https://github.com/zen-browser/desktop/issues/5382 | 1 day, 8:30:00 | None |
| Zen gradient is messed up | https://github.com/zen-browser/desktop/issues/5380 | None | None |
| Site keyboard shortcuts not active on tab selection | https://github.com/zen-browser/desktop/issues/5379 | None | None |
| It is Recognising Same Hotkeys as Different and not reporting conflict between them | https://github.com/zen-browser/desktop/issues/5378 | None | None |
| [BUG] Enlarges extensions at the top switching layout modes | https://github.com/zen-browser/desktop/issues/5377 | 13:34:48 | 22:53:55 |
| [Twilight 1.7.7t] New Issue with super pins when making pinned tabs look like essentials | https://github.com/zen-browser/desktop/issues/5376 | 2 days, 21:50:51 | 3 days, 9:44:53 |
| Youtube site | https://github.com/zen-browser/desktop/issues/5374 | 4:08:18 | 4 days, 20:50:21 |
| [Twilight 1.7.7t] Windows acrylic theme sometimes doesn't work at all | https://github.com/zen-browser/desktop/issues/5371 | None | 3 days, 13:25:45 |
| Broken install.sh | https://github.com/zen-browser/desktop/issues/5370 | None | 10:34:12 |
| tab switcher is jumping 2-3 tabs ahead instead of the next tab | https://github.com/zen-browser/desktop/issues/5369 | None | None |
| Cannot resize sidebar as resize double arrows are not showing post update to 1.7.6b | https://github.com/zen-browser/desktop/issues/5368 | 3 days, 15:31:01 | None |
| [Twilight 1.7.7t] Windows acrylic theme either isn't working or is barely visible. | https://github.com/zen-browser/desktop/issues/5366 | None | 0:44:20 |
| [Twilight 1.7.7t] Private window tabs are misalligned and unusable upon initialization | https://github.com/zen-browser/desktop/issues/5364 | None | 13:45:27 |
| PDF view pinch zoom glitch | https://github.com/zen-browser/desktop/issues/5363 | None | None |
| Pinned tab URL not loaded - Loads last visited URL within the pinned URL instead | https://github.com/zen-browser/desktop/issues/5362 | 2 days, 19:35:48 | None |
| [macOS 1.7.6b] Pinned container tabs are not preserved in new browser windows | https://github.com/zen-browser/desktop/issues/5361 | None | 12 days, 0:35:06 |
| Differentiate Zen browsers in Cmd/Alt + Tab when running two different profiles at once | https://github.com/zen-browser/desktop/issues/5359 | None | None |
| Browser is completely blank | https://github.com/zen-browser/desktop/issues/5357 | None | None |
| Duplicating tabs of meeting apps | https://github.com/zen-browser/desktop/issues/5356 | None | None |
| Inconsistent multi line search suggestions in single toolbar layout | https://github.com/zen-browser/desktop/issues/5354 | None | None |
| Web Panel can get stuck behind toolbar | https://github.com/zen-browser/desktop/issues/5352 | None | None |
| There is no response to clicking the New Tab | https://github.com/zen-browser/desktop/issues/5351 | 17:20:04 | 18:15:27 |
| Compact mode error | https://github.com/zen-browser/desktop/issues/5349 | None | 2 days, 6:47:43 |
| Accent marks bug new tab search and override the current page instead | https://github.com/zen-browser/desktop/issues/5348 | None | 11 days, 3:10:32 |
| Tabs scroll to top on closing any from the bottom | https://github.com/zen-browser/desktop/issues/5346 | 1 day, 3:00:44 | 3 days, 22:33:59 |
| same issue | https://github.com/zen-browser/desktop/issues/5345 | None | 0:03:26 |
| DataTables Error | https://github.com/zen-browser/desktop/issues/5344 | None | None |
| The Ctrl+T to open an a new tab has a glitch for youtube. | https://github.com/zen-browser/desktop/issues/5343 | 1:20:06 | 4:50:55 |
| Closing "main" window while private window is opened leads to missing opened tabs in "main" window after the next start | https://github.com/zen-browser/desktop/issues/5340 | 11 days, 22:25:04 | None |
| Cannot remap ESC key | https://github.com/zen-browser/desktop/issues/5338 | None | 0:06:53 |
| 1.7.7t - new tab opens in essentials | https://github.com/zen-browser/desktop/issues/5337 | 7:44:10 | 1 day, 9:51:30 |
| Screen keeps flashing | https://github.com/zen-browser/desktop/issues/5333 | 1 day, 2:04:33 | None |
| Pinned tabs gone | https://github.com/zen-browser/desktop/issues/5332 | None | None |
| Maximizing a previewed link lead to a display error going in the corner | https://github.com/zen-browser/desktop/issues/5331 | None | None |
| [Linux 1.7.6] Compact mode sidebar can't collapse after adding a tab to essentials | https://github.com/zen-browser/desktop/issues/5330 | None | 11 days, 8:45:01 |
| [Twilight 1.7.7t] Severe misalignment when moving pinned or essential tabs | https://github.com/zen-browser/desktop/issues/5329 | None | 16:32:31 |
| customizing toolbar causes url bar and overflow to become bugged | https://github.com/zen-browser/desktop/issues/5328 | None | 11 days, 23:01:42 |
| new tab | https://github.com/zen-browser/desktop/issues/5327 | 0:21:15 | 16:16:00 |
| [Twilight 1.7.7t] Container-specific essentials non-functional on Windows | https://github.com/zen-browser/desktop/issues/5326 | None | None |
| Glitch Occurs When Hovering Over URL Bar in Sidebar Compact Mode | https://github.com/zen-browser/desktop/issues/5325 | None | None |
| [Twilight] New workspace switching animation slow, glitches and stutters | https://github.com/zen-browser/desktop/issues/5324 | None | None |
| [Twilight 1.7.7t] New tabs stack horizontially rather than vertically | https://github.com/zen-browser/desktop/issues/5323 | 0:07:26 | 1 day, 20:22:04 |
| Pinned tabs disappeared | https://github.com/zen-browser/desktop/issues/5321 | 16:32:44 | 4 days, 20:03:10 |
| Tabs scroll to bottom and then top when collapisng or uncollapsing the sidebar | https://github.com/zen-browser/desktop/issues/5320 | None | None |
| [Twilight] Only default workspace works, other workspaces wiped | https://github.com/zen-browser/desktop/issues/5319 | None | None |
| [MacOS] window managing buttons disapering when minimizing sidebar | https://github.com/zen-browser/desktop/issues/5317 | None | None |
| [Twilight] Tabs have no scrollbox anymore | https://github.com/zen-browser/desktop/issues/5316 | None | 9 days, 13:49:41 |
| [Windows 10] Videos do not play at Udemy.com | https://github.com/zen-browser/desktop/issues/5315 | 2:23:52 | None |
| New tab not opening | https://github.com/zen-browser/desktop/issues/5312 | 1:57:26 | 2:02:22 |
| Dead keys don't work with the revamped new tab, redirect to the current URL | https://github.com/zen-browser/desktop/issues/5311 | None | 11 days, 22:07:10 |
| Sidebar messed up and cant scroll to the bottom icons | https://github.com/zen-browser/desktop/issues/5310 | 0:14:08 | 0:22:26 |
| Keyboard Shortcut Queuing | https://github.com/zen-browser/desktop/issues/5307 | None | None |
| New Tab's Search Bar Doesn't Reset the Input Field When Losing Focus | https://github.com/zen-browser/desktop/issues/5306 | None | None |
| New tab on bottom | https://github.com/zen-browser/desktop/issues/5305 | None | None |
| Broken display of workspaces in latest twilight release | https://github.com/zen-browser/desktop/issues/5304 | None | 1 day, 3:57:44 |
| Zen Browser can not automatically update its self. | https://github.com/zen-browser/desktop/issues/5301 | 11 days, 2:58:17 | None |
| Zen Twilight 1.7.7t update ruined the Sidebar | https://github.com/zen-browser/desktop/issues/5299 | 0:26:33 | 6:58:05 |
| Clicking New Tab button does not open a new tab | https://github.com/zen-browser/desktop/issues/5297 | 0:12:35 | 0:57:11 |
| Viewing images in messenger are zoomed in than normal as opposed to other browsers | https://github.com/zen-browser/desktop/issues/5295 | None | None |
| Floating URL Bar Flickers/Twitches When Typing Japanese Characters | https://github.com/zen-browser/desktop/issues/5294 | 0:35:21 | 0:35:33 |
| Maximizing Floating Window sucks | https://github.com/zen-browser/desktop/issues/5291 | None | 13 days, 3:18:19 |
| Zen is just too slow in my new laptop | https://github.com/zen-browser/desktop/issues/5290 | None | None |
| Screen sharing fails on Mac OS | https://github.com/zen-browser/desktop/issues/5289 | None | None |
| The new tab opens below the next tab | https://github.com/zen-browser/desktop/issues/5288 | None | None |
| Search bar misalignment | https://github.com/zen-browser/desktop/issues/5287 | None | 13 days, 21:12:37 |
| Can't disable "Ask to save passwords" when 1Password extension is activated. | https://github.com/zen-browser/desktop/issues/5286 | 5:38:34 | 6:36:37 |
| Close split screen, toggle splitscreen grid and sometimes horizontal splitscreen doesn't work at all! | https://github.com/zen-browser/desktop/issues/5285 | None | None |
| Video Pop-up and theme misalignment | https://github.com/zen-browser/desktop/issues/5284 | None | None |
| Sidebar width is too wide and cannot adjust it when display workspaces as an icon strip | https://github.com/zen-browser/desktop/issues/5282 | None | None |
| Keybinds won't work properly on zen | https://github.com/zen-browser/desktop/issues/5281 | 4:30:10 | None |
| Container tabs from expanded glance do not show indicators in workspaces assigned to different containers | https://github.com/zen-browser/desktop/issues/5280 | None | None |
| Twilight build - 1.7.7t (2025-02-11 at 12:46:32) - auto-switching url from one workspace to another causes Zen to break | https://github.com/zen-browser/desktop/issues/5277 | None | None |
| Pinned Tabs Do Not Retain Original URL | https://github.com/zen-browser/desktop/issues/5276 | 2:40:04 | 15 days, 5:50:00 |
| CTRL+T shortcut and clicking on the '+ New Tab' opens floating URL bar | https://github.com/zen-browser/desktop/issues/5272 | 1:36:59 | 3:32:50 |
| Tab Groups Persist Across Workspaces Instead of Being Workspace-Specific | https://github.com/zen-browser/desktop/issues/5271 | 4:31:55 | 4:31:55 |
| Visiting some sites renders the browser material as the site's background. | https://github.com/zen-browser/desktop/issues/5268 | 5:06:25 | None |
| Sound icon in tab missing when side menu is folded | https://github.com/zen-browser/desktop/issues/5267 | 1:43:09 | 11:29:21 |
| Zen Ignores beforeunload Event-Handler When Closing Tabs and Windows | https://github.com/zen-browser/desktop/issues/5266 | None | None |
| New Tabs open in pinned tabs | https://github.com/zen-browser/desktop/issues/5264 | 7:33:27 | 23:46:33 |
| When changing OS theme various popups and menus become unreadable | https://github.com/zen-browser/desktop/issues/5263 | None | None |
| Glance Feature Causes Crash on Pages with "Confirm on Close" Behavior | https://github.com/zen-browser/desktop/issues/5262 | None | None |
| Darkreader ignores websites in Zen sidebar | https://github.com/zen-browser/desktop/issues/5260 | 3 days, 12:09:25 | None |
| Scrolling to switch workspaces not working | https://github.com/zen-browser/desktop/issues/5258 | 1 day, 11:01:17 | None |
| How can I show tab titles in the sidebar? | https://github.com/zen-browser/desktop/issues/5256 | 0:06:16 | 2:58:54 |
| Using the Chinese input method will reset the new tab behavior to open in the original tab | https://github.com/zen-browser/desktop/issues/5251 | 1:43:38 | 14:53:28 |
| Cant change profile on Mac/Only one instance of Zen allowed | https://github.com/zen-browser/desktop/issues/5250 | None | None |
| Broken Adress Bar appearance when Toolbar is very full | https://github.com/zen-browser/desktop/issues/5249 | None | None |
| New Tab not showing at all unless I enter something in the adress bar | https://github.com/zen-browser/desktop/issues/5248 | 0:32:55 | 0:42:38 |
| [BUG] Canvas is distorted on Web Apps | https://github.com/zen-browser/desktop/issues/5247 | 1:22:37 | 1:23:05 |
| Inconsistent thickness of the new UI icons | https://github.com/zen-browser/desktop/issues/5246 | None | None |
| Broken web panel | https://github.com/zen-browser/desktop/issues/5245 | None | None |
| Pinned tab unload button sometimes shows up as close button and closes tabs when clicked | https://github.com/zen-browser/desktop/issues/5244 | 1:31:44 | 12 days, 21:44:46 |
| Udemy encrypted videos are not playing | https://github.com/zen-browser/desktop/issues/5243 | 0:09:56 | 0:09:56 |
| Inconsistent/Incorrect behavior when using ctrl+enter from new tab addressbar | https://github.com/zen-browser/desktop/issues/5241 | 3 days, 0:12:37 | None |
| Glitchy sidebar on URL bar focus in compact mode | https://github.com/zen-browser/desktop/issues/5240 | 0:12:47 | None |
| Bookmarking doesn't work properly | https://github.com/zen-browser/desktop/issues/5239 | None | None |
| (Fails to build desktop) branch '135.0' does not have any commits | https://github.com/zen-browser/desktop/issues/5237 | None | None |
| Takes ~3 mins to open a link from terminal | https://github.com/zen-browser/desktop/issues/5236 | 1 day, 10:16:38 | None |
| 'Fullscreening'/Opening Glance from Essential Tab will make it Essential as well | https://github.com/zen-browser/desktop/issues/5234 | 4:42:06 | None |
| Ctrl+T Opens Search Panel Instead of New Tab | https://github.com/zen-browser/desktop/issues/5231 | 0:04:43 | 1:02:01 |
| New Tab Menu Not Displayed During Fullscreen Video Playback | https://github.com/zen-browser/desktop/issues/5229 | 6:47:20 | 6:47:20 |
| single click with middle key mouse sometimes deletes two tabs not just single tab | https://github.com/zen-browser/desktop/issues/5228 | 1 day, 8:31:15 | None |
| Sidebar not closing after pinning a tab | https://github.com/zen-browser/desktop/issues/5227 | 6:44:27 | 17 days, 16:08:54 |
| Bug in zen.urlbar.replace-newtab (wierd behavior in fullscreen) | https://github.com/zen-browser/desktop/issues/5225 | 10:17:06 | 10:17:06 |
| Auto switching workspace shows only one essential | https://github.com/zen-browser/desktop/issues/5222 | 1 day, 13:28:45 | None |
| Excalidraw rendering issue on zen browser | https://github.com/zen-browser/desktop/issues/5221 | 11:59:41 | 19:45:55 |
| Tab does not open | https://github.com/zen-browser/desktop/issues/5220 | 5:15:49 | None |
| Lost profile after update | https://github.com/zen-browser/desktop/issues/5218 | 1 day, 3:34:25 | None |
| Gamepad controls for browser games stopped working after last few updates. | https://github.com/zen-browser/desktop/issues/5217 | None | None |
| New Tabs Not Responding After An Update | https://github.com/zen-browser/desktop/issues/5216 | None | None |
| icon is in not visible in the toolbar | https://github.com/zen-browser/desktop/issues/5215 | 4 days, 19:21:15 | None |
| Issue: New Tab Not Opening When Searching in Korean | https://github.com/zen-browser/desktop/issues/5213 | 0:14:43 | 6 days, 13:05:20 |
| Right-Click Context Menu: Keyboard Shortcuts Require Enter to Activate | https://github.com/zen-browser/desktop/issues/5212 | None | None |
| Support daily.dev extension in zen browser. firefox doesn't. | https://github.com/zen-browser/desktop/issues/5211 | 0:05:56 | 0:05:56 |
| Error at the bottom right when opening a tab | https://github.com/zen-browser/desktop/issues/5210 | 0:28:59 | 0:28:59 |
| Pen Tablet Scrolling Not Working in Sidebar | https://github.com/zen-browser/desktop/issues/5209 | None | None |
| Essentials icons are off center | https://github.com/zen-browser/desktop/issues/5207 | 19:44:34 | 22:48:36 |
| the sidebar and url bar theme is not conistent with selected theme on windows | https://github.com/zen-browser/desktop/issues/5205 | 1:34:52 | 1:34:52 |
| New tab search bar loses focus on Japanese input, gives focus back to address bar, and replaces old tab instead of opening a new one | https://github.com/zen-browser/desktop/issues/5204 | 1:22:26 | 2:02:49 |
| Removing all start page shortcuts breaks Cmd+t (New Tab) | https://github.com/zen-browser/desktop/issues/5202 | 3:13:34 | None |
| Language being weird with Zen browser | https://github.com/zen-browser/desktop/issues/5201 | None | 3:53:43 |
| CMD+Enter inconsistently opens URLs in new tab on macOS | https://github.com/zen-browser/desktop/issues/5200 | 11:54:11 | None |
| I can't surf the internet using a VPN proxy | https://github.com/zen-browser/desktop/issues/5199 | 3:17:49 | None |
| New "feature" is counterintuative | https://github.com/zen-browser/desktop/issues/5198 | 3:02:57 | 4:58:52 |
| sidebar and toolbar issues | https://github.com/zen-browser/desktop/issues/5195 | 3 days, 18:29:17 | None |
| Incoherent behavior for vertical tabs ? | https://github.com/zen-browser/desktop/issues/5194 | None | None |
| Can't change or rebind keyboard shortcuts zen browser macos | https://github.com/zen-browser/desktop/issues/5193 | None | 0:16:17 |
| How to launch a specific profile from terminal? | https://github.com/zen-browser/desktop/issues/5192 | None | None |
| The New Tab Page is not transparent | https://github.com/zen-browser/desktop/issues/5191 | 7:55:33 | 7:55:33 |
| Cannot manually unload Essentials | https://github.com/zen-browser/desktop/issues/5190 | 4 days, 14:51:46 | None |
| Why doesn't a “new tab” open when I click on the “new tab” button? | https://github.com/zen-browser/desktop/issues/5188 | 0:16:26 | 9:15:23 |
| Bookmark Library display incorrectly | https://github.com/zen-browser/desktop/issues/5187 | None | None |
| Extension pin randomly disappeared | https://github.com/zen-browser/desktop/issues/5186 | 8 days, 23:07:53 | None |
| Zen freezes up when trying to open download history window | https://github.com/zen-browser/desktop/issues/5185 | 2:20:31 | 4:43:12 |
| New tab replacement doesn't work in fullscreen pages | https://github.com/zen-browser/desktop/issues/5182 | 21:49:46 | 12:44:32 |
| The title bar and the sidebar do not lose focus after using the URL bar, including when the sidebar is in compact mode. | https://github.com/zen-browser/desktop/issues/5181 | None | None |
| pixelated appearance of text over multiple websites like google docs and exchalidraw | https://github.com/zen-browser/desktop/issues/5179 | 1:48:59 | None |
| Long loading time when using integrated graphics | https://github.com/zen-browser/desktop/issues/5178 | 5:20:54 | None |
| Search in Zen Mods search bar will reapply on new page after being backspaced | https://github.com/zen-browser/desktop/issues/5177 | 5:35:34 | None |
| Opening a new tab in a pinned tab without a URL (e.g. a tabliss new tab) instead overwrites the pinned tab | https://github.com/zen-browser/desktop/issues/5175 | None | None |
| Opening new tab with middle click exposes contents of clipboard. | https://github.com/zen-browser/desktop/issues/5174 | 0:02:24 | 15:38:51 |
| ctrl + numberkey error | https://github.com/zen-browser/desktop/issues/5173 | None | None |
| Closing and reopening pinned tab internally pins a new tab instead | https://github.com/zen-browser/desktop/issues/5172 | None | None |
| Sibebar splitter on the wrong side. | https://github.com/zen-browser/desktop/issues/5170 | 17 days, 2:13:29 | None |
| Zen crashes when trying to share a zen window on google meeet | https://github.com/zen-browser/desktop/issues/5169 | None | None |
| 1Password unlock requires password, unable to log in with touch id | https://github.com/zen-browser/desktop/issues/5168 | 0:03:44 | 0:03:44 |
| Cmd + Number tab cycling inconsistent | https://github.com/zen-browser/desktop/issues/5167 | 0:01:49 | None |
| Ctrl+W won't close window when its the last tab (expected?) | https://github.com/zen-browser/desktop/issues/5166 | 0:26:12 | 5:59:33 |
| Weird url bar behavior | https://github.com/zen-browser/desktop/issues/5165 | 3:43:40 | 22:04:01 |
| Tab Group UI Bug | https://github.com/zen-browser/desktop/issues/5162 | 0:35:13 | 0:35:13 |
| The restore tab button beside the pinned tabs is gone and only the unload button shows. | https://github.com/zen-browser/desktop/issues/5161 | None | 2:16:35 |
| Change tab(s) to workspace button has no effect on essential tab | https://github.com/zen-browser/desktop/issues/5160 | 2:51:27 | 8:22:14 |
| Horizontal overflow on the new-onboarding page | https://github.com/zen-browser/desktop/issues/5157 | 12 days, 8:03:52 | 12 days, 8:03:52 |
| [Macos] Unable to close floating urlbar | https://github.com/zen-browser/desktop/issues/5155 | None | None |
| 'zen.theme.essentials-favicon-bg = true' looks inconsistent | https://github.com/zen-browser/desktop/issues/5154 | 7:56:26 | None |
| Cannot scroll | https://github.com/zen-browser/desktop/issues/5153 | None | 2 days, 15:13:47 |
| Middle-clicking the empty tab bar area opens a new tab with the previous tab container | https://github.com/zen-browser/desktop/issues/5151 | None | None |
| New "New Tab" behaviour makes no sense with "Only Show on New Tab" Bookmark Toolbar option | https://github.com/zen-browser/desktop/issues/5150 | 12 days, 11:53:00 | None |
| Can't open a new tab | https://github.com/zen-browser/desktop/issues/5149 | 0:04:37 | 0:05:55 |
| IA Chat dont appear / no icon | https://github.com/zen-browser/desktop/issues/5148 | 10:50:36 | None |
| When clicking the URL bar in compact mode, it starts closing for a brief period before resetting, (1.7.6 b) | https://github.com/zen-browser/desktop/issues/5147 | None | 5 days, 9:26:08 |
| URL Bar off center when bar is hidden in compact mode | https://github.com/zen-browser/desktop/issues/5145 | None | None |
| New tab inconsistent behavior when using 'new tab' button. | https://github.com/zen-browser/desktop/issues/5144 | None | None |
| Unpinned tabs appear as pinned | https://github.com/zen-browser/desktop/issues/5143 | 0:31:22 | 0:48:26 |
| after last update, new tabs open on the top/first and closing tabs jump to the top/first as well | https://github.com/zen-browser/desktop/issues/5140 | 0:03:44 | 0:03:44 |
| Trying to open a new tab opens in same tab if you press alt+enter | https://github.com/zen-browser/desktop/issues/5139 | None | None |
| Cannot open new tab after the latest update | https://github.com/zen-browser/desktop/issues/5138 | 0:12:08 | 0:15:32 |
| Glitchy text on some websites | https://github.com/zen-browser/desktop/issues/5137 | 17:42:54 | 2 days, 12:36:55 |
| [Unload] Unloading a playing YT Music tab breaks it | https://github.com/zen-browser/desktop/issues/5136 | None | None |
| The native installation script for linux still uses .bz2 instead of .xz | https://github.com/zen-browser/desktop/issues/5134 | 20:18:41 | None |
| [Linux] Tab tear-off not working while "Tabs on the right" is checked | https://github.com/zen-browser/desktop/issues/5132 | 1:24:50 | None |
| Middle Click on Empty Space Immediately Searches in Default Search Engine the Clipboard Text | https://github.com/zen-browser/desktop/issues/5129 | 1:40:56 | None |
| Button to expand sidebar doesn't show | https://github.com/zen-browser/desktop/issues/5128 | 7:02:36 | None |
| Profile Changin Button Doesn't Exist | https://github.com/zen-browser/desktop/issues/5127 | None | None |
| Zen Freezes on Second Overflow Menu Click | https://github.com/zen-browser/desktop/issues/5126 | 0:47:34 | None |
| new tab url bar is invible after youtube fullscreen invisible | https://github.com/zen-browser/desktop/issues/5125 | None | 1 day, 0:17:22 |
| Pinned and Essential tabs disappearing upon re-opening Zen Browser | https://github.com/zen-browser/desktop/issues/5124 | 2 days, 16:28:39 | None |
| SearchBar Offset Wrong | https://github.com/zen-browser/desktop/issues/5121 | 4 days, 4:34:42 | None |
| Twilight build - 1.7.7t (2025-02-08 at 09:10:14) - MacOS (The application “Zen Twilight.app” cant be opened.) | https://github.com/zen-browser/desktop/issues/5120 | 0:31:32 | 6:40:22 |
| Punycode instead of special characters shown in urlbar by default | https://github.com/zen-browser/desktop/issues/5119 | None | None |
| Show History UI broken on collapsed sidebar | https://github.com/zen-browser/desktop/issues/5118 | 0:27:55 | 0:27:55 |
| Website Display Displacement with Glance in New Tab | https://github.com/zen-browser/desktop/issues/5117 | 18:35:15 | 9 days, 6:00:38 |
| [Win11] Compact sidebar stutters on open | https://github.com/zen-browser/desktop/issues/5116 | 0:04:00 | None |
| Delay when opening sidebar in compact mode | https://github.com/zen-browser/desktop/issues/5115 | None | None |
| Reset pinned tab button is not working | https://github.com/zen-browser/desktop/issues/5114 | 11:27:50 | 17 days, 21:34:41 |
| In 1.7.6b middle clicking to make new tab isn't working correctly | https://github.com/zen-browser/desktop/issues/5113 | 1:34:51 | 1:34:51 |
| can't open new tabs | https://github.com/zen-browser/desktop/issues/5109 | 0:03:13 | 1:55:09 |
| tab groups are messed up after 1.7.5b | https://github.com/zen-browser/desktop/issues/5108 | 1:59:44 | 1:59:44 |
| (Linux) The app icon is too big | https://github.com/zen-browser/desktop/issues/5106 | 1:59:48 | None |
| Edit url opens lateral bar when pressing esc | https://github.com/zen-browser/desktop/issues/5105 | None | None |
| Cant create a new tab when full screen video is playing | https://github.com/zen-browser/desktop/issues/5104 | 1:34:16 | 1:36:53 |
| Opening a new tab from button or keyboard shortcut doesn't work | https://github.com/zen-browser/desktop/issues/5102 | None | 0:04:35 |
| Digitalocean console is unusable on Zen | https://github.com/zen-browser/desktop/issues/5100 | 5:28:55 | None |
| Websites don't detect system dark theme | https://github.com/zen-browser/desktop/issues/5099 | None | None |
| extension pin in wrong place | https://github.com/zen-browser/desktop/issues/5098 | 5:41:59 | None |
| I can't open new tab by clicking on + or hotkey Ctrl + T | https://github.com/zen-browser/desktop/issues/5097 | 0:01:58 | 0:21:17 |
| Sroll button to create new tab doesnt work with new update Version 1.7.5b | https://github.com/zen-browser/desktop/issues/5096 | 0:23:06 | 1:33:40 |
| I can't disable the 'New url bar' | https://github.com/zen-browser/desktop/issues/5095 | 0:12:40 | 1:38:32 |
| Keyboard shortcut unresponsive (ctrl+alt+s) | https://github.com/zen-browser/desktop/issues/5094 | 0:43:33 | None |
| "Open link in New Tab" does not follow the "Move the new tab button to the top" Setting | https://github.com/zen-browser/desktop/issues/5091 | 13:26:32 | None |
| cant open new tabs after latest update | https://github.com/zen-browser/desktop/issues/5090 | 0:19:49 | 4:34:11 |
| Zen compact mode top toolbar sometimes does not automatically hide | https://github.com/zen-browser/desktop/issues/5089 | None | None |
| Glance | https://github.com/zen-browser/desktop/issues/5088 | 0:15:53 | 0:24:45 |
| Cannot create new tabs | https://github.com/zen-browser/desktop/issues/5084 | 0:11:21 | 1:25:27 |
| Floating Adressbar looses text highlight from default Adressbar | https://github.com/zen-browser/desktop/issues/5083 | 2:34:58 | None |
| Tabs dont appear correctly when using the new (new tab) behaviour. | https://github.com/zen-browser/desktop/issues/5082 | 0:35:41 | 2 days, 2:00:33 |
| Failed to create a new tab using the crtl+t shortcut | https://github.com/zen-browser/desktop/issues/5081 | 0:35:19 | 0:58:53 |
| unloaded pinned tabs appearing in tab switcher | https://github.com/zen-browser/desktop/issues/5080 | 7 days, 16:43:06 | 8 days, 17:22:09 |
| TradingView Chart Not Loading on Bitget Exchange (Spot and Futures) | https://github.com/zen-browser/desktop/issues/5078 | None | None |
| Sidebar is on the right side with no way of changing it | https://github.com/zen-browser/desktop/issues/5077 | 1 day, 9:18:55 | None |
| Fix logo | https://github.com/zen-browser/desktop/issues/5076 | 5:03:41 | 5:03:41 |
| Some pinned tabs have tiny width and show up in the wrong section. | https://github.com/zen-browser/desktop/issues/5075 | None | 16 days, 3:53:30 |
| New tab does not open default start page or extension start page anymore | https://github.com/zen-browser/desktop/issues/5074 | 0:14:20 | 9:25:19 |
| CRITICAL cannot switch workspaces, sidebar goes blank with no tabs | https://github.com/zen-browser/desktop/issues/5073 | 0:59:17 | 13:10:28 |
| Issues with pinned tab, essential, and unpinned tab zones | https://github.com/zen-browser/desktop/issues/5072 | None | 16 days, 4:03:47 |
| New Tab Open floating URL bar doesnt open an actual tab until the new url is confirmed | https://github.com/zen-browser/desktop/issues/5071 | 0:00:36 | 0:05:38 |
| Entering full screen mode would scrolling tabs to the top. | https://github.com/zen-browser/desktop/issues/5069 | None | 4:36:26 |
| New Tab Button (and middle click on tab bar) does not work after opening customize toolbar | https://github.com/zen-browser/desktop/issues/5067 | 0:19:59 | 14:20:45 |
| Expand Sidebar and Side Panel icons are practically identical. | https://github.com/zen-browser/desktop/issues/5066 | 4:54:42 | None |
| Zen displays incorrect background color on some websites, making text unreadable | https://github.com/zen-browser/desktop/issues/5064 | 5:28:34 | None |
| Default keyboard shortcut for close window conflicts with "toggle DOM" | https://github.com/zen-browser/desktop/issues/5063 | None | None |
| Tab bar still scolls to the Top... | https://github.com/zen-browser/desktop/issues/5062 | 0:12:11 | 0:47:47 |
| When current tab is pinned, created new tabs will be added to pinned too | https://github.com/zen-browser/desktop/issues/5061 | 0:31:44 | 1 day, 11:35:52 |
| Opening a new tab does not focus/scroll the tab list on the new tab | https://github.com/zen-browser/desktop/issues/5059 | 1:02:26 | 1:02:26 |
| Maximizing or un-maximizing a window will scroll tab list to the top | https://github.com/zen-browser/desktop/issues/5058 | 13:02:07 | 1 day, 0:10:24 |
| Middle click on empty space doesnt create a new tab | https://github.com/zen-browser/desktop/issues/5057 | 0:09:08 | 0:47:57 |
| UI problems with 1.7.5b | https://github.com/zen-browser/desktop/issues/5056 | 7 days, 2:58:45 | None |
| Can't open a new tab after the update, the new tab button and Ctrl+T only opens the URL bar. | https://github.com/zen-browser/desktop/issues/5055 | 0:07:04 | 1:23:34 |
| "Look and feel" section of keyboard shortcuts missing in Settings | https://github.com/zen-browser/desktop/issues/5054 | None | None |
| F11 default shortcut not suitable for MacOS | https://github.com/zen-browser/desktop/issues/5052 | None | None |
| Duplicate keyboard shortcut items in Settings | https://github.com/zen-browser/desktop/issues/5051 | None | None |
| In compacy mode, on applying a blur intensity from about:config the backdrop doesn't looks correct | https://github.com/zen-browser/desktop/issues/5050 | 2:30:51 | None |
| Icons in context menus don't use --panel-color anymore while text still does | https://github.com/zen-browser/desktop/issues/5049 | None | None |
| Not respecting `prefers-reduced-motion` | https://github.com/zen-browser/desktop/issues/5048 | None | None |
| Middle mouse button problem | https://github.com/zen-browser/desktop/issues/5046 | 0:02:32 | 1:47:05 |
| New tab no longer works | https://github.com/zen-browser/desktop/issues/5045 | 0:23:49 | 1:32:24 |
| New tab opens after browser restart when no unpinned tabs exist, even if zen.urlbar.replace-newtab is true | https://github.com/zen-browser/desktop/issues/5044 | 2:25:05 | 2:25:05 |
| Enabling HDR Causes Visual Artifact on Right Edge of UI Elements | https://github.com/zen-browser/desktop/issues/5042 | 0:24:00 | None |
| Pinned tabs break on browser restart | https://github.com/zen-browser/desktop/issues/5041 | 0:08:52 | 16:50:35 |
| New URL bar thing is so bad IMO + at least give an option to enable or not beforehand! | https://github.com/zen-browser/desktop/issues/5040 | 0:02:06 | 2:45:03 |
| Caret/cursor displays on text of all webpages | https://github.com/zen-browser/desktop/issues/5039 | 0:23:14 | 2:45:29 |
| Browser Navigation Controls Alignment Issue | https://github.com/zen-browser/desktop/issues/5038 | None | None |
| problem with the app's window | https://github.com/zen-browser/desktop/issues/5037 | None | None |
| New url bar not appearing immediatly if shortcuts are turned off | https://github.com/zen-browser/desktop/issues/5036 | 1:19:57 | 5 days, 5:14:08 |
| History broken in sidebar using collapsed toolbar | https://github.com/zen-browser/desktop/issues/5035 | 1:30:43 | None |
| Missing setting to enable tab previews | https://github.com/zen-browser/desktop/issues/5034 | 0:08:00 | 1 day, 13:46:06 |
| Displaced website Zen Glance in new tab | https://github.com/zen-browser/desktop/issues/5033 | 0:14:26 | None |
| Middle click to open new tab is broken | https://github.com/zen-browser/desktop/issues/5032 | 0:55:24 | 4:01:55 |
| Compact mode malfunction | https://github.com/zen-browser/desktop/issues/5031 | 0:01:18 | 1:14:43 |
| Open new tab not working | https://github.com/zen-browser/desktop/issues/5030 | 0:08:48 | 0:08:48 |
| In compact mode, window control button overlaps the search box. | https://github.com/zen-browser/desktop/issues/5029 | None | None |
| Wiered text Rendering in signoz app (self Hosted) | https://github.com/zen-browser/desktop/issues/5028 | None | None |
| Add application Pop-UP covers extensions | https://github.com/zen-browser/desktop/issues/5025 | None | None |
| Passkey in mac | https://github.com/zen-browser/desktop/issues/5024 | 4:35:05 | 5:06:21 |
| Extension menu blank. | https://github.com/zen-browser/desktop/issues/5023 | 1:16:26 | None |
| Essentials tabs are automatically unloaded on browser restart | https://github.com/zen-browser/desktop/issues/5022 | 20 days, 22:33:51 | None |
| Unexpected behaviour with unloaded tabs. | https://github.com/zen-browser/desktop/issues/5021 | None | None |
| Switching to an essential Tab in another workspace makes it appear in current workspace instead | https://github.com/zen-browser/desktop/issues/5020 | 7:45:35 | None |
| Pinned tabs not staying on top | https://github.com/zen-browser/desktop/issues/5015 | 1 day, 18:26:06 | 1 day, 19:42:53 |
| SEC_ERROR_BAD_SIGNATURE only in Zen | https://github.com/zen-browser/desktop/issues/5013 | 14 days, 16:09:47 | None |
| crash upon clicking on a certain anchor tag | https://github.com/zen-browser/desktop/issues/5012 | 1 day, 15:57:50 | None |
| When Essential Tab is Open, Switch Workspaces loses focus Using Separate workspace essential tabs | https://github.com/zen-browser/desktop/issues/5011 | 6:55:45 | 23:07:36 |
| Windows corrupting config on slow PCs | https://github.com/zen-browser/desktop/issues/5010 | None | None |
| Addons icons out of place after signing in | https://github.com/zen-browser/desktop/issues/5008 | None | None |
| Window is sometimes offset on hyprland | https://github.com/zen-browser/desktop/issues/5007 | None | None |
| Browser performance is subpar | https://github.com/zen-browser/desktop/issues/5006 | None | None |
| Tab opening in wrong container if coming from Glance | https://github.com/zen-browser/desktop/issues/5004 | None | None |
| Sidebar compact mode glitch when moving mouse | https://github.com/zen-browser/desktop/issues/5003 | None | 3 days, 22:36:55 |
| Icons not loaded when I open the browser again | https://github.com/zen-browser/desktop/issues/5001 | None | None |
| Hidden Toolbars overlap in the corner when both are visible | https://github.com/zen-browser/desktop/issues/5000 | None | None |
| Glance triggering | https://github.com/zen-browser/desktop/issues/4999 | 7:34:51 | 13 days, 22:44:21 |
| 1.7.5b release missing? | https://github.com/zen-browser/desktop/issues/4996 | 2:17:49 | 1 day, 5:25:04 |
| Multiwindow breaks essentials section | https://github.com/zen-browser/desktop/issues/4995 | None | None |
| Using system theme, the sidebar foreground colour remains white, unreadable | https://github.com/zen-browser/desktop/issues/4994 | 1 day, 5:16:31 | None |
| Can't watch content on Netflix | https://github.com/zen-browser/desktop/issues/4992 | 0:02:08 | 0:02:08 |
| Group Tabs | https://github.com/zen-browser/desktop/issues/4990 | 1:41:08 | 1:41:08 |
| Click and drag tabs opens them | https://github.com/zen-browser/desktop/issues/4989 | 5:43:49 | 20 days, 23:20:40 |
| Add Delay to any popup menus | https://github.com/zen-browser/desktop/issues/4988 | None | 18 days, 21:27:36 |
| Mobile user agent on sidebar is not enough for websites like Twitter (X) | https://github.com/zen-browser/desktop/issues/4984 | None | None |
| Cannot manage containers with multi account containers extension | https://github.com/zen-browser/desktop/issues/4983 | None | None |
| stuck on strange buggy splash window, persists through reinstalls | https://github.com/zen-browser/desktop/issues/4982 | None | None |
| How to disable expand sidebar on hover in compact mode. | https://github.com/zen-browser/desktop/issues/4980 | 2:42:56 | None |
| Menu Bar Items Displayed in Reverse Order | https://github.com/zen-browser/desktop/issues/4978 | None | None |
| Microsoft Outlook 365 New Draft Page Reload Loop | https://github.com/zen-browser/desktop/issues/4977 | 5 days, 13:20:41 | None |
| `gfx.blacklist.dmabuf ` being set to `4` causes screencasting not to work on some DEs/WMs | https://github.com/zen-browser/desktop/issues/4974 | None | None |
| Private windows don't close when last tab is closed | https://github.com/zen-browser/desktop/issues/4973 | 15:38:02 | 6 days, 13:30:01 |
| New tabs on the top of the sidebar | https://github.com/zen-browser/desktop/issues/4972 | 0:05:24 | 0:05:24 |
| Floating sidebar is not kept open when cursor at the left-most position | https://github.com/zen-browser/desktop/issues/4971 | 7:39:18 | None |
| Transparent background on url bar | https://github.com/zen-browser/desktop/issues/4970 | 10:05:02 | 8 days, 7:00:40 |
| Minor Bug with Copy url tooltip | https://github.com/zen-browser/desktop/issues/4967 | 14:22:23 | None |
| The animation when switching tabs with glance is bugged | https://github.com/zen-browser/desktop/issues/4966 | None | None |
| DOH: Zen loose connectivity when network changes | https://github.com/zen-browser/desktop/issues/4965 | None | None |
| Can't open a new tab | https://github.com/zen-browser/desktop/issues/4963 | None | 0:04:31 |
| Closing all non-pinned/essential tabs opens the last pinned tab instead of the most recently used one sometimes loading unloaded tabs. | https://github.com/zen-browser/desktop/issues/4962 | 3 days, 4:34:11 | 6 days, 20:31:22 |
| macOS dmg background bug | https://github.com/zen-browser/desktop/issues/4961 | None | None |
| Issues related to Firefox's Sidebar (Had to click twice to move sidebar positions, wrong margin/padding amount, and shortcut visual issues) | https://github.com/zen-browser/desktop/issues/4960 | None | None |
| Sessions and Accounts are Deleted Upon Closing Zen Browser | https://github.com/zen-browser/desktop/issues/4956 | None | 2:32:39 |
| Pinned tabs are not restored to their pinned URL on close | https://github.com/zen-browser/desktop/issues/4955 | 4:44:29 | 4 days, 14:56:19 |
| Glance does not open automaticallly on pinned tabs | https://github.com/zen-browser/desktop/issues/4954 | 6:25:27 | 6:25:27 |
| Unable to set key combination CMD+`. Also unrecognized when used with Ctrl. | https://github.com/zen-browser/desktop/issues/4953 | 9:59:20 | None |
| No way to minimize PiP | https://github.com/zen-browser/desktop/issues/4952 | 23:22:55 | None |
| Google Classroom loading bar appearing | https://github.com/zen-browser/desktop/issues/4949 | None | 22 days, 5:57:45 |
| inconsistent browser color elements | https://github.com/zen-browser/desktop/issues/4948 | None | None |
| Video call tab follows between workspaces | https://github.com/zen-browser/desktop/issues/4945 | None | None |
| Settings boxes use the Firefox background color | https://github.com/zen-browser/desktop/issues/4943 | None | None |
| Creating new workspace icon issue. | https://github.com/zen-browser/desktop/issues/4942 | None | 0:21:58 |
| Delay in Switching Between Workspaces | https://github.com/zen-browser/desktop/issues/4939 | None | None |
| workspace button position | https://github.com/zen-browser/desktop/issues/4938 | None | None |
| Middle Click (open in new tab) opens in container while right click->in new tab does not. | https://github.com/zen-browser/desktop/issues/4937 | None | None |
| "A copy of Zen is already open. Only one copy of Zen can be open at a time." on MacOS Sequoia 15.3, Zen Browser 1.7.4b | https://github.com/zen-browser/desktop/issues/4936 | None | 5:04:40 |
| weird tab bar scrolling behavior when closing other tabs | https://github.com/zen-browser/desktop/issues/4935 | 2:02:03 | 3 days, 10:11:56 |
| Twilight not updating | https://github.com/zen-browser/desktop/issues/4933 | 1:22:14 | 1:22:14 |
| Print Menu/Screen does not Adjust to Split Tabs | https://github.com/zen-browser/desktop/issues/4932 | None | None |
| Priinting preview loads indefinitely | https://github.com/zen-browser/desktop/issues/4931 | None | 0:01:48 |
| Browser Tabs are leaking through | https://github.com/zen-browser/desktop/issues/4930 | 3 days, 2:53:03 | None |
| YouTube video freezes when I alt tab into CS2 (or any game) | https://github.com/zen-browser/desktop/issues/4929 | None | None |
| Mods do not apply to window decorations | https://github.com/zen-browser/desktop/issues/4927 | None | None |
| Workspace tabs are not visible after jupyter opens | https://github.com/zen-browser/desktop/issues/4925 | None | None |
| Zen is completely broken for me. | https://github.com/zen-browser/desktop/issues/4922 | 1:47:44 | None |
| Cannot edit existing custom search engines or add icons for them | https://github.com/zen-browser/desktop/issues/4921 | 1:50:19 | None |
| Extension support | https://github.com/zen-browser/desktop/issues/4920 | 2:28:52 | 2:28:52 |
| Cannot enable bookmarks toolbar in Single Toolbar Mode on macOS | https://github.com/zen-browser/desktop/issues/4919 | None | None |
| Can't customize the cell with my workspaces | https://github.com/zen-browser/desktop/issues/4918 | 3:50:48 | 3:50:48 |
| Menu Bar is missing in linux | https://github.com/zen-browser/desktop/issues/4916 | None | 6:17:43 |
| Muted tabs icon not showing | https://github.com/zen-browser/desktop/issues/4915 | 3 days, 20:24:40 | 3 days, 20:30:56 |
| Making PiP smaller hides things like the video slider to disappear | https://github.com/zen-browser/desktop/issues/4914 | 0:48:19 | 7:07:17 |
| Change workspace, browser broke and only shows zen logo | https://github.com/zen-browser/desktop/issues/4913 | 0:59:41 | None |
| Mouse over floating sidebar prevents hide | https://github.com/zen-browser/desktop/issues/4911 | None | None |
| Crash when opening some sites (for example, fastapi docs) | https://github.com/zen-browser/desktop/issues/4910 | None | None |
| New window opens wrong (non-default) workspace | https://github.com/zen-browser/desktop/issues/4908 | None | None |
| Help and Feedback links in About window lead to Mozilla Firefox | https://github.com/zen-browser/desktop/issues/4907 | None | None |
| Double klicking on sidebar does not open new tab | https://github.com/zen-browser/desktop/issues/4905 | 1:56:14 | 12:29:01 |
| PDF Fonts | https://github.com/zen-browser/desktop/issues/4904 | None | 12:43:22 |
| I can't customize which toolbars hide in compact mode | https://github.com/zen-browser/desktop/issues/4903 | 1:21:22 | 13:59:27 |
| When changing the behavior of the opening tab at the top, when opening several bookmarks, they open in reverse. | https://github.com/zen-browser/desktop/issues/4902 | 4 days, 2:21:01 | None |
| flatpak 2 versions of zen preventing config from being synced | https://github.com/zen-browser/desktop/issues/4901 | None | None |
| Closing tab will scroll to the top if you use Ctrl + W [Twilight] | https://github.com/zen-browser/desktop/issues/4900 | 2:54:44 | 2 days, 11:04:13 |
| Closing the single opened tab opens the last pinned tab | https://github.com/zen-browser/desktop/issues/4899 | 8 days, 16:27:00 | 8 days, 16:27:00 |
| SSL error "SEC_ERROR_UNKNOWN_ISSUER" | https://github.com/zen-browser/desktop/issues/4898 | 16:53:00 | None |
| Broken Behavior of Pinned/Essential Tabs when Multiple Windows | https://github.com/zen-browser/desktop/issues/4895 | 11:30:03 | None |
| Can't see the logo of zen in task switcher in fedora 40 | https://github.com/zen-browser/desktop/issues/4894 | None | None |
| Extension icons floating over pages | https://github.com/zen-browser/desktop/issues/4893 | 1 day, 12:19:24 | None |
| Essential tabs not remaining focused with container-specific essentials | https://github.com/zen-browser/desktop/issues/4892 | None | 3 days, 0:03:40 |
| Zen is freezing randomly? | https://github.com/zen-browser/desktop/issues/4891 | 15:59:08 | None |
| Notion related extensions don't recognize login | https://github.com/zen-browser/desktop/issues/4890 | 3:09:23 | 15:40:45 |
| Tabs not closing and randomly appearing and disappearing | https://github.com/zen-browser/desktop/issues/4889 | None | 3 days, 4:11:43 |
| Tab switcher falsely considers mouse position on open | https://github.com/zen-browser/desktop/issues/4888 | 4:53:18 | 9:01:48 |
| Tab scroll bar is cannot be dragged | https://github.com/zen-browser/desktop/issues/4886 | None | None |
| Themes don't work when opening zen browser | https://github.com/zen-browser/desktop/issues/4884 | 0:18:13 | 0:29:18 |
| Essential Tabs Cannot Be Closed & Require Re-Adding | https://github.com/zen-browser/desktop/issues/4883 | 1:39:20 | 7 days, 23:42:34 |
| Critical Bug System Freeze When Uploading Files | https://github.com/zen-browser/desktop/issues/4882 | 9 days, 17:53:15 | None |
| Adding a new Gmail account causes the browser to stop responding | https://github.com/zen-browser/desktop/issues/4880 | None | None |
| Installing or Uninstalling a Zen Mod causes all Zen Mods to break !! | https://github.com/zen-browser/desktop/issues/4879 | 3:16:47 | None |
| Presence of Widevine plugin implies support, causing confusion | https://github.com/zen-browser/desktop/issues/4875 | 1:27:46 | 1:27:45 |
| Compact mode top toolbar with always show bookmarks enabled hides the toolbar when moving mouse across different bookmarks | https://github.com/zen-browser/desktop/issues/4874 | None | None |
| Globe favicon misaligned, and other alignment issues with pinned/unpinned tabs | https://github.com/zen-browser/desktop/issues/4873 | None | 5 days, 1:25:52 |
| Ctrl-Shift-C bound to 2 commands | https://github.com/zen-browser/desktop/issues/4872 | 7:55:15 | None |
| Setting a default container for the tab does not switch the workspace | https://github.com/zen-browser/desktop/issues/4870 | 3 days, 22:51:37 | 4 days, 15:04:11 |
| Issue with new tab button | https://github.com/zen-browser/desktop/issues/4869 | 1:48:12 | 3 days, 12:58:02 |
| Tab with glance open cannot be correctly rearranged in pinned tabs or essential tabs and leads to major issues | https://github.com/zen-browser/desktop/issues/4868 | 8 days, 18:37:48 | 19 days, 21:47:16 |
| Keyboard shortcut for duplicating the current tab | https://github.com/zen-browser/desktop/issues/4867 | 0:47:32 | 7 days, 20:56:12 |
| Double Clicking to open new tab is incostistance | https://github.com/zen-browser/desktop/issues/4865 | 1 day, 9:22:37 | None |
| zen.theme.border-radius dosen't work | https://github.com/zen-browser/desktop/issues/4864 | 6 days, 1:59:16 | None |
| Hitting ESC in the floating URL bar, does not return focus back to the page, but focuses the URL bar in the sidebar | https://github.com/zen-browser/desktop/issues/4861 | 5 days, 10:25:26 | None |
| German dictonary added but not available | https://github.com/zen-browser/desktop/issues/4860 | None | None |
| Sidebar automatically pops up when PopClip is called up by the macOS | https://github.com/zen-browser/desktop/issues/4859 | None | None |
| Search shortcut for using the GitHub search engine doesn't show up in the address bar | https://github.com/zen-browser/desktop/issues/4858 | 0:05:11 | 21:55:59 |
| Confirm before closing multiple tabs setting not working | https://github.com/zen-browser/desktop/issues/4857 | 21:43:21 | None |
| Automatically open all the bookmarks when startup | https://github.com/zen-browser/desktop/issues/4856 | 7 days, 8:56:58 | 7 days, 8:56:58 |
| Toolbar sizing in compact mode | https://github.com/zen-browser/desktop/issues/4855 | 0:15:21 | None |
| Font not rendering correctly on macos | https://github.com/zen-browser/desktop/issues/4854 | None | None |
| Glance UI just looks rough... [Twilight] | https://github.com/zen-browser/desktop/issues/4853 | 5:14:03 | 12:37:01 |
| Flickering when closing Glance | https://github.com/zen-browser/desktop/issues/4850 | None | None |
| tab settings change when zen browser updates | https://github.com/zen-browser/desktop/issues/4849 | 1:04:05 | 16:30:14 |
| Hardware Acceleration Causing System Crashing | https://github.com/zen-browser/desktop/issues/4848 | None | None |
| Toggle Floating Toolbar shortcut does not work after entering fullscreen mode on MacOS | https://github.com/zen-browser/desktop/issues/4847 | None | None |
| MacOS chugging after latest update | https://github.com/zen-browser/desktop/issues/4846 | None | None |
| Bitwarden extension dialogue disappears | https://github.com/zen-browser/desktop/issues/4845 | None | None |
| `+ New Tab` Moved to the Top of the List | https://github.com/zen-browser/desktop/issues/4844 | 2:29:29 | 7:50:27 |
| userChrome.css does not load | https://github.com/zen-browser/desktop/issues/4843 | None | 0:17:38 |
| Re: Moving the sidebar to the right brings back the Top Bar | https://github.com/zen-browser/desktop/issues/4841 | None | None |
| Closing a tab causes the tab bar to scroll to the top automatically. | https://github.com/zen-browser/desktop/issues/4840 | 2:18:32 | 6 days, 23:53:13 |
| Pinned extension icons move inside a web page sometimes | https://github.com/zen-browser/desktop/issues/4839 | None | None |
| Unable to Import Bookmarks from Brave Browser (Installed via Flathub) | https://github.com/zen-browser/desktop/issues/4838 | None | None |
| Extension icon on top of settings icon when you split the windows | https://github.com/zen-browser/desktop/issues/4836 | None | None |
| Crunchyroll video not loading | https://github.com/zen-browser/desktop/issues/4835 | 5:44:42 | 5:52:00 |
| The whole screen goes black and inaccessible after adding a profile | https://github.com/zen-browser/desktop/issues/4832 | None | None |
| theme colors interfere | https://github.com/zen-browser/desktop/issues/4831 | None | None |
| Moving `Bookmark toolbar items` to sidebar && Closing and reopening `Customize toolbar…` expands bookmarks in `Customize toolbar…` | https://github.com/zen-browser/desktop/issues/4830 | None | None |
| Automatic Glance animates opening incorrectly | https://github.com/zen-browser/desktop/issues/4829 | None | None |
| Essentials are scrolling isntead of displaying all | https://github.com/zen-browser/desktop/issues/4828 | None | 6 days, 18:47:18 |
| Updating from 1.7.2b to 1.7.4b made side web panels unusable | https://github.com/zen-browser/desktop/issues/4827 | None | None |
| Zen Browser Skipping Redirects | https://github.com/zen-browser/desktop/issues/4826 | None | None |
| Add addon window postitioning problem | https://github.com/zen-browser/desktop/issues/4825 | None | None |
| Sidebar not fully collapsing in compact mode | https://github.com/zen-browser/desktop/issues/4824 | 0:13:32 | 0:43:34 |
| Scrolling feel is not smooth | https://github.com/zen-browser/desktop/issues/4823 | 16 days, 23:04:06 | 17 days, 0:15:30 |
| Closing a tab scrolls to the top of the sidebar | https://github.com/zen-browser/desktop/issues/4822 | None | 0:03:28 |
| Unexpected vertical tab bar visibility occurs when switching, creating new tabs or using the URL prompt shortcut | https://github.com/zen-browser/desktop/issues/4820 | 1:46:31 | None |
| 1Password Classic (v4-v6) Extension doesn't work | https://github.com/zen-browser/desktop/issues/4819 | 3 days, 5:27:45 | 3:00:31 |
| Workspace Pins Dispear'ed due to new windows. ?? | https://github.com/zen-browser/desktop/issues/4817 | None | None |
| Restore previous session is broken | https://github.com/zen-browser/desktop/issues/4815 | 1 day, 2:31:07 | None |
| Keyboard navigation is tricky on the initial Welcome screens | https://github.com/zen-browser/desktop/issues/4813 | 21:38:17 | None |
| Setting a website to a container does not switch to that workspace | https://github.com/zen-browser/desktop/issues/4812 | None | None |
| JWPlayer doesn't play some audio tracks | https://github.com/zen-browser/desktop/issues/4809 | None | None |
| Google Drive Text Corruption | https://github.com/zen-browser/desktop/issues/4808 | 0:02:00 | 3 days, 1:28:57 |
| Context menu is clipping through window border | https://github.com/zen-browser/desktop/issues/4807 | None | None |
| Problem with PDF encoding - Cyrillic alphabet | https://github.com/zen-browser/desktop/issues/4806 | 0:53:07 | None |
| Closing tab scrolls to the top of the tabs' list | https://github.com/zen-browser/desktop/issues/4804 | 13:04:51 | 15:41:20 |
| Can't drag items to other tabs in compact mode | https://github.com/zen-browser/desktop/issues/4803 | 6:51:21 | None |
_This report was generated with the [Issue Metrics Action](https://github.com/github/issue-metrics)_
Search query used to find these items: `repo:zen-browser/desktop is:issue created:2025-02-01..2025-02-28`

View File

@@ -1 +0,0 @@
8d18d852fbaeaa05c6ec3ebd9b35312f2c58021f

2
l10n

Submodule l10n updated: 92e05a383d...1a15769b8d

14
package-lock.json generated
View File

@@ -9,7 +9,7 @@
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"@zen-browser/surfer": "^1.9.19"
"@zen-browser/surfer": "^1.9.20"
},
"devDependencies": {
"husky": "^9.1.7",
@@ -270,9 +270,9 @@
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
},
"node_modules/@zen-browser/surfer": {
"version": "1.9.19",
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.9.19.tgz",
"integrity": "sha512-EFZC1ZgU/vFU5AUFxjGxkXbekSbqFS5r1jV8s55QJa+ieU2ZdgFr7OO8wTQ/jyN0we+QK1ILdFCEpdGLBOpRmw==",
"version": "1.9.20",
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.9.20.tgz",
"integrity": "sha512-/ZV0+UMg/ZpiyLCtNrIrsU8MELTFinQNRz83lOflImygiRo9eNdv4SqWwuSSTMxBqUzwa3xGiw9dCUYq/QFK5g==",
"dependencies": {
"@resvg/resvg-js": "^1.4.0",
"async-icns": "^1.0.2",
@@ -2810,9 +2810,9 @@
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
},
"@zen-browser/surfer": {
"version": "1.9.19",
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.9.19.tgz",
"integrity": "sha512-EFZC1ZgU/vFU5AUFxjGxkXbekSbqFS5r1jV8s55QJa+ieU2ZdgFr7OO8wTQ/jyN0we+QK1ILdFCEpdGLBOpRmw==",
"version": "1.9.20",
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.9.20.tgz",
"integrity": "sha512-/ZV0+UMg/ZpiyLCtNrIrsU8MELTFinQNRz83lOflImygiRo9eNdv4SqWwuSSTMxBqUzwa3xGiw9dCUYq/QFK5g==",
"requires": {
"@resvg/resvg-js": "^1.4.0",
"async-icns": "^1.0.2",

View File

@@ -13,7 +13,7 @@
"export": "surfer export",
"init": "npm run download && npm run bootstrap && npm run import",
"download": "surfer download",
"bootstrap": "surfer bootstrap && surfer bootstrap",
"bootstrap": "surfer bootstrap",
"package": "surfer package",
"update-ff": "python3 scripts/update_ff.py",
"update-ff:raw": "surfer update",
@@ -41,7 +41,7 @@
},
"homepage": "https://github.com/zen-browser/core#readme",
"dependencies": {
"@zen-browser/surfer": "^1.9.19"
"@zen-browser/surfer": "^1.9.20"
},
"devDependencies": {
"husky": "^9.1.7",

1916
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -60,7 +60,7 @@ def update_readme(last_version, new_version, is_rc=False):
def update_l10n_last_commit_hash():
L10N_REPO = "https://github.com/mozilla-l10n/firefox-l10n"
try:
os.system(f"git clone {L10N_REPO} l10n-temp")
os.system(f"git clone {L10N_REPO} l10n-temp --depth 1")
if not os.path.exists("firefox-cache"):
os.mkdir("firefox-cache")
os.system("cat l10n-temp/.git/refs/heads/main > firefox-cache/l10n-last-commit-hash")

13
src/Cargo-lock.patch Normal file
View File

@@ -0,0 +1,13 @@
diff --git a/Cargo.lock b/Cargo.lock
index da2fbe8c40fa40a86c350f8adb33e26915fecc7b..e5a571fc41cd4fa8d2cdffdc15f9ad083e6d36fb 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3912,8 +3912,6 @@ dependencies = [
[[package]]
name = "mime_guess"
version = "2.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
dependencies = [
"mime",
"unicase",

14
src/Cargo-toml.patch Normal file
View File

@@ -0,0 +1,14 @@
diff --git a/Cargo.toml b/Cargo.toml
index 19a470608b7de28a946353d4c09a56b4dd3fd69a..37e9687c86b5725ee5d5071b632b5927ffb6bd27 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -201,6 +201,9 @@ rure = { path = "third_party/rust/rure" }
# Patch `plist` to work with `indexmap` 2.*
plist = { path = "third_party/rust/plist" }
+# Patch mime_guess to add missing mime types
+mime_guess = { path = "third_party/rust/mime_guess" }
+
# To-be-published changes.
unicode-bidi = { git = "https://github.com/servo/unicode-bidi", rev = "ca612daf1c08c53abe07327cb3e6ef6e0a760f0c" }
nss-gk-api = { git = "https://github.com/beurdouche/nss-gk-api", rev = "e48a946811ffd64abc78de3ee284957d8d1c0d63" }

View File

@@ -81,7 +81,7 @@ pref('zen.tabs.vertical', true);
pref('zen.tabs.vertical.right-side', false);
pref('zen.tabs.rename-tabs', true);
pref('zen.theme.accent-color', "#ffb787");
pref('zen.theme.content-element-separation', 6); // In pixels
pref('zen.theme.content-element-separation', 8); // In pixels
pref('zen.theme.gradient', true);
pref('zen.theme.gradient.show-custom-colors', false);
pref('zen.theme.essentials-favicon-bg', true);
@@ -120,6 +120,8 @@ pref('zen.view.compact.show-sidebar-and-toolbar-on-hover', true);
pref('zen.urlbar.replace-newtab', true);
pref('zen.urlbar.behavior', 'floating-on-type'); // default, floating-on-type, float
pref('zen.urlbar.wait-to-clear', 45000); // in ms (default 45s)
pref('zen.urlbar.show-domain-only-in-sidebar', true);
pref('zen.urlbar.hide-one-offs', true);
#ifdef XP_MACOSX
// Disable for macos in the meantime until @HarryHeres finds a solution for hight DPI screens
@@ -176,7 +178,7 @@ pref('zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url', false);
pref('zen.pinned-tab-manager.close-shortcut-behavior', 'reset-unload-switch');
// TODO: Check this out!
pref("browser.profiles.enabled", false);
pref("browser.profiles.enabled", true);
// Zen webpanels (calling it sidebar due to legacy reasons)
pref('zen.sidebar.data', "{\"data\":\n {\"p1\":{\n \"url\":\"https://www.wikipedia.org/\"\n },\n\"p2\":{\n \"url\":\"https://m.twitter.com/\",\n\"ua\": true\n },\n\"p3\": {\n \"url\": \"https://www.youtube.com/\",\n\"ua\": true\n},\n\"p4\": {\n \"url\": \"https://translate.google.com/\",\n\"ua\": true\n},\n\"p5\": {\n \"url\": \"https://todoist.com/\",\n\"ua\": true\n}},\n\"index\":[\"p1\",\"p2\",\"p3\",\"p4\",\"p5\"]}");
@@ -196,7 +198,6 @@ pref('zen.startup.smooth-scroll-in-tabs', true);
pref('zen.workspaces.disabled_for_testing', false);
pref('zen.workspaces.hide-deactivated-workspaces', false);
pref('zen.workspaces.hide-default-container-indicator', true);
pref('zen.workspaces.individual-pinned-tabs', true);
pref('zen.workspaces.show-icon-strip', true);
pref('zen.workspaces.force-container-workspace', false);
pref('zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed', false);
@@ -370,6 +371,14 @@ pref('browser.download.autohideButton', false);
// Enable transparent background for macos
#ifdef XP_MACOSX
pref('widget.macos.titlebar-blend-mode.behind-window', true);
// 1. hudWindow
// 2. fullScreenUI
// 3. popover
// 4. menu
// 5. toolTip
// 6. headerView
// 7. underlay
pref('zen.widget.macos.window-material', 3);
#endif
// Urlbar and autocomplete

View File

@@ -41,7 +41,9 @@
} catch (e) {
console.error('ZenThemeModifier: Error initializing browser layout', e);
}
this.closeWatermark();
ZenWorkspaces.promiseInitialized.then(() => {
this.closeWatermark();
});
},
openWatermark() {

View File

@@ -9,6 +9,7 @@ var gZenUIManager = {
XPCOMUtils.defineLazyPreferenceGetter(this, 'sidebarHeightThrottle', 'zen.view.sidebar-height-throttle', 500);
XPCOMUtils.defineLazyPreferenceGetter(this, 'contentElementSeparation', 'zen.theme.content-element-separation', 0);
XPCOMUtils.defineLazyPreferenceGetter(this, 'urlbarWaitToClear', 'zen.urlbar.wait-to-clear', 0);
XPCOMUtils.defineLazyPreferenceGetter(this, 'urlbarShowDomainOnly', 'zen.urlbar.show-domain-only-in-sidebar', true);
gURLBar._zenTrimURL = this.urlbarTrim.bind(this);
@@ -61,6 +62,7 @@ var gZenUIManager = {
}
tabs.style.removeProperty('flex');
tabs.style.maxHeight = height + 'px';
gZenVerticalTabsManager.actualWindowButtons.removeAttribute('zen-has-hover');
},
get tabsWrapper() {
@@ -218,9 +220,9 @@ var gZenUIManager = {
},
urlbarTrim(aURL) {
if (gZenVerticalTabsManager._hasSetSingleToolbar) {
if (gZenVerticalTabsManager._hasSetSingleToolbar && this.urlbarShowDomainOnly) {
let url = BrowserUIUtils.removeSingleTrailingSlashFromURL(aURL);
return url.startsWith('http://') || url.startsWith('https://') ? url.split('/')[2] : url;
return url.startsWith('https://') ? url.split('/')[2] : url;
}
return BrowserUIUtils.trimURL(aURL);
},
@@ -483,9 +485,11 @@ var gZenVerticalTabsManager = {
if (isSidebarExpanded) {
this.navigatorToolbox.setAttribute('zen-sidebar-expanded', 'true');
document.documentElement.setAttribute('zen-sidebar-expanded', 'true');
gBrowser.tabContainer.setAttribute('expanded', 'true');
} else {
this.navigatorToolbox.removeAttribute('zen-sidebar-expanded');
document.documentElement.removeAttribute('zen-sidebar-expanded');
gBrowser.tabContainer.removeAttribute('expanded');
}
const appContentNavbarContaienr = document.getElementById('zen-appcontent-navbar-container');

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/aboutDialog.xhtml b/browser/base/content/aboutDialog.xhtml
index 1e5c0f1c59175ec4a39938974c4a7a5c6355439f..ac9fe4b792c12a1aecba1fbbc941da9be6a53ce4 100644
index 53e4616a99b7826453d5b6dea027184d90bc73f7..90c9fe5683411cf3087bebd3d0941decf6d23e89 100644
--- a/browser/base/content/aboutDialog.xhtml
+++ b/browser/base/content/aboutDialog.xhtml
@@ -36,6 +36,7 @@
@@ -34,6 +34,7 @@
<html:link rel="localization" href="branding/brand.ftl"/>
<html:link rel="localization" href="browser/aboutDialog.ftl"/>
@@ -10,7 +10,7 @@ index 1e5c0f1c59175ec4a39938974c4a7a5c6355439f..ac9fe4b792c12a1aecba1fbbc941da9b
</linkset>
<html:div id="aboutDialogContainer">
@@ -130,13 +131,15 @@
@@ -124,21 +125,23 @@
</description>
</vbox>
<description class="text-blurb" id="communityDesc" data-l10n-id="community-2">
@@ -27,11 +27,12 @@ index 1e5c0f1c59175ec4a39938974c4a7a5c6355439f..ac9fe4b792c12a1aecba1fbbc941da9b
</vbox>
</vbox>
</hbox>
@@ -144,7 +147,7 @@
<vbox id="bottomBox">
<hbox pack="center">
<label is="text-link" class="bottom-link" useoriginprincipal="true" href="about:license" data-l10n-id="bottomLinks-license"/>
<label is="text-link" class="bottom-link" useoriginprincipal="true" href="about:rights" data-l10n-id="bottomLinks-rights"/>
- <label is="text-link" class="bottom-link" href="https://www.mozilla.org/privacy/?utm_source=firefox-browser&#38;utm_medium=firefox-desktop&#38;utm_campaign=about-dialog" data-l10n-id="bottomLinks-privacy"/>
- <label is="text-link" class="bottom-link" href="https://www.mozilla.org/about/legal/terms/firefox/" data-l10n-id="bottomLinks-rights"/>
- <label is="text-link" class="bottom-link" href="https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&#38;utm_medium=firefox-desktop&#38;utm_campaign=about-dialog" data-l10n-id="bottomLinks-privacy"/>
+ <label is="text-link" class="bottom-link" href="about:rights" data-l10n-id="bottomLinks-rights"/>
+ <label is="text-link" class="bottom-link" href="https://www.zen-browser.app/privacy-policy/" data-l10n-id="bottomLinks-privacy"/>
</hbox>
<description id="trademark" data-l10n-id="trademarkInfo"></description>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index 891c067d6ad718061c410c04743bed25744504b5..135c8515bbcb534c3f900e7ba1ee4d3b9fe17436 100644
index 68849f5093cd8ab99ab0747d972799eaf3ad7e22..3b4e6a179ab7b71859f832709778c326a39cffda 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -25,6 +25,7 @@
@@ -26,6 +26,7 @@
sizemode="normal"
retargetdocumentfocus="urlbar-input"
scrolling="false"
@@ -10,7 +10,7 @@ index 891c067d6ad718061c410c04743bed25744504b5..135c8515bbcb534c3f900e7ba1ee4d3b
persist="screenX screenY width height sizemode"
data-l10n-sync="true">
<head>
@@ -99,6 +100,8 @@
@@ -100,6 +101,8 @@
<title data-l10n-id="browser-main-window-default-title"></title>
@@ -19,15 +19,15 @@ index 891c067d6ad718061c410c04743bed25744504b5..135c8515bbcb534c3f900e7ba1ee4d3b
# All JS files which are needed by browser.xhtml and other top level windows to
# support MacOS specific features *must* go into the global-scripts.inc file so
# that they can be shared with macWindow.inc.xhtml.
@@ -143,6 +146,7 @@
window.addEventListener("DOMContentLoaded",
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
@@ -169,6 +172,7 @@
});
});
</script>
+#include zen-assets.inc.xhtml
</head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
# All sets except for popupsets (commands, keys, and stringbundles)
@@ -164,9 +168,13 @@
@@ -190,9 +194,13 @@
</vbox>
</html:template>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
index e5f3424eaeeec0ba552537f167dd99e912216d94..4bdfcdb23fe9c44ad3d4de273c64f4cc31cb4034 100644
index 959c523b21c642f29353b9de37b3ce6b5505b01b..4cd26ea85ad4905bade71dcd470b8678079787bd 100644
--- a/browser/base/content/main-popupset.inc.xhtml
+++ b/browser/base/content/main-popupset.inc.xhtml
@@ -181,6 +181,10 @@
@@ -206,6 +206,10 @@
hidden="true"
tabspecific="true"
aria-labelledby="editBookmarkPanelTitle">
@@ -13,7 +13,7 @@ index e5f3424eaeeec0ba552537f167dd99e912216d94..4bdfcdb23fe9c44ad3d4de273c64f4cc
<box class="panel-header">
<html:h1>
<html:span id="editBookmarkPanelTitle"/>
@@ -206,6 +210,7 @@
@@ -231,6 +235,7 @@
class="footer-button"/>
</html:moz-button-group>
</vbox>
@@ -21,7 +21,21 @@ index e5f3424eaeeec0ba552537f167dd99e912216d94..4bdfcdb23fe9c44ad3d4de273c64f4cc
</panel>
</html:template>
@@ -535,6 +540,8 @@
@@ -426,11 +431,13 @@
observes="cmd_CustomizeToolbars"
class="viewCustomizeToolbar"
data-lazy-l10n-id="toolbar-context-menu-view-customize-toolbar-2"/>
+#if 0
<menuseparator id="sidebarRevampSeparator"/>
<menuitem id="toolbar-context-toggle-vertical-tabs"
data-lazy-l10n-id="toolbar-context-turn-on-vertical-tabs"/>
<menuitem id="toolbar-context-customize-sidebar"
data-lazy-l10n-id="toolbar-context-customize-sidebar"/>
+#endif
<menuseparator contexttype="fullscreen"/>
<menuitem id="toolbar-context-full-screen-autohide"
class="fullscreen-context-autohide"
@@ -565,6 +572,8 @@
#include popup-notifications.inc.xhtml

View File

@@ -17,6 +17,7 @@
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-urlbar.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-workspaces.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-decks.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-folders.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-glance.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-sidebar-panels.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-popup.css" />
@@ -28,6 +29,7 @@
</linkset>
# Scripts used all over the browser
<script src="chrome://browser/content/zen-components/ZenFolders.mjs" />
<script src="chrome://browser/content/zen-components/ZenThemesCommon.mjs" />
<script src="chrome://browser/content/zen-components/ZenThemesImporter.mjs" />
<script src="chrome://browser/content/zen-components/ZenCompactMode.mjs" />

View File

@@ -20,6 +20,7 @@
content/browser/zen-components/ZenCommonUtils.mjs (zen-components/ZenCommonUtils.mjs)
content/browser/zen-components/ZenGradientGenerator.mjs (zen-components/ZenGradientGenerator.mjs)
content/browser/zen-components/ZenGlanceManager.mjs (zen-components/ZenGlanceManager.mjs)
content/browser/zen-components/ZenFolders.mjs (zen-components/ZenFolders.mjs)
content/browser/zen-components/ZenActorsManager.mjs (zen-components/ZenActorsManager.mjs)
content/browser/zen-components/ZenRices.mjs (zen-components/ZenRices.mjs)
content/browser/zen-components/ZenEmojies.mjs (zen-components/ZenEmojies.mjs)
@@ -37,6 +38,7 @@
content/browser/zen-styles/zen-sidebar.css (content/zen-styles/zen-sidebar.css)
content/browser/zen-styles/zen-toolbar.css (content/zen-styles/zen-toolbar.css)
content/browser/zen-styles/zen-decks.css (content/zen-styles/zen-decks.css)
content/browser/zen-styles/zen-folders.css (content/zen-styles/zen-folders.css)
content/browser/zen-styles/zen-glance.css (content/zen-styles/zen-glance.css)
content/browser/zen-styles/zen-browser-container.css (content/zen-styles/zen-browser-container.css)
content/browser/zen-styles/zen-workspaces.css (content/zen-styles/zen-workspaces.css)

View File

@@ -10,7 +10,7 @@
</hbox>
<hbox>
<toolbarbutton id="zen-sidebar-web-panel-home" class="toolbarbutton-1 chromeclass-toolbar-additional" oncommand="gZenBrowserManagerSidebar.home();"/>
<toolbarbutton id="zen-sidebar-web-panel-pinned" class="toolbarbutton-1 chromeclass-toolbar-additional" oncommand="gZenBrowserManagerSidebar.togglePinned(this);"/>
<toolbarbutton id="zen-sidebar-web-panel-pinned" class="toolbarbutton-1 chromeclass-toolbar-additional" pinned="true" oncommand="gZenBrowserManagerSidebar.togglePinned(this);"/>
<toolbarbutton id="zen-sidebar-web-panel-close" class="toolbarbutton-1 chromeclass-toolbar-additional" oncommand="gZenBrowserManagerSidebar.close();"/>
</hbox>
</toolbar>

View File

@@ -85,18 +85,6 @@
}
}
@keyframes zen-deck-fadeIn {
0% {
transform: scale(0.9);
opacity: 0;
}
100% {
transform: scale(1);
opacity: 1;
}
}
@keyframes better-sidebar-pinned-hide {
0% {
opacity: 1;

View File

@@ -38,6 +38,9 @@
--zen-toolbox-max-width: 64px !important;
--zen-compact-float: var(--zen-element-separation);
/* Initial padding for when we are animating */
padding: 0 0 0 var(--zen-toolbox-padding) !important;
&:not([animate='true']) {
position: absolute;
z-index: 10;
@@ -51,7 +54,12 @@
opacity: 0;
:root[zen-single-toolbar='true'] & {
top: var(--zen-element-separation);
top: calc(var(--zen-element-separation) / 2);
height: calc(100% - var(--zen-element-separation));
}
& #zen-sidebar-top-buttons {
margin: 0 0 calc(var(--zen-toolbox-padding) / 2) 0;
}
}
@@ -61,7 +69,7 @@
}
&:not([zen-right-side='true']) #navigator-toolbox {
left: calc(-1 * var(--zen-sidebar-width) + 1px);
left: calc(-1 * var(--actual-zen-sidebar-width) + 1px);
}
/* When we have multiple toolbars and the top-toolbar is NOT being hidden,
@@ -78,7 +86,7 @@
--zen-compact-float: calc(var(--zen-element-separation) + 1px);
&:not([animate='true']) {
right: calc(-1 * var(--zen-sidebar-width) + 1px);
right: calc(-1 * var(--actual-zen-sidebar-width) + 1px);
}
}
@@ -90,11 +98,21 @@
#navigator-toolbox:not([animate='true']) #titlebar {
box-shadow: var(--zen-big-shadow);
border-radius: var(--zen-native-inner-radius);
border-radius: calc(var(--zen-native-inner-radius) + var(--zen-element-separation) / 4);
padding: var(--zen-toolbox-padding) !important;
position: relative;
background: var(--zen-dialog-background);
border: 1px solid var(--zen-colors-border-contrast);
/* times 4 because we have the inner padding and the outter padding to consider */
:root[zen-sidebar-expanded='true'] & {
&[has-animated-padding='true'] {
width: calc(var(--zen-sidebar-width) + var(--zen-toolbox-padding));
}
&:not([has-animated-padding='true']) {
width: calc(var(--zen-sidebar-width) - var(--zen-toolbox-padding));
}
}
:root[zen-single-toolbar='true'] {
padding-top: 0 !important;
@@ -112,6 +130,7 @@
& #urlbar[open][zen-floating-urlbar='true'] {
transition: left 0.05s ease;
visibility: visible;
#navigator-toolbox:has(&) {
opacity: 1;
@@ -133,17 +152,18 @@
}
}
#navigator-toolbox[zen-has-hover],
#navigator-toolbox[zen-has-hover]:not(:has(#urlbar[zen-floating-urlbar='true']:hover)),
#navigator-toolbox[zen-user-show],
#navigator-toolbox[zen-has-empty-tab],
#navigator-toolbox[flash-popup],
#navigator-toolbox[has-popup-menu],
#navigator-toolbox[movingtab],
#navigator-toolbox:has(.tabbrowser-tab:active),
&[zen-renaming-tab='true'] #navigator-toolbox,
#navigator-toolbox:has(
*:is([panelopen='true'], [open='true'], #urlbar:not([zen-floating-urlbar='true']):focus-within):not(tab):not(.zen-compact-mode-ignore)
*:is([panelopen='true'], [open='true'], #urlbar:focus-within):not(#urlbar[zen-floating-urlbar='true']):not(tab):not(.zen-compact-mode-ignore)
) {
&:not([animate='true']):not(:has(#urlbar[zen-floating-urlbar='true']:hover)) {
&:not([animate='true']) {
--zen-compact-mode-func: linear(
0 0%,
0.002748 1%,
@@ -248,14 +268,14 @@
1.003423 100%
);
transition:
left 0.3s var(--zen-compact-mode-func),
right 0.3s var(--zen-compact-mode-func);
left 0.25s var(--zen-compact-mode-func),
right 0.25s var(--zen-compact-mode-func);
opacity: 1;
&:not([supress-primary-adjustment='true']) {
left: -1px;
left: calc(var(--zen-element-separation) / -2);
:root[zen-right-side='true'] & {
right: -1px;
right: calc(var(--zen-element-separation) / -2);
left: auto;
}
}
@@ -311,6 +331,10 @@
position: relative !important;
}
& #urlbar {
opacity: 0;
}
@media (-moz-bool-pref: 'zen.view.compact.color-toolbar') {
background-attachment: fixed;
background: var(--zen-main-browser-background-toolbar);
@@ -344,6 +368,15 @@
opacity: var(--zen-grainy-background-opacity, 0);
mix-blend-mode: overlay;
}
& #urlbar {
opacity: 1;
}
& #urlbar[breakout-extend='true']:not([zen-floating-urlbar='true']) {
top: 2px !important;
opacity: 1;
}
}
}
}

View File

@@ -17,7 +17,7 @@
margin: 0;
}
#zen-splitview-dropzone {
border-radius: var(--zen-webview-border-radius, var(--zen-border-radius));
border-radius: var(--zen-native-inner-radius);
transition: inset ease-out 0.08s;
display: none;
background-color: color-mix(in srgb, var(--zen-colors-secondary) 30%, transparent 70%);
@@ -29,17 +29,13 @@
#tabbrowser-tabpanels[zen-split-view='true'] > [zen-split='true'],
#zen-splitview-dropzone {
flex: 1;
margin: var(--zen-split-column-gap) calc(var(--zen-split-row-gap) + 1px) !important;
margin: var(--zen-split-column-gap) var(--zen-split-row-gap) !important;
margin-bottom: 0 !important;
margin-left: 0 !important;
position: absolute !important;
overflow: hidden;
}
#tabbrowser-tabpanels[zen-split-view='true'] > [zen-split-anim='true'] {
animation: zen-deck-fadeIn 0.2s forwards ease-in-out;
}
#tabbrowser-tabpanels[zen-split-view='true']:not([zen-split-resizing]) > [zen-split-anim='true'] {
transition: inset 0.09s ease-out !important;
& browser {
@@ -48,12 +44,11 @@
}
#tabbrowser-tabpanels[zen-split-view='true'] .browserSidebarContainer.deck-selected {
outline: 2px solid var(--zen-primary-color) !important;
outline-offset: -1px;
outline: 1px solid var(--zen-primary-color) !important;
}
#tabbrowser-tabbox:has(#tabbrowser-tabpanels[zen-split-view='true']) {
--zen-split-row-gap: calc(var(--zen-element-separation) + 1px);
--zen-split-row-gap: var(--zen-element-separation);
--zen-split-column-gap: calc(var(--zen-element-separation) + 1px);
margin-right: calc(-1 * var(--zen-split-column-gap));
}
@@ -95,12 +90,6 @@
pointer-events: all;
}
.zen-split-view-splitter[orient='vertical'] {
width: var(--zen-split-row-gap);
margin-left: calc(var(--zen-split-row-gap) / -2);
cursor: ew-resize;
}
.zen-split-view-splitter[orient='horizontal'] {
height: var(--zen-split-column-gap);
cursor: ns-resize;
@@ -216,3 +205,101 @@
#zenSplitViewModifier:not([has-enabled-realloc])[toast] #zenSplitViewModifierEnabledToast {
display: revert;
}
.zen-view-splitter-header-container {
position: absolute;
top: calc(var(--zen-split-column-gap) / -2);
left: 50%;
opacity: 0;
transition: opacity 0.2s;
z-index: 100;
transform: translateX(-50%);
pointer-events: none;
}
.zen-view-splitter-header {
display: flex;
align-items: center;
position: fixed;
padding: 0.4rem 0.6rem;
border-radius: 8px;
background-color: light-dark(rgba(255, 255, 255, 1), rgba(0, 0, 0, 1));
box-shadow: 0 0 0 1px var(--button-primary-border-color);
gap: 0.8rem;
transform: translateX(-50%);
box-shadow: 0 0 5px 1px rgba(0, 0, 0, 0.1);
border-top-left-radius: 0;
border-top-right-radius: 0;
}
:root:not([inDOMFullscreen='true']) .browserSidebarContainer:hover .zen-view-splitter-header-container,
.zen-view-splitter-header-container:hover {
pointer-events: all;
opacity: 1;
transition-delay: 0.2s;
}
.zen-view-splitter-header-container toolbarbutton {
display: block;
-moz-context-properties: fill, fill-opacity;
border-radius: var(--tab-border-radius);
color: inherit;
fill: currentColor;
width: 16px;
height: 16px;
cursor: pointer;
appearance: none;
outline: none;
color: var(--button-primary-bgcolor);
border-top-left-radius: 0;
border-top-right-radius: 0;
& image {
width: 14px;
height: 14px;
}
&.zen-tab-rearrange-button {
cursor: move;
& image {
transform: rotate(90deg);
}
}
}
#zen-split-view-fake-browser {
position: absolute;
height: 100%;
background: rgba(255, 255, 255, 0.1);
border-radius: var(--zen-native-inner-radius);
box-shadow: var(--zen-big-shadow);
overflow: hidden;
&::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 3.5rem;
pointer-events: none;
height: 3.5rem;
background: var(--zen-split-view-fake-icon);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
opacity: 0.8;
transition: opacity 0.2s;
transition-delay: 0.1s;
@starting-style {
opacity: 0;
}
}
&.fade-out::after {
opacity: 0;
transition-delay: 0s;
}
}

View File

@@ -0,0 +1,178 @@
tab-group[split-view-group] {
display: flex;
flex-wrap: nowrap;
border-radius: var(--border-radius-medium);
padding: 0 2px;
margin-inline: var(--tab-block-margin);
margin-block: var(--tab-block-margin);
min-height: var(--tab-min-height);
outline: var(--tab-outline);
outline-offset: var(--tab-outline-offset);
outline-color: var(--tab-selected-outline-color);
transition: scale 0.1s ease;
align-items: center;
--zen-split-view-active-tab-bg: color-mix(in srgb, var(--zen-toolbar-element-bg), transparent 40%);
:root:not([zen-sidebar-expanded='true']) & {
padding: 0 2px;
--tab-min-height: 30px;
--tab-collapsed-width: 38px;
margin: 0 auto;
--tab-min-width: 34px;
}
& > .tabbrowser-tab {
--tab-selected-bgcolor: var(--zen-split-view-active-tab-bg);
--tab-hover-background-color: transparent;
--tab-selected-shadow: none;
--border-radius-medium: var(--tab-border-radius);
--zen-active-tab-scale: 1;
:root[zen-sidebar-expanded='true'] & {
--tab-min-height: 28px;
}
container-type: inline-size;
container-name: browser-tab;
flex: 1 !important;
padding-inline: 2px !important;
overflow: clip;
&:not(:last-child)::after {
content: '';
width: 1px;
height: 16px;
background-color: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.2));
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
:root:not([zen-sidebar-expanded='true']) &:not(:last-child)::after {
width: 16px;
height: 1px;
top: auto;
bottom: 0;
right: 50%;
transform: translateX(50%);
}
}
&:has(> tab:is([visuallyselected], [multiselected])) {
background-color: var(--tab-selected-bgcolor);
box-shadow: var(--tab-selected-shadow);
& > .tabbrowser-tab {
--tab-hover-background-color: var(--zen-split-view-active-tab-bg);
& .tab-background {
background-color: var(--zen-split-view-active-tab-bg) !important;
}
&::after {
display: none;
}
}
}
&:active {
scale: var(--zen-active-tab-scale);
}
&:hover {
background-color: var(--zen-toolbar-element-bg);
}
& .tab-close-button,
& .tab-reset-button {
margin-inline-end: -3px !important;
display: none !important;
}
@container browser-tab (min-width: 70px) {
:root[zen-sidebar-expanded='true'] &:hover > .tabbrowser-tab:not([pinned]) .tab-close-button {
display: block !important;
}
}
@media (prefers-reduced-motion: no-preference) {
#tabbrowser-tabs[movingtab] & {
transition: var(--tab-dragover-transition);
}
}
}
:root:not([zen-sidebar-expanded='true']) {
tab-group {
flex-direction: column;
}
}
tab-group[split-view-group] .tabbrowser-tab {
width: 100%;
max-width: unset;
}
tab-group[split-view-group] .tab-group-label-container {
display: none;
width: 100%;
}
tab-group[split-view-group] .tab-close-button {
display: block;
visibility: visible;
}
tab-group[split-view-group] .tab-group-line {
display: none;
background: transparent;
}
tab-group:not([split-view-group]) {
& .tab-group-label-container {
min-width: fit-content;
max-width: 100%;
height: fit-content !important;
display: flex;
justify-content: start;
margin-top: 10px;
margin-bottom: 10px;
}
& .tab-group-label {
text-align: start;
flex-grow: 1 !important;
min-width: fit-content;
max-width: 100%;
font-size: 14px !important;
display: block !important;
padding-right: 8px;
}
& .tab-group-line {
display: none !important;
}
&[collapsed] .tabbrowser-tab {
display: none !important;
}
&:not([collapsed]) .tabbrowser-tab {
margin-left: 10px;
}
&:not([collapsed]) .tabbrowser-tab::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 2px;
height: 100%;
background-color: var(--tab-group-color);
}
}
.tab-group-line {
display: none !important;
}

View File

@@ -29,7 +29,9 @@
width: 32px;
height: 32px;
background: light-dark(rgb(24, 24, 24), rgb(231, 231, 231));
transition: background 0.2s ease;
transition:
background 0.05s ease,
scale 0.05s ease;
border-radius: 999px;
appearance: none;
box-shadow: 0 0 12px 1px rgba(0, 0, 0, 0.07);
@@ -37,6 +39,11 @@
&:hover {
background: light-dark(rgb(41, 41, 41), rgb(204, 204, 204));
scale: 1.05;
}
&:hover:active {
scale: 0.95;
}
& label {

View File

@@ -89,6 +89,7 @@
border-radius: 50%;
cursor: pointer;
position: relative;
transition: transform 0.1s;
&::after {
content: '';
position: absolute;
@@ -99,6 +100,23 @@
outline: 2px solid var(--zen-toolbar-element-bg);
border-radius: 50%;
pointer-events: none;
transition: transform 0.1s;
}
&:hover {
transform: scale(1.05);
&::after {
transform: scale(1.05);
}
}
&:hover:active {
transform: scale(0.95);
&::after {
transform: scale(0.95);
}
}
}
}

View File

@@ -111,24 +111,25 @@
background: transparent;
border: none;
cursor: ew-resize;
z-index: 2;
&:is(.zen-split-view-splitter[orient='vertical']) {
/* Bit of a hacky solution, but it works */
width: calc(var(--zen-element-separation) - 3px);
margin-left: calc(-1 * var(--zen-element-separation) / 2 - 2px);
width: var(--zen-split-row-gap);
margin-left: calc(var(--zen-element-separation) * -1 - 1px);
height: unset;
cursor: ew-resize;
}
&::before {
height: 50px;
width: 4px;
background: var(--zen-colors-primary);
width: 2px;
background: var(--button-primary-bgcolor);
border-radius: 2px;
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
opacity: 0;
transition: opacity 0.1s ease-in-out;
pointer-events: none;
@@ -139,10 +140,6 @@
}
}
.zen-split-view-splitter[orient='vertical']::before {
transform: translate(-75%, -50%);
}
.zen-sidebar-web-panel-splitter[side='right'] {
left: 100%;
}

View File

@@ -94,9 +94,8 @@
padding: 6px !important;
}
& #urlbar-container,
& #urlbar {
--urlbar-container-height: 40px;
& #urlbar-container[breakout='true']:has([zen-floating-urlbar='true']) {
--urlbar-container-height: 36px !important;
--urlbar-height: 38px !important;
}
@@ -109,7 +108,7 @@
}
& #zen-sidebar-top-buttons {
margin: 4px 0;
margin: var(--zen-element-separation) 0 calc(var(--zen-toolbox-padding) / 2) 0;
}
& #PanelUI-menu-button {
@@ -264,8 +263,8 @@
display: none;
}
&:active {
scale: 0.98;
#tabbrowser-tabs:not([movingtab]) &:active {
scale: var(--zen-active-tab-scale);
}
max-width: unset;
@@ -374,6 +373,12 @@
overflow-y: auto;
height: 100%;
scrollbar-width: thin;
/* Only do this hack if we have workspaces enabled */
:root[zen-workspace-id] & {
margin-left: calc(-1 * var(--zen-toolbox-padding));
width: calc(100% + var(--zen-toolbox-padding) * 2);
}
}
#zen-browser-tabs-container {
@@ -391,7 +396,7 @@
max-height: unset !important;
& .tabbrowser-tab:not(:hover) .tab-background:not([selected]):not([multiselected]) {
background: transparent !important;
background: transparent;
}
& .tabbrowser-tab .tab-content {
@@ -440,7 +445,7 @@
padding-right: 0;
:root[zen-single-toolbar='true'] & {
& #urlbar:not([breakout-extend='true']) .urlbar-input-container {
& #urlbar:not([breakout-extend='true']):not([pageproxystate='invalid']) .urlbar-input-container {
padding-left: 8px;
padding-right: 4px;
}
@@ -600,7 +605,7 @@
&:is(:hover, [visuallyselected]) .tab-close-button {
display: block;
--tab-inline-padding: 0; /* Avoid weird padding */
margin-inline-end: 0 !important;
margin-inline-end: 0;
}
.tab-throbber,
@@ -775,6 +780,8 @@
transition: opacity 0.2s ease-in-out;
background: var(--zen-colors-border);
appearance: none;
position: relative !important;
order: 0;
}
/* Mark: Move sidebar to the right */
@@ -847,8 +854,8 @@
position: relative;
height: calc(100% - var(--tab-block-margin) * 2);
margin-left: calc(-1 * var(--tab-inline-padding) + var(--tab-block-margin));
margin-right: 4px;
padding: 0 calc(var(--toolbarbutton-inner-padding)) 0 calc(var(--toolbarbutton-inner-padding) / 4 + var(--tab-inline-padding) - 2px);
margin-right: 8px;
padding: 0 calc(var(--toolbarbutton-inner-padding) - 2px) 0 calc(var(--toolbarbutton-inner-padding) / 4 + var(--tab-inline-padding) - 2px);
border-radius: 0;
border-top-left-radius: var(--border-radius-medium);
width: unset;
@@ -870,12 +877,12 @@
display: block;
width: 2.5px;
height: 16px;
background: light-dark(rgba(88, 79, 79, 0.02), rgba(255, 255, 255, 0.3));
background: light-dark(rgba(66, 61, 61, 0.3), rgba(255, 255, 255, 0.3));
position: absolute;
right: calc(var(--tab-inline-padding) / 2 - 1px);
right: 0;
top: 50%;
border-radius: 2px;
transform: rotate(10deg) translateY(-50%);
transform: rotate(15deg) translateY(-50%);
}
&:hover::after {
@@ -886,7 +893,6 @@
.reset-icon,
.tab-reset-pin-button {
appearance: none;
}
@media not (forced-colors) {
@@ -1049,7 +1055,7 @@
overflow: hidden;
transition: max-height 0.3s ease-out;
opacity: 1;
grid-template-columns: repeat(auto-fit, minmax(var(--tab-pinned-min-width-expanded), auto));
grid-template-columns: repeat(auto-fit, minmax(48px, auto));
overflow: hidden;
scrollbar-width: thin;
display: grid;
@@ -1101,7 +1107,7 @@
&::after {
content: "";
inset: -50%;
filter: blur(15px);
filter: blur(15px) brightness(1.2);
position: absolute;
background-size: 100% 100%;
background-clip: padding-box;
@@ -1260,5 +1266,9 @@
.zen-workspace-tabs-section {
position: absolute;
transform: translateX(-100%);
min-width: 100%;
min-width: calc(100% - var(--zen-toolbox-padding) * 2);
&:not(.zen-current-workspace-indicator) {
margin: 0 var(--zen-toolbox-padding);
}
}

View File

@@ -79,7 +79,7 @@
--focus-outline-color: var(--button-bgcolor) !important;
--toolbarbutton-icon-fill-attention: var(--zen-primary-color) !important;
--toolbarbutton-icon-fill: light-dark(rgb(57, 57, 58), rgb(251, 251, 254)) !important;
--toolbarbutton-icon-fill: light-dark(rgba(57, 57, 58, 0.6), rgba(251, 251, 254, 0.6)) !important;
--button-primary-bgcolor: var(--in-content-primary-button-background) !important;
--button-primary-hover-bgcolor: var(--in-content-primary-button-background-hover) !important;
@@ -104,7 +104,7 @@
--zen-button-border-radius: 5px;
--zen-button-padding: 0.6rem 1.2rem;
--zen-toolbar-element-bg: light-dark(rgba(89, 89, 89, 0.1), rgba(255, 255, 255, 0.125));
--zen-toolbar-element-bg: light-dark(rgba(89, 89, 89, 0.1), rgba(255, 255, 255, 0.1));
/* Toolbar */
--zen-toolbar-height: 38px;
@@ -155,7 +155,7 @@
--input-bgcolor: var(--zen-colors-tertiary) !important;
--input-border-color: var(--zen-input-border-color) !important;
--zen-themed-toolbar-bg: light-dark(var(--zen-branding-bg), #161616);
--zen-themed-toolbar-bg: light-dark(rgb(240, 240, 244), #161616);
--zen-themed-toolbar-bg-transparent: light-dark(var(--zen-branding-bg), #161616);
--zen-workspace-indicator-height: 45px;
@@ -164,7 +164,7 @@
background: transparent;
--zen-themed-toolbar-bg-transparent: transparent;
@media (-moz-bool-pref: 'zen.widget.windows.acrylic') {
--zen-themed-toolbar-bg-transparent: color-mix(in srgb, var(--zen-themed-toolbar-bg) 80%, transparent 20%);
--zen-themed-toolbar-bg-transparent: color-mix(in srgb, var(--zen-themed-toolbar-bg) 75%, transparent 25%);
}
}
@@ -172,6 +172,7 @@
--arrowpanel-background: var(--zen-dialog-background) !important;
--zen-big-shadow: 0 0 9.73px 0px light-dark(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.25));
--zen-active-tab-scale: 0.98;
/* Nativity */
--zen-native-content-radius: var(--zen-border-radius);

View File

@@ -44,6 +44,16 @@
outline-color: none !important;
}
#urlbar:not([breakout-extend='true']) {
& #urlbar-background {
transition: background-color 0.15s ease;
}
&:hover #urlbar-background {
background-color: light-dark(rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.2)) !important;
}
}
#identity-box.chromeUI:not([pageproxystate='invalid']) {
& #identity-icon-box {
background: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1)) !important;
@@ -70,7 +80,7 @@
position: relative;
}
#urlbar:not([breakout-extend='true']) #identity-box:is(:not(.chromeUI), [pageproxystate='invalid']) {
#urlbar:not([breakout-extend='true']) #identity-box {
margin-inline-end: 0 !important;
}
@@ -88,8 +98,6 @@
.urlbar-page-action,
#tracking-protection-icon-container {
width: calc(var(--urlbar-min-height) - 6 * var(--urlbar-container-padding)) !important;
height: calc(var(--urlbar-min-height) - 6 * var(--urlbar-container-padding)) !important;
margin-top: auto !important;
margin-bottom: auto !important;
}
@@ -119,23 +127,26 @@
box-shadow: 0px 0px 90px -10px rgba(0, 0, 0, 0.6) !important;
border: 1px solid hsla(0, 0%, 100%, 0.1) !important;
backdrop-filter: none !important;
border-radius: 0.8rem !important;
}
#urlbar-go-button {
margin: auto 0;
display: none;
}
:root[zen-single-toolbar='true'] {
--urlbar-icon-border-radius: 10px !important;
.urlbar-page-action:not([open]):not(#identity-permission-box),
#tracking-protection-icon-container {
display: none;
}
#identity-icon-box:not([open]) {
margin-inline-start: calc(-8px - 2 * var(--urlbar-icon-padding)) !important;
#identity-box:not([pageproxystate='invalid']) #identity-icon-box:not([open]) {
margin-inline-start: calc(-8px - 2 * var(--urlbar-icon-padding));
transform: translateX(100%);
opacity: 0;
transition: all 0.1s ease;
opacity: 0;
}
#identity-permission-box > *:not(#permissions-granted-icon) {
@@ -151,9 +162,9 @@
#identity-permission-box
),
#urlbar:hover #identity-icon-box {
opacity: 1;
opacity: 1 !important;
margin-inline-start: 0 !important;
transform: none;
transform: none !important;
display: flex;
#urlbar:not(:hover) & {
transition: 0;
@@ -165,7 +176,7 @@
}
#urlbar:not([open]) {
#identity-box {
#identity-box:not([pageproxystate='invalid']) {
order: 9;
}
}
@@ -301,7 +312,7 @@ button.popup-notification-dropmarker {
#urlbar .urlbar-page-action,
#urlbar #tracking-protection-icon-container,
#urlbar:not([breakout-extend='true']) #identity-box:is(:not(.chromeUI), [pageproxystate='invalid']) #identity-icon-box {
border-radius: 8px !important;
border-radius: var(--urlbar-icon-border-radius) !important;
}
/* Extensions or similar */
@@ -433,9 +444,8 @@ button.popup-notification-dropmarker {
font-size: 1.5em !important;
width: min(90%, 60rem) !important;
}
top: 50vh !important;
top: 25vh !important;
transform: translateX(-50%);
margin-top: -20%;
left: 50% !important;
#urlbar-container:has(&) {

View File

@@ -24,10 +24,6 @@
list-style-image: url(chrome://browser/skin/zen-icons/forward.svg);
position: absolute;
bottom: 10%;
.button-icon {
filter: invert(1);
}
}
#zen-welcome-title {
@@ -58,6 +54,7 @@
width: 60%;
height: 60%;
box-shadow: var(--zen-big-shadow);
overflow: hidden;
/* Small screens */
@media (max-width: 1400px) {
@@ -89,13 +86,18 @@
width: 100%;
height: 100%;
opacity: 0;
color: var(--zen-primary-color);
fill: var(--zen-primary-color);
color: currentColor;
fill: currentColor;
-moz-context-properties: fill, fill-opacity;
background-image: url(chrome://browser/skin/zen-icons/essential-add.svg);
background-size: 15%;
background-repeat: no-repeat;
background-position: center;
}
&[animate-heart] {
overflow: hidden;
}
}
#zen-welcome-page-sidebar-buttons {
@@ -129,6 +131,7 @@
#zen-welcome-page-content {
background: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1));
width: 60%;
max-width: 80rem;
height: 100%;
position: relative;
overflow: hidden;
@@ -205,7 +208,7 @@
#zen-welcome-initial-essentials-browser-sidebar-essentials {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 0.8rem;
gap: 0.4rem 1.2rem;
visibility: visible;
& * {
@@ -245,15 +248,10 @@
&[visuallyselected] {
transform: scale(1.04);
& .tab-background {
--zen-essential-bg-margin: 3px;
box-shadow: var(--zen-big-shadow);
}
}
& .tab-background::after {
filter: blur(30px) !important;
filter: blur(30px) brightness(1.2);
}
}
}

View File

@@ -9,6 +9,7 @@
justify-content: center;
align-items: center;
display: flex;
font-size: x-small;
position: relative;
@@ -451,6 +452,7 @@
/* Mark workspaces indicator */
#zen-current-workspace-indicator-container {
position: relative;
margin-bottom: var(--zen-workspace-indicator-height);
}
@@ -464,6 +466,7 @@
align-items: center;
flex-direction: row !important;
max-width: 100%;
width: 100%;
&::before {
border-radius: var(--border-radius-medium);
@@ -488,6 +491,7 @@
& .zen-current-workspace-indicator-icon {
font-size: 12px;
line-height: 1;
}
.zen-current-workspace-indicator-name {
@@ -497,6 +501,7 @@
overflow: hidden;
text-overflow: ellipsis;
pointer-events: none;
font-size: small;
}
}

View File

@@ -141,10 +141,17 @@ var gZenCompactModeManager = {
this.animateCompactMode();
},
getAndApplySidebarWidth() {
// NOTE: Dont actually use event, it's just so we make sure
// the caller is from the ResizeObserver
getAndApplySidebarWidth(event = undefined) {
let sidebarWidth = this.sidebar.getBoundingClientRect().width;
if (sidebarWidth > 1) {
gZenUIManager.restoreScrollbarState();
// Second variable to get the genuine width of the sidebar
this.sidebar.style.setProperty('--actual-zen-sidebar-width', `${sidebarWidth}px`);
if (event && this.preference) {
return;
}
this.sidebar.style.setProperty('--zen-sidebar-width', `${sidebarWidth}px`);
}
return sidebarWidth;
@@ -153,14 +160,20 @@ var gZenCompactModeManager = {
animateCompactMode() {
this._animating = true;
const isCompactMode = this.preference;
const canHideSidebar = Services.prefs.getBoolPref('zen.view.compact.hide-tabbar');
const canHideSidebar =
Services.prefs.getBoolPref('zen.view.compact.hide-tabbar') || gZenVerticalTabsManager._hasSetSingleToolbar;
const canAnimate =
lazyCompactMode.COMPACT_MODE_CAN_ANIMATE_SIDEBAR &&
!this.sidebar.hasAttribute('zen-user-show') &&
!this.sidebar.hasAttribute('zen-has-empty-tab') &&
!this.sidebar.hasAttribute('zen-has-hover');
// Do this so we can get the correct width ONCE compact mode styled have been applied
const titlebar = this.sidebar.querySelector('#titlebar');
if (canAnimate) {
this.sidebar.setAttribute('animate', 'true');
titlebar.setAttribute('has-animated-padding', 'true');
} else {
titlebar.removeAttribute('has-animated-padding');
}
this.sidebar.style.removeProperty('margin-right');
this.sidebar.style.removeProperty('margin-left');
@@ -189,14 +202,19 @@ var gZenCompactModeManager = {
}
)
.then(() => {
this.sidebar.removeAttribute('animate');
this.sidebar.style.removeProperty('margin-right');
this.sidebar.style.removeProperty('margin-left');
this.sidebar.style.removeProperty('transform');
this.sidebar.style.transition = 'none';
setTimeout(() => {
this._animating = false;
this.sidebar.style.removeProperty('transition');
window.requestAnimationFrame(() => {
this.sidebar.style.transition = 'none';
this.sidebar.removeAttribute('animate');
this.sidebar.style.visibility = 'hidden';
this.sidebar.style.removeProperty('margin-right');
this.sidebar.style.removeProperty('margin-left');
this.sidebar.style.removeProperty('transform');
setTimeout(() => {
this._animating = false;
this.sidebar.style.removeProperty('visibility');
this.sidebar.style.removeProperty('transition');
this.sidebar.style.removeProperty('opacity');
}, 300);
});
});
} else if (canHideSidebar && !isCompactMode) {
@@ -305,9 +323,6 @@ var gZenCompactModeManager = {
{
element: gZenVerticalTabsManager.actualWindowButtons,
},
{
element: gZenVerticalTabsManager.actualWindowButtons,
},
];
},
@@ -343,14 +358,13 @@ var gZenCompactModeManager = {
addMouseActions() {
for (let i = 0; i < this.hoverableElements.length; i++) {
let target = this.hoverableElements[i].element;
target.addEventListener('mouseenter', (event) => {
if (!event.target.matches(':hover')) return;
const onEnter = (event) => {
if (event.type === 'mouseenter' && !event.target.matches(':hover')) return;
this.clearFlashTimeout('has-hover' + target.id);
window.requestAnimationFrame(() => target.setAttribute('zen-has-hover', 'true'));
});
};
target.addEventListener('mouseleave', (event) => {
// If on Mac, ignore mouseleave in the area of window buttons
const onLeave = (event) => {
if (AppConstants.platform == 'macosx') {
const buttonRect = gZenVerticalTabsManager.actualWindowButtons.getBoundingClientRect();
const MAC_WINDOW_BUTTONS_X_BORDER = buttonRect.width + buttonRect.x;
@@ -365,6 +379,12 @@ var gZenCompactModeManager = {
}
}
// When moving the cursor between the url bar and bookmarks, or in-between bookmarks in the bookmark bar, the
// mouseLeave event is triggered without a relatedTarget.
if (event.relatedTarget == null) {
return;
}
// If it's a child element but not the target, ignore the event
if (target.contains(event.explicitOriginalTarget) && event.explicitOriginalTarget !== target) {
return;
@@ -375,7 +395,13 @@ var gZenCompactModeManager = {
} else {
this._removeHoverFrames[target.id] = window.requestAnimationFrame(() => target.removeAttribute('zen-has-hover'));
}
});
};
target.addEventListener('mouseenter', onEnter);
target.addEventListener('dragover', onEnter);
target.addEventListener('mouseleave', onLeave);
target.addEventListener('dragleave', onLeave);
}
document.documentElement.addEventListener('mouseleave', (event) => {

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,102 @@
{
class ZenFolders {
constructor() {
this.#initEventListeners();
}
#initEventListeners() {
document.addEventListener('TabGrouped', this.#onTabGrouped.bind(this));
document.addEventListener('TabUngrouped', this.#onTabUngrouped.bind(this));
document.addEventListener('TabGroupRemoved', this.#onTabGroupRemoved.bind(this));
document.addEventListener('TabGroupCreate', this.#onTabGroupCreate.bind(this));
}
#onTabGrouped(event) {
const tab = event.target;
const group = tab.group;
group.pinned = tab.pinned;
if (group.hasAttribute('split-view-group') && group.hasAttribute('zen-pinned-changed')) {
// zen-pinned-changed remove it and set it to had-zen-pinned-changed to keep
// track of the original pinned state
group.removeAttribute('zen-pinned-changed');
group.setAttribute('had-zen-pinned-changed', true);
}
}
#onTabUngrouped(event) {
const tab = event.target;
const group = event.detail;
if (group.hasAttribute('split-view-group') && tab.hasAttribute('had-zen-pinned-changed')) {
tab.setAttribute('zen-pinned-changed', true);
tab.removeAttribute('had-zen-pinned-changed');
}
}
#onTabGroupCreate(event) {
const group = event.target;
const tabs = group.tabs;
if (!group.pinned) {
return;
}
for (const tab of tabs) {
if (tab.hasAttribute('zen-pinned-changed')) {
tab.removeAttribute('zen-pinned-changed');
tab.setAttribute('had-zen-pinned-changed', true);
}
}
}
#onTabGroupRemoved(event) {}
expandGroupTabs(group) {
for (const tab of group.tabs.reverse()) {
gBrowser.ungroupTab(tab);
}
}
handleTabPin(tab) {
const group = tab.group;
if (!group) {
return false;
}
if (group.hasAttribute('split-view-group') && !this._piningFolder) {
this._piningFolder = true;
for (const otherTab of group.tabs) {
if (tab === otherTab) {
continue;
}
gBrowser.pinTab(otherTab);
}
this._piningFolder = false;
gBrowser.verticalPinnedTabsContainer.insertBefore(group, gBrowser.verticalPinnedTabsContainer.lastChild);
gBrowser.tabContainer._invalidateCachedTabs();
return true;
}
return this._piningFolder;
}
handleTabUnpin(tab) {
const group = tab.group;
if (!group) {
return false;
}
if (group.hasAttribute('split-view-group') && !this._piningFolder) {
this._piningFolder = true;
for (const otherTab of group.tabs) {
if (tab === otherTab) {
continue;
}
gBrowser.unpinTab(otherTab);
}
this._piningFolder = false;
ZenWorkspaces.activeWorkspaceStrip.prepend(group);
gBrowser.tabContainer._invalidateCachedTabs();
return true;
}
return this._piningFolder;
}
}
window.gZenFolders = new ZenFolders();
}

View File

@@ -38,6 +38,9 @@
}
onKeyDown(event) {
if (event.defaultPrevented) {
return;
}
if (event.key === 'Escape' && this.#currentGlanceID) {
event.preventDefault();
event.stopPropagation();
@@ -67,7 +70,7 @@
}
getTabPosition(tab) {
return Math.max(gBrowser._numVisiblePinTabs, tab._tPos);
return Math.max(gBrowser.pinnedTabCount, tab._tPos);
}
createBrowserElement(url, currentTab, existingTab = null) {
@@ -76,7 +79,7 @@
skipBackgroundNotify: true,
insertTab: true,
skipLoad: false,
index: this.getTabPosition(currentTab),
index: this.getTabPosition(currentTab) + 1,
};
currentTab._selected = true;
const newUUID = gZenUIManager.generateUuidv4();
@@ -264,14 +267,15 @@
.then(() => {
this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer').removeAttribute('style');
});
this.browserWrapper.style.opacity = 1;
gZenUIManager.motion
.animate(
this.browserWrapper,
{
...originalPosition,
opacity: 0.3,
opacity: 0,
},
{ type: 'spring', bounce: 0, duration: 0.4, easing: 'ease' }
{ type: 'spring', bounce: 0, duration: 0.6, easing: 'ease-in' }
)
.then(() => {
this.browserWrapper.removeAttribute('animate');
@@ -464,7 +468,6 @@
owner &&
owner.pinned &&
this._lazyPref.SHOULD_OPEN_EXTERNAL_TABS_IN_GLANCE &&
owner.linkedBrowser?.docShellIsActive &&
owner.linkedBrowser?.browsingContext?.isAppTab &&
this.tabDomainsDiffer(owner, uri) &&
Services.prefs.getBoolPref('zen.glance.enabled', true)
@@ -478,7 +481,12 @@
}
try {
if (this.shouldOpenTabInGlance(tab, uri)) {
this.openGlance({ url: undefined, x: 0, y: 0, width: 0, height: 0 }, tab, tab.owner);
const browserRect = gBrowser.tabbox.getBoundingClientRect();
this.openGlance(
{ url: undefined, x: browserRect.width / 2, y: browserRect.height / 2, width: 0, height: 0 },
tab,
tab.owner
);
}
} catch (e) {
console.error(e);

View File

@@ -863,7 +863,7 @@
getToolbarModifiedBase() {
return this.isDarkMode
? 'color-mix(in srgb, var(--zen-themed-toolbar-bg) 80%, #fff 20%)'
: 'color-mix(in srgb, var(--zen-themed-toolbar-bg) 95%, #000 5%)';
: 'color-mix(in srgb, var(--zen-themed-toolbar-bg) 95%, #000 6%)';
}
getSingleRGBColor(color, forToolbar = false) {
@@ -882,8 +882,14 @@
return forToolbar ? 'var(--zen-themed-toolbar-bg)' : 'var(--zen-themed-toolbar-bg-transparent)';
} else if (themedColors.length === 1) {
return this.getSingleRGBColor(themedColors[0], forToolbar);
} else if (themedColors.length !== 3) {
return `linear-gradient(${this.currentRotation}deg, ${themedColors.map((color) => this.getSingleRGBColor(color, forToolbar)).join(', ')})`;
} else {
let color1 = this.getSingleRGBColor(themedColors[2], forToolbar);
let color2 = this.getSingleRGBColor(themedColors[0], forToolbar);
let color3 = this.getSingleRGBColor(themedColors[1], forToolbar);
return `linear-gradient(${this.currentRotation}deg, ${color1}, ${color2}, ${color3})`;
}
return `linear-gradient(${this.currentRotation}deg, ${themedColors.map((color) => this.getSingleRGBColor(color, forToolbar)).join(', ')})`;
}
static getTheme(colors = [], opacity = 0.5, rotation = -45, texture = 0) {

View File

@@ -82,9 +82,11 @@
}
onTabIconChanged(tab, url = null) {
const iconUrl = url ?? tab.iconImage.src;
if (tab.hasAttribute('zen-essential')) {
tab.querySelector('.tab-background').style.setProperty('--zen-tab-icon', `url(${iconUrl})`);
if (tab.hasAttribute('zen-essential') && this._pinsCache) {
const pin = this._pinsCache.find((pin) => pin.uuid === tab.getAttribute('zen-pin-id'));
if (pin) {
tab.querySelector('.tab-background').style.setProperty('--zen-tab-icon', `url(${pin.iconUrl})`);
}
}
// TODO: work on this
//if (tab.hasAttribute('zen-pinned-changed') || !this._pinsCache) {
@@ -94,7 +96,7 @@
//const pin = this._pinsCache.find((pin) => pin.uuid === tab.getAttribute('zen-pin-id'));
//if (pin) {
// pin.iconUrl = iconUrl;
// ZenPinnedTabsStorage.savePin(pin);
// this.savePin(pin);
//}
}
@@ -211,8 +213,9 @@
continue;
}
if (pin.title && pin.editedTitle) {
gBrowser._setTabLabel(tab, pin.title);
if (pin.title && (pin.editedTitle || tab.hasAttribute('zen-has-static-label'))) {
tab.removeAttribute('zen-has-static-label'); // So we can set it again
gBrowser._setTabLabel(tab, pin.title, { beforeTabOpen: true });
tab.setAttribute('zen-has-static-label', 'true');
}
}
@@ -288,6 +291,8 @@
if (container) {
container.insertBefore(newTab, container.lastChild);
}
} else {
document.getElementById('zen-essentials-container').appendChild(newTab);
}
gBrowser.tabContainer._invalidateCachedTabs();
newTab.initialize();
@@ -337,13 +342,13 @@
tab.position = tab._tPos;
for (let otherTab of gBrowser.tabs) {
if (otherTab.pinned && otherTab._tPos > tab.position) {
if (otherTab.pinned && otherTab.getAttribute('zen-pin-id') !== tab.getAttribute('zen-pin-id')) {
const actualPin = this._pinsCache.find((pin) => pin.uuid === otherTab.getAttribute('zen-pin-id'));
if (!actualPin) {
continue;
}
actualPin.position = otherTab._tPos;
await ZenPinnedTabsStorage.savePin(actualPin, false);
await this.savePin(actualPin, false);
}
}
@@ -353,7 +358,15 @@
return;
}
actualPin.position = tab.position;
await ZenPinnedTabsStorage.savePin(actualPin);
actualPin.isEssential = tab.hasAttribute('zen-essential');
// There was a bug where the title and hasStaticLabel attribute were not being set
// This is a workaround to fix that
if (tab.hasAttribute('zen-has-static-label')) {
actualPin.editedTitle = true;
actualPin.title = tab.label;
}
await this.savePin(actualPin);
}
_onTabClick(e) {
@@ -396,7 +409,7 @@
pin.workspaceUuid = tab.getAttribute('zen-workspace-id');
pin.userContextId = userContextId ? parseInt(userContextId, 10) : 0;
await ZenPinnedTabsStorage.savePin(pin);
await this.savePin(pin);
this.resetPinChangedUrl(tab);
await this._refreshPinnedTabs();
gZenUIManager.showToast('zen-pinned-tab-replaced');
@@ -419,7 +432,7 @@
entry = JSON.parse(tab.getAttribute('zen-pinned-entry'));
}
await ZenPinnedTabsStorage.savePin({
await this.savePin({
uuid,
title: entry?.title || tab.label || browser.contentTitle,
url: entry?.url || browser.currentURI.spec,
@@ -472,6 +485,15 @@
}
}
async savePin(pin, notifyObservers = true) {
await ZenPinnedTabsStorage.savePin(pin, notifyObservers);
// Update the cache
const existingPin = this._pinsCache.find((p) => p.uuid === pin.uuid);
if (existingPin) {
Object.assign(existingPin, pin);
}
}
_onCloseTabShortcut(event, selectedTab = gBrowser.selectedTab, behavior = lazy.zenPinnedTabCloseShortcutBehavior) {
if (!selectedTab?.pinned) {
return;
@@ -588,7 +610,14 @@
}
addToEssentials(tab) {
const tabs = tab ? [tab] : TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab];
const tabs = tab
? // if it's already an array, dont make it [tab]
tab?.length
? tab
: [tab]
: TabContextMenu.contextTab.multiselected
? gBrowser.selectedTabs
: [TabContextMenu.contextTab];
for (let i = 0; i < tabs.length; i++) {
const tab = tabs[i];
if (tab.hasAttribute('zen-essential')) {
@@ -602,15 +631,15 @@
const pin = this._pinsCache.find((pin) => pin.uuid === tab.getAttribute('zen-pin-id'));
if (pin) {
pin.isEssential = true;
ZenPinnedTabsStorage.savePin(pin);
this.savePin(pin);
}
document.getElementById('zen-essentials-container').appendChild(tab);
gBrowser.tabContainer._invalidateCachedTabs();
} else {
gBrowser.pinTab(tab);
}
this.onTabIconChanged(tab);
this._onTabMove(tab);
this.onTabIconChanged(tab);
}
gZenUIManager.updateTabsToolbar();
}
@@ -620,8 +649,8 @@
for (let i = 0; i < tabs.length; i++) {
const tab = tabs[i];
tab.removeAttribute('zen-essential');
if (ZenWorkspaces.workspaceEnabled && ZenWorkspaces.getActiveWorkspaceFromCache.uuid) {
tab.setAttribute('zen-workspace-id', ZenWorkspaces.getActiveWorkspaceFromCache.uuid);
if (ZenWorkspaces.workspaceEnabled && ZenWorkspaces.getActiveWorkspaceFromCache().uuid) {
tab.setAttribute('zen-workspace-id', ZenWorkspaces.getActiveWorkspaceFromCache().uuid);
}
if (unpin) {
gBrowser.unpinTab(tab);
@@ -689,72 +718,77 @@
}
moveToAnotherTabContainerIfNecessary(event, movingTabs) {
const pinnedTabsTarget =
event.target.closest('#vertical-pinned-tabs-container') || event.target.closest('.zen-current-workspace-indicator');
const essentialTabsTarget = event.target.closest('#zen-essentials-container');
const tabsTarget = event.target.closest('#tabbrowser-arrowscrollbox');
try {
const pinnedTabsTarget =
event.target.closest('#vertical-pinned-tabs-container') || event.target.closest('.zen-current-workspace-indicator');
const essentialTabsTarget = event.target.closest('#zen-essentials-container');
const tabsTarget = event.target.closest('#tabbrowser-arrowscrollbox');
let isVertical = this.expandedSidebarMode;
let moved = false;
for (const draggedTab of movingTabs) {
let isRegularTabs = false;
// Check for pinned tabs container
if (pinnedTabsTarget) {
if (!draggedTab.pinned) {
gBrowser.pinTab(draggedTab);
moved = true;
} else if (draggedTab.hasAttribute('zen-essential')) {
this.removeEssentials(draggedTab, false);
moved = true;
}
}
// Check for essentials container
else if (essentialTabsTarget) {
if (!draggedTab.hasAttribute('zen-essential')) {
this.addToEssentials(draggedTab);
moved = true;
isVertical = false;
}
}
// Check for normal tabs container
else if (tabsTarget || event.target.id === 'zen-tabs-wrapper') {
if (draggedTab.pinned && !draggedTab.hasAttribute('zen-essential')) {
gBrowser.unpinTab(draggedTab);
moved = true;
isRegularTabs = true;
} else if (draggedTab.hasAttribute('zen-essential')) {
this.removeEssentials(draggedTab);
moved = true;
isRegularTabs = true;
}
}
// If the tab was moved, adjust its position relative to the target tab
if (moved) {
const targetTab = event.target.closest('.tabbrowser-tab');
if (targetTab) {
const rect = targetTab.getBoundingClientRect();
let newIndex = targetTab._tPos;
if (isVertical) {
const middleY = targetTab.screenY + rect.height / 2;
if (!isRegularTabs && event.screenY > middleY) {
newIndex++;
} else if (isRegularTabs && event.screenY < middleY) {
newIndex--;
}
} else {
const middleX = targetTab.screenX + rect.width / 2;
if (event.screenX > middleX) {
newIndex++;
}
let isVertical = this.expandedSidebarMode;
let moved = false;
for (const draggedTab of movingTabs) {
let isRegularTabs = false;
// Check for pinned tabs container
if (pinnedTabsTarget) {
if (!draggedTab.pinned) {
gBrowser.pinTab(draggedTab);
moved = true;
} else if (draggedTab.hasAttribute('zen-essential')) {
this.removeEssentials(draggedTab, false);
moved = true;
}
}
// Check for essentials container
else if (essentialTabsTarget) {
if (!draggedTab.hasAttribute('zen-essential') && !draggedTab?.group?.hasAttribute('split-view-group')) {
this.addToEssentials(draggedTab);
moved = true;
isVertical = false;
}
}
// Check for normal tabs container
else if (tabsTarget || event.target.id === 'zen-tabs-wrapper') {
if (draggedTab.pinned && !draggedTab.hasAttribute('zen-essential')) {
gBrowser.unpinTab(draggedTab);
moved = true;
isRegularTabs = true;
} else if (draggedTab.hasAttribute('zen-essential')) {
this.removeEssentials(draggedTab);
moved = true;
isRegularTabs = true;
}
}
// If the tab was moved, adjust its position relative to the target tab
if (moved) {
const targetTab = event.target.closest('.tabbrowser-tab');
if (targetTab) {
const rect = targetTab.getBoundingClientRect();
let newIndex = targetTab._tPos;
if (isVertical) {
const middleY = targetTab.screenY + rect.height / 2;
if (!isRegularTabs && event.screenY > middleY) {
newIndex++;
} else if (isRegularTabs && event.screenY < middleY) {
newIndex--;
}
} else {
const middleX = targetTab.screenX + rect.width / 2;
if (event.screenX > middleX) {
newIndex++;
}
}
gBrowser.moveTabTo(draggedTab, newIndex);
}
gBrowser.moveTabTo(draggedTab, newIndex);
}
}
}
return moved;
return moved;
} catch (ex) {
console.error('Error moving tabs:', ex);
return false;
}
}
async onLocationChange(browser) {
@@ -779,6 +813,7 @@
return;
}
tab.removeAttribute('zen-pinned-changed');
tab.removeAttribute('had-zen-pinned-changed');
tab.style.removeProperty('--zen-original-tab-icon');
}
@@ -786,7 +821,11 @@
if (tab.hasAttribute('zen-pinned-changed')) {
return;
}
tab.setAttribute('zen-pinned-changed', 'true');
if (tab.group?.hasAttribute('split-view-group')) {
tab.setAttribute('had-zen-pinned-changed', 'true');
} else {
tab.setAttribute('zen-pinned-changed', 'true');
}
tab.style.setProperty('--zen-original-tab-icon', `url(${pin.iconUrl})`);
}
@@ -820,6 +859,15 @@
// update the label for the same pin across all windows
for (const browser of browsers) {
const tabs = browser.gBrowser.tabs;
// Fix pinned cache for the browser
const browserCache = browser.gZenPinnedTabManager?._pinsCache;
if (browserCache) {
const pin = browserCache.find((pin) => pin.uuid === uuid);
if (pin) {
pin.title = newTitle;
pin.editedTitle = isEdited;
}
}
for (let i = 0; i < tabs.length; i++) {
const tabToEdit = tabs[i];
if (tabToEdit.getAttribute('zen-pin-id') === uuid && tabToEdit !== tab) {
@@ -840,7 +888,8 @@
const pinnedTabsTarget = event.target.closest('#vertical-pinned-tabs-container');
const essentialTabsTarget = event.target.closest('#zen-essentials-container');
const tabsTarget = event.target.closest('#tabbrowser-arrowscrollbox');
const targetTab = event.target.closest('.tabbrowser-tab');
let targetTab = event.target.closest('.tabbrowser-tab');
targetTab = targetTab?.group || targetTab;
if (event.target.closest('.zen-current-workspace-indicator')) {
this.removeTabContainersDragoverClass();
ZenWorkspaces.activeWorkspaceIndicator.setAttribute('open', true);

View File

@@ -33,6 +33,7 @@ class ZenBrowserManagerSidebar extends ZenDOMOperatedFeature {
this.listenForPrefChanges();
this.insertIntoContextMenu();
this.addPositioningListeners();
this.syncPinnedState();
}
onlySafeWidthAndHeight() {
@@ -98,6 +99,17 @@ class ZenBrowserManagerSidebar extends ZenDOMOperatedFeature {
window.addEventListener('resize', this.onWindowResize.bind(this));
}
syncPinnedState() {
const sidebar = document.getElementById('zen-sidebar-web-panel');
const pinButton = document.getElementById('zen-sidebar-web-panel-pinned');
if (sidebar.hasAttribute('pinned')) {
pinButton.setAttribute('pinned', 'true');
} else {
pinButton.removeAttribute('pinned');
}
}
handleSplitterMouseDown(mouseDownEvent) {
if (this._isDragging) return;
this._isDragging = true;
@@ -170,8 +182,8 @@ class ZenBrowserManagerSidebar extends ZenDOMOperatedFeature {
const leftMouseOffset = startLeft - mouseDownEvent.screenX;
const moveListener = (mouseMoveEvent) => {
window.requestAnimationFrame(() => {
let top = mouseMoveEvent.screenY + topMouseOffset;
let left = mouseMoveEvent.screenX + leftMouseOffset;
let top = mouseMoveEvent.clientY + topMouseOffset;
let left = mouseMoveEvent.clientX + leftMouseOffset;
const wrapperBounds = this.sidebarWrapper.getBoundingClientRect();
top = Math.max(0, Math.min(top, wrapperBounds.height - sideBarHeight));

View File

@@ -264,7 +264,7 @@
(tab.pinned && !ignoreTimestamp) ||
tab.selected ||
(tab.multiselected && !ignoreTimestamp) ||
tab.hasAttribute('busy') ||
(tab.hasAttribute('busy') && !ignoreTimestamp) ||
tab.hasAttribute('pending') ||
!tab.linkedPanel ||
tab.splitView ||
@@ -274,7 +274,8 @@
(tab.pictureinpicture && !ignoreTimestamp) ||
(tab.soundPlaying && !ignoreTimestamp) ||
(tab.zenIgnoreUnload && !ignoreTimestamp) ||
excludedUrls.some((url) => url.test(tab.linkedBrowser?.currentURI.spec))
(excludedUrls.some((url) => url.test(tab.linkedBrowser?.currentURI.spec)) &&
tab.linkedBrowser?.currentURI.spec !== 'about:blank')
) {
return false;
}

View File

@@ -51,7 +51,7 @@ class SplitNode extends SplitLeafNode {
addChild(child) {
child.parent = this;
this._children.push(child);
this._children.unshift(child);
}
}
@@ -69,6 +69,10 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
_edgeHoverSize;
minResizeWidth;
_lastOpenedTab = null;
MAX_TABS = 4;
init() {
XPCOMUtils.defineLazyPreferenceGetter(this, 'canChangeTabOnHover', 'zen.splitView.change-on-hover', false);
XPCOMUtils.defineLazyPreferenceGetter(this, 'minResizeWidth', 'zen.splitView.min-resize-width', 7);
@@ -79,9 +83,15 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
ChromeUtils.defineLazyGetter(this, 'dropZone', () => document.getElementById('zen-splitview-dropzone'));
window.addEventListener('TabClose', this.handleTabClose.bind(this));
window.addEventListener('TabSelect', this.onTabSelect.bind(this));
this.initializeContextMenu();
this.insertPageActionButton();
this.insertIntoContextMenu();
// Add drag over listener to the browser view
const tabBox = document.getElementById('tabbrowser-tabbox');
tabBox.addEventListener('dragover', this.onBrowserDragOverToSplit.bind(this));
this.onBrowserDragEndToSplit = this.onBrowserDragEndToSplit.bind(this);
}
insertIntoContextMenu() {
@@ -100,6 +110,9 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
*/
handleTabClose(event) {
const tab = event.target;
if (tab === this._lastOpenedTab) {
this._lastOpenedTab = null;
}
const groupIndex = this._data.findIndex((group) => group.tabs.includes(tab));
if (groupIndex < 0) {
return;
@@ -107,6 +120,18 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
this.removeTabFromGroup(tab, groupIndex, event.forUnsplit);
}
/**
* @param {Event} event - The event that triggered the tab select.
* @description Handles the tab select event.
* @returns {void}
*/
onTabSelect(event) {
const previousTab = event.detail.previousTab;
if (previousTab && !previousTab.hasAttribute('zen-empty-tab')) {
this._lastOpenedTab = previousTab;
}
}
/**
* Removes a tab from a group.
*
@@ -120,8 +145,18 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
group.tabs.splice(tabIndex, 1);
this.resetTabState(tab, forUnsplit);
if (tab.group && tab.group.hasAttribute('split-view-group')) {
gBrowser.ungroupTab(tab);
}
if (group.tabs.length < 2) {
// We need to remove all remaining tabs from the group when unsplitting
let remainingTabs = [...group.tabs]; // Copy array since we'll modify it
for (let remainingTab of remainingTabs) {
if (remainingTab.group && remainingTab.group.hasAttribute('split-view-group')) {
gBrowser.ungroupTab(remainingTab);
}
this.resetTabState(remainingTab, forUnsplit);
}
this.removeGroup(groupIndex);
} else {
const node = this.getSplitNodeFromTab(tab);
@@ -130,6 +165,165 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
}
}
onBrowserDragOverToSplit(event) {
var dt = event.dataTransfer;
var draggedTab;
if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) {
// tab copy or move
draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
// not our drop then
if (!draggedTab || gBrowser.selectedTab.hasAttribute('zen-empty-tab')) {
return;
}
draggedTab.container._finishMoveTogetherSelectedTabs(draggedTab);
}
if (
!draggedTab ||
this._canDrop ||
this._hasAnimated ||
this.fakeBrowser ||
!this._lastOpenedTab ||
(this._lastOpenedTab &&
(this._lastOpenedTab.getAttribute('zen-workspace-id') !== draggedTab.getAttribute('zen-workspace-id') ||
this._lastOpenedTab.hasAttribute('zen-essential')))
) {
return;
}
if (draggedTab.splitView) {
return;
}
const currentView = this._data[this._lastOpenedTab.splitViewValue];
if (currentView?.tabs.length >= this.MAX_TABS) {
return;
}
// only show if we are 1/4 of the way to the edge
const panelsRect = gBrowser.tabbox.getBoundingClientRect();
const panelsWidth = panelsRect.width;
if (
event.clientX > panelsWidth / 2 ||
event.clientX < panelsRect.left + 10 ||
event.clientY < panelsRect.top + 10 ||
event.clientY > panelsRect.bottom - 10
) {
return;
}
const oldTab = this._lastOpenedTab;
this._canDrop = true;
// wait some time before showing the split view
this._showSplitViewTimeout = setTimeout(() => {
this._draggingTab = draggedTab;
gBrowser.selectedTab = oldTab;
this._hasAnimated = true;
for (const tab of gBrowser.tabs) {
tab.style.removeProperty('transform');
}
const panelsWidth = gBrowser.tabbox.getBoundingClientRect().width;
const halfWidth = panelsWidth / 2;
this.fakeBrowser = document.createXULElement('vbox');
this.fakeBrowser.addEventListener('dragleave', this.onBrowserDragEndToSplit);
const padding = Services.prefs.getIntPref('zen.theme.content-element-separation', 0);
this.fakeBrowser.setAttribute('flex', '1');
this.fakeBrowser.id = 'zen-split-view-fake-browser';
gBrowser.tabbox.appendChild(this.fakeBrowser);
this.fakeBrowser.style.setProperty('--zen-split-view-fake-icon', `url(${draggedTab.getAttribute('image')})`);
draggedTab._visuallySelected = true;
this._finishAllAnimatingPromise = Promise.all([
gZenUIManager.motion.animate(
gBrowser.tabbox,
{
paddingLeft: [0, `${halfWidth}px`],
},
{
duration: 0.15,
easing: 'ease-out',
}
),
gZenUIManager.motion.animate(
this.fakeBrowser,
{
width: [0, `${halfWidth - padding}px`],
marginLeft: [0, `${-halfWidth}px`],
},
{
duration: 0.15,
easing: 'ease-out',
}
),
]);
if (this._finishAllAnimatingPromise) {
this._finishAllAnimatingPromise.then(() => {
this._canDrop = true;
draggedTab._visuallySelected = true;
});
}
}, 100);
}
onBrowserDragEndToSplit(event) {
if (!this._canDrop) {
return;
}
const panelsRect = gBrowser.tabbox.getBoundingClientRect();
const fakeBrowserRect = this.fakeBrowser && this.fakeBrowser.getBoundingClientRect();
if (
(event.target.closest('#tabbrowser-tabbox') && event.target != this.fakeBrowser) ||
(fakeBrowserRect &&
event.clientX > fakeBrowserRect.left &&
event.clientX < fakeBrowserRect.left + fakeBrowserRect.width &&
event.clientY > fakeBrowserRect.top &&
event.clientY < fakeBrowserRect.top + fakeBrowserRect.height) ||
(event.screenX === 0 && event.screenY === 0) // It's equivalent to 0 if the event has been dropped
) {
return;
}
if (this._showSplitViewTimeout) {
clearTimeout(this._showSplitViewTimeout);
}
if (!this._hasAnimated || !this.fakeBrowser) {
return;
}
const panelsWidth = panelsRect.width;
const halfWidth = panelsWidth / 2;
const padding = Services.prefs.getIntPref('zen.theme.content-element-separation', 0);
if (!this.fakeBrowser) {
return;
}
this.fakeBrowser.classList.add('fade-out');
gBrowser.selectedTab = this._draggingTab;
this._draggingTab = null;
try {
Promise.all([
gZenUIManager.motion.animate(
gBrowser.tabbox,
{
paddingLeft: [`${halfWidth}px`, 0],
},
{
duration: 0.15,
easing: 'ease-out',
}
),
gZenUIManager.motion.animate(
this.fakeBrowser,
{
width: [`${halfWidth - padding * 2}px`, 0],
marginLeft: [`${-(halfWidth - padding)}px`, 0],
},
{
duration: 0.15,
easing: 'ease-out',
}
),
]).then(() => {
this._canDrop = false;
this._maybeRemoveFakeBrowser();
});
} catch (e) {
this._canDrop = false;
this._maybeRemoveFakeBrowser();
}
}
/**
* Remove a SplitNode from its tree and the view
* @param {SplitNode} toRemove
@@ -208,7 +402,7 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
wrapper.setAttribute('hidden', !value);
}
enableTabRearrangeView() {
enableTabRearrangeView(tabDrag = false) {
if (this.rearrangeViewEnabled) return;
this.rearrangeViewEnabled = true;
this.rearrangeViewView = this.currentView;
@@ -223,13 +417,19 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
b.style.pointerEvents = 'none';
b.style.opacity = '.85';
});
this.tabBrowserPanel.addEventListener('dragstart', this.onBrowserDragStart);
if (!tabDrag) {
this.tabBrowserPanel.addEventListener('dragstart', this.onBrowserDragStart);
this.tabBrowserPanel.addEventListener('dragend', this.onBrowserDragEnd);
}
this.tabBrowserPanel.addEventListener('dragover', this.onBrowserDragOver);
this.tabBrowserPanel.addEventListener('drop', this.onBrowserDrop);
this.tabBrowserPanel.addEventListener('dragend', this.onBrowserDragEnd);
this.tabBrowserPanel.addEventListener('click', this.disableTabRearrangeView);
window.addEventListener('keydown', this.disableTabRearrangeView);
this.afterRearangeAction();
if (!tabDrag) {
this.afterRearangeAction();
}
}
disableTabRearrangeView = (event = null) => {
@@ -257,21 +457,57 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
});
this.rearrangeViewEnabled = false;
this.rearrangeViewView = null;
this.afterRearangeRemove();
if (!event?.type === 'dragend') {
// Don't show toast if exiting from drag
this.afterRearangeRemove();
}
};
onBrowserDragStart = (event) => {
if (!this.splitViewActive) return;
let browser = event.target.querySelector('browser');
if (!browser) {
return;
}
browser.style.opacity = '.2';
const browserContainer = browser.closest('.browserSidebarContainer');
event.dataTransfer.setData('text/plain', browserContainer.id);
this._draggingTab = gBrowser.getTabForBrowser(browser);
let dt = event.dataTransfer;
let browser;
let isSplitHeaderDrag = false;
const container = event.target.closest('.browserSidebarContainer[zen-split]');
if (container && event.target.closest('.zen-tab-rearrange-button')) {
// Split tab header drag case
const containerRect = container.getBoundingClientRect();
const clickX = event.clientX - containerRect.left;
// Only allow drag if click is NOT in right 20px (close button area)
if (clickX > containerRect.width - 22) {
return;
}
browser = container.querySelector('browser');
isSplitHeaderDrag = true;
} else {
// Regular browser drag case
browser = event.target.querySelector('browser');
}
if (!browser) return;
const tab = gBrowser.getTabForBrowser(browser);
if (!tab) return;
// Store the necessary state for drag end
this._dragState = {
tab,
browser,
isSplitHeaderDrag,
};
if (isSplitHeaderDrag) {
this.enableTabRearrangeView(true);
}
browser.style.opacity = '.2';
event.dataTransfer.setData('text/plain', browser.closest('.browserSidebarContainer').id);
this._draggingTab = tab;
// Canvas setup for drag image
let scale = window.devicePixelRatio;
let canvas = this._dndCanvas;
if (!canvas) {
@@ -294,8 +530,8 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
// On Windows and Mac we can update the drag image during a drag
// using updateDragImage. On Linux, we can use a panel.
if (platform === 'win' || platform === 'macosx') {
captureListener = function () {
dt.updateDragImage(canvas, dragImageOffset, dragImageOffset);
captureListener = () => {
event.dataTransfer.updateDragImage(canvas, dragImageOffset, dragImageOffset);
};
} else {
// Create a panel to use it in setDragImage
@@ -326,7 +562,7 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
PageThumbs.captureToCanvas(browser, canvas).catch((e) => console.error(e));
dragImageOffset = dragImageOffset * scale;
}
dt.setDragImage(toDrag, dragImageOffset, dragImageOffset);
event.dataTransfer.setDragImage(toDrag, dragImageOffset, dragImageOffset);
return true;
};
@@ -364,10 +600,28 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
};
onBrowserDragEnd = (event) => {
this.dropZone.removeAttribute('enabled');
const draggingBrowser = this._draggingTab.linkedBrowser;
draggingBrowser.style.opacity = '.85';
this.dropZone?.removeAttribute('enabled');
// If we don't have drag state, just clean up what we can
if (!this._dragState) {
this._draggingTab = null;
return;
}
const { tab, browser, isSplitHeaderDrag } = this._dragState;
if (browser) {
browser.style.opacity = isSplitHeaderDrag ? '1' : '.85';
}
// Handle split view specific cleanup
if (isSplitHeaderDrag) {
this.disableTabRearrangeView(event);
}
// Clear state
this._draggingTab = null;
this._dragState = null;
};
_oppositeSide(side) {
@@ -476,10 +730,13 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
*/
resetTabState(tab, forUnsplit) {
tab.splitView = false;
delete tab.splitViewValue;
tab.removeAttribute('split-view');
tab.linkedBrowser.zenModeActive = false;
const container = tab.linkedBrowser.closest('.browserSidebarContainer');
this._removeHeader(container);
this.resetContainerStyle(container);
container.removeEventListener('click', this.handleTabEvent);
container.removeEventListener('mousedown', this.handleTabEvent);
container.removeEventListener('mouseover', this.handleTabEvent);
if (!forUnsplit) {
tab.linkedBrowser.docShellIsActive = false;
@@ -492,6 +749,8 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
* @param {number} groupIndex - The index of the group to remove.
*/
removeGroup(groupIndex) {
const group = this._data[groupIndex];
gZenFolders.expandGroupTabs(group);
if (this.currentView === groupIndex) {
this.deactivateCurrentSplitView();
}
@@ -598,7 +857,7 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
* @returns {boolean} True if the tabs can be split, false otherwise.
*/
contextCanSplitTabs() {
if (window.gBrowser.selectedTabs.length < 2) {
if (window.gBrowser.selectedTabs.length < 2 || window.gBrowser.selectedTabs.length > this.MAX_TABS) {
return false;
}
for (const tab of window.gBrowser.selectedTabs) {
@@ -622,6 +881,27 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
this.updateSplitView(tab);
tab.linkedBrowser.docShellIsActive = true;
}
this._maybeRemoveFakeBrowser();
}
/**
* @param {Tab} tab
*/
_moveTabsToContainer(tabs, relativeTab) {
const relativeTabIsPinned = relativeTab.pinned;
const relativeTabIsEssential = relativeTab.hasAttribute('zen-essential');
if (relativeTabIsEssential) {
gZenPinnedTabManager.addToEssentials(tabs);
} else {
for (const tab of tabs) {
if (relativeTabIsPinned) {
gBrowser.pinTab(tab);
} else {
gBrowser.unpinTab(tab);
}
}
}
}
/**
@@ -630,11 +910,13 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
* @param {Tab[]} tabs - The tabs to split.
* @param {string} gridType - The type of grid layout.
*/
splitTabs(tabs, gridType) {
tabs = tabs.filter((tab) => !tab.hasAttribute('zen-empty-tab'));
if (tabs.length < 2) {
splitTabs(tabs, gridType, initialIndex = 0) {
// TODO: Add support for splitting essential tabs
tabs = tabs.filter((t) => !t.hidden && !t.hasAttribute('zen-empty-tab') && !t.hasAttribute('zen-essential'));
if (tabs.length < 2 || tabs.length > this.MAX_TABS) {
return;
}
this._moveTabsToContainer(tabs, tabs[initialIndex]);
const existingSplitTab = tabs.find((tab) => tab.splitView);
if (existingSplitTab) {
@@ -648,9 +930,10 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
group.layoutTree = this.calculateLayoutTree([...new Set(group.tabs.concat(tabs))], gridType);
} else {
// Add any tabs that are not already in the group
for (const tab of tabs) {
if (!group.tabs.includes(tab)) {
group.tabs.push(tab);
for (let i = 0; i < tabs.length; i++) {
const tab = tabs[i];
if (!group.tabs.includes(tab) && tab.pinned === !!group.pinned) {
gBrowser.moveTabToGroup(tab, this._getSplitViewGroup(tabs));
this.addTabToSplit(tab, group.layoutTree);
}
}
@@ -667,6 +950,16 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
};
this._data.push(splitData);
window.gBrowser.selectedTab = tabs[0];
// Add tabs to the split view group
let splitGroup = this._getSplitViewGroup(tabs);
if (splitGroup) {
for (const tab of tabs) {
if (!tab.group || tab.group !== splitGroup) {
gBrowser.moveTabToGroup(tab, splitGroup);
}
}
}
this.activateSplitView(splitData);
}
@@ -770,11 +1063,49 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
applyGridToTabs(tabs) {
tabs.forEach((tab, index) => {
tab.splitView = true;
const container = tab.linkedBrowser.closest('.browserSidebarContainer');
tab.splitViewValue = this.currentView;
tab.setAttribute('split-view', 'true');
const container = tab.linkedBrowser?.closest('.browserSidebarContainer');
if (!container?.querySelector('.zen-tab-rearrange-button')) {
// insert a header into the container
const header = this._createHeader(container);
container.insertBefore(header, container.firstChild);
}
this.styleContainer(container);
});
}
/**
* Creates a header for the tab.
* @param container
* @returns {*|!Element|HTMLElement|HTMLUnknownElement|HTMLDirectoryElement|HTMLFontElement|HTMLFrameElement|HTMLFrameSetElement|HTMLPreElement|HTMLMarqueeElement|HTMLParamElement}
* @private
*/
_createHeader(container) {
const headerContainer = document.createElement('div');
headerContainer.classList.add('zen-view-splitter-header-container');
const header = document.createElement('div');
header.classList.add('zen-view-splitter-header');
const removeButton = document.createXULElement('toolbarbutton');
removeButton.classList.add('zen-tab-unsplit-button');
removeButton.addEventListener('click', () => {
this.removeTabFromSplit(container);
});
const rearrangeButton = document.createXULElement('toolbarbutton');
rearrangeButton.classList.add('zen-tab-rearrange-button');
header.appendChild(rearrangeButton);
header.appendChild(removeButton);
headerContainer.appendChild(header);
return headerContainer;
}
_removeHeader(container) {
const header = container.querySelector('.zen-view-splitter-header-container');
if (header) {
header.remove();
}
}
/**
* Apply grid layout to tabBrowserPanel
*
@@ -883,7 +1214,7 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
*/
styleContainer(container) {
container.setAttribute('zen-split-anim', 'true');
container.addEventListener('click', this.handleTabEvent);
container.addEventListener('mousedown', this.handleTabEvent);
container.addEventListener('mouseover', this.handleTabEvent);
}
@@ -896,7 +1227,7 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
if (this.rearrangeViewEnabled || (event.type === 'mouseover' && !this.canChangeTabOnHover)) {
return;
}
const container = event.currentTarget;
const container = event.currentTarget.closest('.browserSidebarContainer');
const tab = window.gBrowser.tabs.find((t) => t.linkedBrowser.closest('.browserSidebarContainer') === container);
if (tab) {
window.gBrowser.selectedTab = tab;
@@ -907,7 +1238,7 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
this.tabBrowserPanel.setAttribute('zen-split-resizing', true);
const isVertical = event.target.getAttribute('orient') === 'vertical';
const dimension = isVertical ? 'width' : 'height';
const clientAxis = isVertical ? 'screenX' : 'screenY';
const clientAxis = isVertical ? 'clientX' : 'clientY';
const gridIdx = parseInt(event.target.getAttribute('gridIdx'));
const startPosition = event[clientAxis];
@@ -977,9 +1308,15 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
const browser = tab.linkedBrowser.closest('.browserSidebarContainer');
if (active) {
browser.setAttribute('zen-split', 'true');
browser.addEventListener('dragstart', this.onBrowserDragStart);
browser.addEventListener('dragend', this.onBrowserDragEnd);
} else {
browser.removeAttribute('zen-split');
browser.removeAttribute('style');
browser.removeEventListener('dragstart', this.onBrowserDragStart);
browser.removeEventListener('dragend', this.onBrowserDragEnd);
}
}
}
@@ -1117,7 +1454,7 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
return;
}
const tabs = gBrowser.visibleTabs;
if (tabs.length < 2) {
if (tabs.length < 2 || this.currentView >= 0) {
return;
}
let nextTabIndex = tabs.indexOf(gBrowser.selectedTab) + 1;
@@ -1136,6 +1473,219 @@ class ZenViewSplitter extends ZenDOMOperatedFeature {
: [gBrowser.selectedTab, tabs[nextTabIndex]];
this.splitTabs(selected_tabs, gridType);
}
/**
* @description removes the tab from the split
* @param container - The container element
*/
removeTabFromSplit = (container) => {
const browser = container.querySelector('browser');
if (browser) {
const tab = gBrowser.getTabForBrowser(browser);
if (tab) {
const groupIndex = this._data.findIndex((group) => group.tabs.includes(tab));
this.deactivateCurrentSplitView();
if (groupIndex >= 0) {
this.removeTabFromGroup(tab, groupIndex, true);
}
}
}
};
_maybeRemoveFakeBrowser(select = true) {
gBrowser.tabbox.removeAttribute('style');
if (this.fakeBrowser) {
delete this._hasAnimated;
this.fakeBrowser.remove();
this.fakeBrowser = null;
this._draggingTab._visuallySelected = false;
if (select) {
gBrowser.selectedTab = this._draggingTab;
this._draggingTab = null;
}
}
}
/**
* @description moves the tab to the split view if dragged on a browser
* @param event - The event
* @param draggedTab - The dragged tab
* @returns {boolean} true if the tab was moved to the split view
*/
moveTabToSplitView(event, draggedTab) {
const canDrop = this._canDrop;
this._canDrop = false;
if (!canDrop || !this.fakeBrowser) {
this._maybeRemoveFakeBrowser(false);
return false;
}
const containerRect = this.fakeBrowser.getBoundingClientRect();
const padding = Services.prefs.getIntPref('zen.theme.content-element-separation', 0);
const dropTarget = document.elementFromPoint(containerRect.left + containerRect.width + padding + 5, event.clientY);
const browser = dropTarget?.closest('browser');
if (!browser) {
this._maybeRemoveFakeBrowser(false);
return false;
}
gBrowser.selectedTab = this._draggingTab;
this._draggingTab = null;
const browserContainer = draggedTab.linkedBrowser?.closest('.browserSidebarContainer');
if (browserContainer) {
browserContainer.style.opacity = '0';
}
const droppedOnTab = gBrowser.getTabForBrowser(browser);
if (droppedOnTab && droppedOnTab !== draggedTab) {
// Calculate which side of the target browser the drop occurred
// const browserRect = browser.getBoundingClientRect();
// const hoverSide = this.calculateHoverSide(event.clientX, event.clientY, browserRect);
const hoverSide = 'left';
if (droppedOnTab.splitView) {
// Add to existing split view
const groupIndex = this._data.findIndex((group) => group.tabs.includes(droppedOnTab));
const group = this._data[groupIndex];
if (!group.tabs.includes(draggedTab) && group.tabs.length < this.MAX_TABS) {
// First move the tab to the split view group
let splitGroup = droppedOnTab.group;
if (splitGroup && (!draggedTab.group || draggedTab.group !== splitGroup)) {
this._moveTabsToContainer([draggedTab], droppedOnTab);
gBrowser.moveTabToGroup(draggedTab, splitGroup);
}
const droppedOnSplitNode = this.getSplitNodeFromTab(droppedOnTab);
const parentNode = droppedOnSplitNode.parent;
// Then add the tab to the split view
group.tabs.push(draggedTab);
// If dropping on a side, create a new split in that direction
if (hoverSide !== 'center') {
const splitDirection = hoverSide === 'left' || hoverSide === 'right' ? 'row' : 'column';
if (parentNode.direction !== splitDirection) {
this.splitIntoNode(droppedOnSplitNode, new SplitLeafNode(draggedTab, 50), hoverSide, 0.5);
} else {
this.addTabToSplit(draggedTab, parentNode);
}
} else {
this.addTabToSplit(draggedTab, group.layoutTree);
}
this.activateSplitView(group, true);
}
} else {
// Create new split view with layout based on drop position
let gridType = 'vsep';
//switch (hoverSide) {
// case 'left':
// case 'right':
// gridType = 'vsep';
// break;
// case 'top':
// case 'bottom':
// gridType = 'hsep';
// break;
// default:
// gridType = 'grid';
//}
// Put tabs always as if it was dropped from the left
this.splitTabs([draggedTab, droppedOnTab], gridType, 1);
}
}
if (this._finishAllAnimatingPromise) {
this._finishAllAnimatingPromise.then(() => {
this._maybeRemoveFakeBrowser(false);
});
}
if (browserContainer) {
gZenUIManager.motion
.animate(
browserContainer,
{
scale: [0.97, 1],
opacity: [0, 1],
},
{
type: 'spring',
bounce: 0.4,
duration: 0.2,
delay: 0.1,
}
)
.then(() => {
this._maybeRemoveFakeBrowser(false);
this._finishAllAnimatingPromise = null;
});
}
return true;
}
handleTabDrop(event, urls, replace, inBackground) {
if (!inBackground || replace || urls.length !== 1) {
return false;
}
const url = urls[0];
if (!url.startsWith('panel-')) {
return false;
}
const browserContainer = document.getElementById(url);
const browser = browserContainer?.querySelector('browser');
if (!browser) {
return false;
}
const tab = gBrowser.getTabForBrowser(browser);
if (!tab) {
return false;
}
if (tab.splitView) {
// Unsplit the tab and exit from the drag view
this.dropZone?.removeAttribute('enabled');
this.disableTabRearrangeView(event);
this.removeTabFromSplit(browserContainer);
return true;
}
return false;
}
/**
* Gets or creates a tab group for split view tabs
* @param {Array} tabs Initial tabs to add to the group if creating new
* @returns {TabGroup} The tab group for split view tabs
*/
_getSplitViewGroup(tabs) {
if (tabs.some((tab) => tab.hasAttribute('zen-essential'))) {
return null;
}
// Try to find an existing split view group
let splitGroup = gBrowser.tabGroups.find(
(group) => group.getAttribute('split-view-group') && group.tabs.some((tab) => tabs.includes(tab) && tab.splitView)
);
if (splitGroup) {
return splitGroup;
}
// We can't create an empty group, so only create if we have tabs
if (tabs?.length) {
// Create a new group with the initial tabs
const group = gBrowser.addTabGroup(tabs, {
label: '',
showCreateUI: false,
insertBefore: tabs[0],
forSplitView: true,
});
}
return null;
}
}
window.gZenViewSplitter = new ZenViewSplitter();

View File

@@ -226,6 +226,7 @@
const sidebar = document.getElementById('zen-welcome-page-sidebar');
sidebar.style.width = '100%';
sidebar.appendChild(heart);
sidebar.setAttribute('animate-heart', 'true');
await animate(
'#zen-welcome-heart',
{ opacity: [0, 1, 1, 1, 0], scale: [0.5, 1, 1.2, 1, 1.2] },
@@ -334,17 +335,17 @@
<html:div></html:div>
</hbox>
<html:div id="zen-welcome-initial-essentials-browser-sidebar-essentials">
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://web.whatsapp.com" style="--zen-tab-icon: url('https://web.whatsapp.com/favicon.ico');">
<html:div class="tabbrowser-tab" fadein="" data-url="https://web.whatsapp.com" style="--zen-tab-icon: url('https://web.whatsapp.com/favicon.ico');">
<stack class="tab-stack">
<html:div class="tab-background"></html:div>
</stack>
</html:div>
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://discord.com" style="--zen-tab-icon: url('http://www.google.com/s2/favicons?domain=discord.com');">
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://discord.com" style="--zen-tab-icon: url('https://www.google.com/s2/favicons?domain=discord.com');">
<stack class="tab-stack">
<html:div class="tab-background"></html:div>
</stack>
</html:div>
<html:div class="tabbrowser-tab" fadein="" data-url="https://reddit.com" style="--zen-tab-icon: url('https://www.redditstatic.com/desktop2x/img/favicon/favicon-96x96.png');">
<html:div class="tabbrowser-tab" fadein="" data-url="https://trello.com" style="--zen-tab-icon: url('https://trello.com/favicon.ico');">
<stack class="tab-stack">
<html:div class="tab-background"></html:div>
</stack>
@@ -354,7 +355,7 @@
<html:div class="tab-background"></html:div>
</stack>
</html:div>
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://google.com" style="--zen-tab-icon: url('https://www.google.com/s2/favicons?domain=google.com');">
<html:div class="tabbrowser-tab" fadein="" data-url="https://github.com" style="--zen-tab-icon: url('https://github.githubassets.com/favicons/favicon-dark.png');">
<stack class="tab-stack">
<html:div class="tab-background"></html:div>
</stack>
@@ -364,17 +365,17 @@
<html:div class="tab-background"></html:div>
</stack>
</html:div>
<html:div class="tabbrowser-tab" fadein="" data-url="https://notion.com" style="--zen-tab-icon: url('https://www.notion.so/front-static/favicon.ico');">
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://notion.com" style="--zen-tab-icon: url('https://www.notion.so/front-static/favicon.ico');">
<stack class="tab-stack">
<html:div class="tab-background"></html:div>
</stack>
</html:div>
<html:div class="tabbrowser-tab" fadein="" data-url="https://instagram.com" style="--zen-tab-icon: url('https://www.instagram.com/static/images/ico/favicon-192.png/68d99ba29cc8.png');">
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://calendar.google.com" style="--zen-tab-icon: url('https://calendar.google.com/googlecalendar/images/favicons_2020q4/calendar_6.ico');">
<stack class="tab-stack">
<html:div class="tab-background"></html:div>
</stack>
</html:div>
<html:div class="tabbrowser-tab" fadein="" visuallyselected="" data-url="https://element.io" style="--zen-tab-icon: url('http://www.google.com/s2/favicons?domain=element.io');">
<html:div class="tabbrowser-tab" fadein="" data-url="https://youtube.com" style="--zen-tab-icon: url('https://www.youtube.com/favicon.ico');">
<stack class="tab-stack">
<html:div class="tab-background"></html:div>
</stack>
@@ -453,9 +454,7 @@
async fadeOut() {
gZenThemePicker.panel.removeAttribute('noautohide');
gZenThemePicker.panel.removeAttribute('consumeoutsideclicks');
if (AppConstants.platform != 'macosx') {
await animate(gZenThemePicker.panel, { opacity: [1, 0] });
}
await animate(gZenThemePicker.panel, { opacity: [1, 0] });
gZenThemePicker.panel.hidePopup();
gZenThemePicker.panel.removeAttribute('style');
},

View File

@@ -32,6 +32,10 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
this._resolveSectionsInitialized = resolve;
});
promiseInitialized = new Promise((resolve) => {
this._resolveInitialized = resolve;
});
workspaceIndicatorXUL = `
<hbox class="zen-current-workspace-indicator-icon"></hbox>
<hbox class="zen-current-workspace-indicator-name"></hbox>
@@ -43,6 +47,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
async init() {
if (!this.shouldHaveWorkspaces) {
this._resolveInitialized();
document.getElementById('zen-current-workspace-indicator-container').setAttribute('hidden', 'true');
console.warn('ZenWorkspaces: !!! ZenWorkspaces is disabled in hidden windows !!!');
return; // We are in a hidden window, don't initialize ZenWorkspaces
@@ -139,9 +144,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}
_initializeEmptyTab() {
gBrowser._forZenEmptyTab = true;
this._emptyTab = gBrowser.addTrustedTab('about:blank', { inBackground: true, userContextId: 0 });
this._emptyTab.setAttribute('zen-empty-tab', 'true');
this._emptyTab = gBrowser.addTrustedTab('about:blank', { inBackground: true, userContextId: 0, _forZenEmptyTab: true });
}
registerPinnedResizeObserver() {
@@ -260,6 +263,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
_organizeTabsToWorkspaceSections(workspace, section, pinnedSection, tabs) {
const workspaceTabs = Array.from(tabs).filter((tab) => tab.getAttribute('zen-workspace-id') === workspace.uuid);
let firstNormalTab = null;
for (const tab of workspaceTabs) {
if (tab.hasAttribute('zen-essential')) {
continue; // Ignore essentials as they need to be in their own section
@@ -267,11 +271,20 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
// remove tab from list
tabs.splice(tabs.indexOf(tab), 1);
if (tab.pinned) {
pinnedSection.insertBefore(tab, pinnedSection.lastChild);
pinnedSection.insertBefore(tab, pinnedSection.nextSibling);
} else {
if (!firstNormalTab) {
firstNormalTab = tab;
}
section.insertBefore(tab, section.lastChild);
}
}
// Kind of a hacky fix, but for some reason the first normal tab in the list
// created by session restore is added the the last position of the tab list
// let's just prepend it to the section
if (firstNormalTab) {
section.insertBefore(firstNormalTab, section.firstChild);
}
}
initializeWorkspaceNavigation() {
@@ -512,9 +525,8 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
if (typeof this._workspaceEnabled === 'undefined') {
this._workspaceEnabled =
!Services.prefs.getBoolPref('zen.workspaces.disabled_for_testing', false) && this.shouldHaveWorkspaces;
return this._workspaceEnabled;
}
return this._workspaceEnabled;
return this._workspaceEnabled && !window.closed;
}
getActiveWorkspaceFromCache() {
@@ -591,6 +603,9 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
console.error('ZenWorkspaces: Error initializing theme picker', e);
}
this._selectStartPage();
this._fixTabPositions();
this._resolveInitialized();
this._clearAnyZombieTabs(); // Dont call with await
}
}
@@ -611,7 +626,8 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
if (
(currentTab.isEmpty &&
(currentTab.getAttribute('image') === gPageIcons[currentTabURL] || !currentTab.hasAttribute('image'))) ||
currentTab.hasAttribute('zen-empty-tab')
currentTab.hasAttribute('zen-empty-tab') ||
currentTab._possibleEmptyTab
) {
this.selectEmptyTab();
this._removedByStartupPage = true;
@@ -638,6 +654,26 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
return !window.toolbar.visible || Services.prefs.getBoolPref('browser.tabs.closeWindowWithLastTab');
}
async _clearAnyZombieTabs() {
const tabs = this.allStoredTabs;
const workspaces = await this._workspaces();
for (let tab of tabs) {
const workspaceID = tab.getAttribute('zen-workspace-id');
if (
workspaceID &&
!tab.hasAttribute('zen-essential') &&
!workspaces.workspaces.find((workspace) => workspace.uuid === workspaceID)
) {
// Remove any tabs where their workspace doesn't exist anymore
gBrowser.removeTab(tab, {
animate: false,
skipSessionStore: true,
closeWindowWithLastTab: false,
});
}
}
}
handleTabBeforeClose(tab) {
if (!this.workspaceEnabled || this.__contextIsDelete || this._removedByStartupPage) {
return null;
@@ -985,21 +1021,15 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}.bind(browser.ZenWorkspaces)
);
element.addEventListener(
'dragenter',
function (event) {
if (this.isReorderModeOn(browser) && this.draggedElement) {
element.classList.add('dragover');
}
}.bind(browser.ZenWorkspaces)
);
element.addEventListener('dragenter', function (event) {
if (this.isReorderModeOn(browser) && this.draggedElement) {
element.classList.add('dragover');
}
});
element.addEventListener(
'dragleave',
function (event) {
element.classList.remove('dragover');
}.bind(browser.ZenWorkspaces)
);
element.addEventListener('dragleave', function (event) {
element.classList.remove('dragover');
});
element.addEventListener(
'drop',
@@ -1374,10 +1404,10 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}
_deleteAllTabsInWorkspace(workspaceID) {
for (let tab of gBrowser.tabs) {
for (let tab of this.allStoredTabs) {
if (tab.getAttribute('zen-workspace-id') === workspaceID) {
gBrowser.removeTab(tab, {
animate: true,
animate: false,
skipSessionStore: true,
closeWindowWithLastTab: false,
});
@@ -1485,9 +1515,10 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
this._inChangingWorkspace = true;
try {
await this._performWorkspaceChange(window, ...args);
} finally {
this._inChangingWorkspace = false;
} catch (e) {
console.error('ZenWorkspaces: Error changing workspace', e);
}
this._inChangingWorkspace = false;
}
_cancelSwipeAnimation() {
@@ -1499,18 +1530,19 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
const previousWorkspace = await this.getActiveWorkspace();
alwaysChange = alwaysChange || onInit;
this.activeWorkspace = window.uuid;
if (previousWorkspace && previousWorkspace.uuid === window.uuid && !alwaysChange) {
this._cancelSwipeAnimation();
return;
}
this.activeWorkspace = window.uuid;
const containerId = window.containerTabId?.toString();
const workspaces = await this._workspaces();
// Refresh tab cache
gBrowser.verticalPinnedTabsContainer = this.pinnedTabsContainer;
gBrowser.tabContainer.verticalPinnedTabsContainer = this.pinnedTabsContainer;
gBrowser.verticalPinnedTabsContainer = this.pinnedTabsContainer || gBrowser.verticalPinnedTabsContainer;
gBrowser.tabContainer.verticalPinnedTabsContainer =
this.pinnedTabsContainer || gBrowser.tabContainer.verticalPinnedTabsContainer;
// Move empty tab to the new workspace
this._moveEmptyTabToWorkspace(window.uuid);
@@ -1538,9 +1570,25 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}
_moveEmptyTabToWorkspace(workspaceUuid) {
this._makeSureEmptyTabIsLast();
}
_makeSureEmptyTabIsLast() {
const emptyTab = this._emptyTab;
if (emptyTab) {
this.moveTabToWorkspace(emptyTab, workspaceUuid);
const container = this.activeWorkspaceStrip;
if (container) {
container.insertBefore(emptyTab, container.lastChild);
}
}
this._fixTabPositions();
}
_fixTabPositions() {
// Fix tabs _tPos values relative to the actual order
const tabs = gBrowser.tabs;
for (let i = 0; i < tabs.length; i++) {
tabs[i]._tPos = i;
}
}
@@ -1606,7 +1654,6 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
const elementWorkspaceIndex = workspaces.workspaces.findIndex((w) => w.uuid === elementWorkspaceId);
const offset = -(newWorkspaceIndex - elementWorkspaceIndex) * 100;
const newTransform = `translateX(${offset}%)`;
const isCurrent = offset === 0;
if (shouldAnimate) {
element.removeAttribute('hidden');
animations.push(
@@ -1943,6 +1990,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}
async onLocationChange(browser) {
gZenCompactModeManager.sidebar.toggleAttribute('zen-has-empty-tab', gBrowser.selectedTab.hasAttribute('zen-empty-tab'));
if (!this.workspaceEnabled || this._inChangingWorkspace || this._isClosingWindow) {
return;
}
@@ -1969,6 +2017,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
// Switch workspace if needed
if (workspaceID && workspaceID !== activeWorkspace.uuid && parent.ZenWorkspaces._hasInitializedTabsStrip) {
const workspaces = await parent.ZenWorkspaces._workspaces();
await parent.ZenWorkspaces.changeWorkspace({ uuid: workspaceID });
}
}
@@ -1999,7 +2048,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
const contaienr = document.querySelector(
`#vertical-pinned-tabs-container .zen-workspace-tabs-section[zen-workspace-id="${workspaceId}"]`
);
contaienr.insertBefore(tab, contaienr.firstChild);
contaienr.insertBefore(tab, contaienr.lastChild);
changed = true;
}
if (changed) {
@@ -2207,7 +2256,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
const activeWorkspace = this.getActiveWorkspaceFromCache();
const activeWorkspaceUserContextId = activeWorkspace?.containerTabId;
if (typeof userContextId !== 'undefined' && userContextId !== activeWorkspaceUserContextId) {
if (fromExternal !== true && typeof userContextId !== 'undefined' && userContextId !== activeWorkspaceUserContextId) {
return [userContextId, false, undefined];
}
return [activeWorkspaceUserContextId, true, undefined];
@@ -2264,12 +2313,16 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
const containers = [essentialsContainer, ...pinnedContainers, ...normalContainers];
for (const container of containers) {
for (const tab of container.children) {
if (tab.tagName === 'tab' || tab.tagName == 'tab-group') {
if (tab.tagName === 'tab') {
tabs.push(tab);
const glance = tab.querySelector('.tabbrowser-tab[glance-id]');
if (glance) {
tabs.push(glance);
}
} else if (tab.tagName == 'tab-group') {
for (const groupTab of tab.tabs) {
tabs.push(groupTab);
}
}
}
}
@@ -2311,4 +2364,17 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}
gBrowser.selectedTab = tab;
}
getDefaultContainer() {
if (!this.workspaceEnabled) {
return 0;
}
const workspaces = this._workspaceCache;
if (!workspaces) {
return 0;
}
const activeWorkspace = this.activeWorkspace;
const workspace = workspaces.workspaces.find((workspace) => workspace.uuid === activeWorkspace);
return workspace.containerTabId;
}
})();

View File

@@ -0,0 +1,12 @@
diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs
index 7aef091c0be1cb0ea0be52268949db17032f96d9..5e9105fa671d1b1979f204fc8d3be22771998ad7 100644
--- a/browser/components/BrowserContentHandler.sys.mjs
+++ b/browser/components/BrowserContentHandler.sys.mjs
@@ -1278,6 +1278,7 @@ function maybeRecordToHandleTelemetry(uri, isLaunch) {
".avif",
".htm",
".html",
+ ".jxl",
".pdf",
".shtml",
".xht",

View File

@@ -0,0 +1,22 @@
diff --git a/browser/components/customizableui/ToolbarContextMenu.sys.mjs b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
index 9879487f9ed9ddf825f5fb5c1467ddbd7fbe7a32..9e2565fafe0f5f9afa6065c9f4f522fec745db2a 100644
--- a/browser/components/customizableui/ToolbarContextMenu.sys.mjs
+++ b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
@@ -237,17 +237,6 @@ export var ToolbarContextMenu = {
// autohide item's checked state to mirror the autohide pref.
showFullScreenViewContextMenuItems(popup);
- let toggleVerticalTabsItem = document.getElementById(
- "toolbar-context-toggle-vertical-tabs"
- );
- document.l10n.setAttributes(
- toggleVerticalTabsItem,
- gBrowser.tabContainer?.verticalMode
- ? "toolbar-context-turn-off-vertical-tabs"
- : "toolbar-context-turn-on-vertical-tabs"
- );
- document.getElementById("toolbar-context-customize-sidebar").hidden =
- !gBrowser.tabContainer?.verticalMode;
// View -> Toolbars menu doesn't have the moveToPanel or removeFromToolbar items.
if (!moveToPanel || !removeFromToolbar) {

View File

@@ -0,0 +1,15 @@
diff --git a/browser/components/extensions/parent/ext-browser.js b/browser/components/extensions/parent/ext-browser.js
index 179816fa96ccf26604d52f71232296398dd9bdbd..c35814bae4eab774892af1f6df7465601d4f87ac 100644
--- a/browser/components/extensions/parent/ext-browser.js
+++ b/browser/components/extensions/parent/ext-browser.js
@@ -1218,6 +1218,10 @@ class TabManager extends TabManagerBase {
}
canAccessTab(nativeTab) {
+ if (nativeTab.hasAttribute("zen-empty-tab")) {
+ return false
+ }
+
// Check private browsing access at browser window level.
if (!this.extension.canAccessWindow(nativeTab.ownerGlobal)) {
return false;

View File

@@ -0,0 +1,12 @@
diff --git a/browser/components/extensions/parent/ext-tabs.js b/browser/components/extensions/parent/ext-tabs.js
index b47f0510e32d788dfe7c3109474c4512c9900d4a..49697125a2998bbd50d87c54e2c5974baaf9a7e2 100644
--- a/browser/components/extensions/parent/ext-tabs.js
+++ b/browser/components/extensions/parent/ext-tabs.js
@@ -468,6 +468,7 @@ this.tabs = class extends ExtensionAPIPersistent {
}
let tab = tabManager.getWrapper(event.originalTarget);
+ if (!tab) return;
let changeInfo = {};
for (let prop of needed) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/places/PlacesUIUtils.sys.mjs b/browser/components/places/PlacesUIUtils.sys.mjs
index 0f79ba5dd42116d626445b86f6b24731d2fa8aad..76d692db1731e84b28d9035b03e34c176c12bd23 100644
index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658514db39f 100644
--- a/browser/components/places/PlacesUIUtils.sys.mjs
+++ b/browser/components/places/PlacesUIUtils.sys.mjs
@@ -58,6 +58,7 @@ class BookmarkState {
@@ -95,7 +95,7 @@ index 0f79ba5dd42116d626445b86f6b24731d2fa8aad..76d692db1731e84b28d9035b03e34c17
+ const placeholders = workspacesToRemove.map(() => '?').join(',');
+ await db.execute(`
+ DELETE FROM zen_bookmarks_workspaces
+ WHERE bookmark_guid = :bookmark_guid
+ WHERE bookmark_guid = :bookmark_guid
+ AND workspace_uuid IN (${placeholders})
+ `, [bookmarkGuid, ...workspacesToRemove]);
+
@@ -157,3 +157,20 @@ index 0f79ba5dd42116d626445b86f6b24731d2fa8aad..76d692db1731e84b28d9035b03e34c17
/**
* Append transactions to update tags by given information.
*
@@ -902,8 +1011,15 @@ export var PlacesUIUtils = {
aNode,
aWhere,
aWindow,
- { aPrivate = false, userContextId = 0 } = {}
+ { aPrivate = false, userContextId = undefined } = {}
) {
+ if (typeof userContextId == "undefined") {
+ try {
+ let browserWindow = getBrowserWindow(aWindow);
+ userContextId = browserWindow.ZenWorkspaces.getDefaultContainer();
+ } catch {}
+ }
+
if (
aNode &&
lazy.PlacesUtils.nodeIsURI(aNode) &&

View File

@@ -944,11 +944,6 @@ Preferences.addAll([
type: 'bool',
default: true,
},
{
id: 'zen.workspaces.individual-pinned-tabs',
type: 'bool',
default: true,
},
{
id: 'zen.workspaces.show-icon-strip',
type: 'bool',

View File

@@ -20,9 +20,6 @@
<checkbox id="zenWorkspacesHideDefaultContainer"
data-l10n-id="zen-settings-workspaces-hide-default-container-indicator"
preference="zen.workspaces.hide-default-container-indicator"/>
<checkbox id="zenWorkspacesAllowPinnedTabsForDifferentWorkspaces"
data-l10n-id="zen-settings-workspaces-allow-pinned-tabs-for-different-workspaces"
preference="zen.workspaces.individual-pinned-tabs"/>
<checkbox id="zenWorkspacesDisplayAsIconStrip"
data-l10n-id="zen-settings-workspaces-display-as-icon-strip"
preference="zen.workspaces.show-icon-strip"/>

View File

@@ -0,0 +1,13 @@
diff --git a/browser/components/search/SearchOneOffs.sys.mjs b/browser/components/search/SearchOneOffs.sys.mjs
index 6dcd68f7ec4da72f9510ac3c8ff1cecffbd70e92..f712b95d03be46f7d81bad4113f533f0515a92b9 100644
--- a/browser/components/search/SearchOneOffs.sys.mjs
+++ b/browser/components/search/SearchOneOffs.sys.mjs
@@ -446,7 +446,7 @@ export class SearchOneOffs {
// For the search-bar, always show the one-off buttons where there is an
// option to add an engine.
let addEngineNeeded = isSearchBar && addEngines.length;
- let hideOneOffs = (await this.willHide()) && !addEngineNeeded;
+ let hideOneOffs = (await this.willHide()) && !addEngineNeeded || Services.prefs.getBoolPref("zen.urlbar.hide-one-offs");
// The _engineInfo cache is used by more consumers, thus it is not a good
// representation of whether this method already updated the one-off buttons

View File

@@ -1,8 +1,17 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 908743177d9f95e2e6549c689e7a493ca8668701..181c4819b052e444e56e75f1cb40b4bc299569fb 100644
index f814772114948f87cbb3c3a7231c95ea1f68d776..f7d1f1f05f33b42be6856fad52ee323751af56ee 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -3848,6 +3848,7 @@ var SessionStoreInternal = {
@@ -3171,7 +3171,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) {
return;
}
- if (aTab == aWindow.FirefoxViewHandler.tab) {
+ if (aTab == aWindow.FirefoxViewHandler.tab || aTab.hasAttribute("zen-empty-tab")) {
return;
}
@@ -3881,6 +3881,7 @@ var SessionStoreInternal = {
aWindow.gBrowser.selectedTab = newTab;
}
@@ -10,7 +19,7 @@ index 908743177d9f95e2e6549c689e7a493ca8668701..181c4819b052e444e56e75f1cb40b4bc
// Restore the state into the new tab.
this.restoreTab(newTab, tabState, {
restoreImmediately: aRestoreImmediately,
@@ -5315,14 +5316,14 @@ var SessionStoreInternal = {
@@ -5355,14 +5356,14 @@ var SessionStoreInternal = {
}
let tabbrowser = aWindow.gBrowser;
@@ -27,7 +36,16 @@ index 908743177d9f95e2e6549c689e7a493ca8668701..181c4819b052e444e56e75f1cb40b4bc
continue;
}
let tabData = lazy.TabState.collect(tab, TAB_CUSTOM_VALUES.get(tab));
@@ -6042,6 +6043,15 @@ var SessionStoreInternal = {
@@ -5381,7 +5382,7 @@ var SessionStoreInternal = {
// 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,
// since it's only inserted into the tab strip after it's selected).
- if (aWindow.FirefoxViewHandler.tab?.selected) {
+ if (aWindow.FirefoxViewHandler.tab?.selected || tabbrowser.selectedTab.hasAttribute("zen-empty-tab")) {
selectedIndex = 1;
winData.title = tabbrowser.tabs[0].label;
}
@@ -6086,6 +6087,18 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.
@@ -35,7 +53,10 @@ index 908743177d9f95e2e6549c689e7a493ca8668701..181c4819b052e444e56e75f1cb40b4bc
+ tab.setAttribute("zen-essential", "true");
+ }
+ if (tabData.zenIsEmpty) {
+ tab.setAttribute("zen-empty-tab", "true");
+ tab.setAttribute("zen-empty-tab", "true");
+ }
+ if (tabData.zenHasStaticLabel) {
+ tab.setAttribute("zen-has-static-label", "true");
+ }
+ if (tabData.zenPinnedId) {
+ tab.setAttribute("zen-pin-id", tabData.zenPinnedId);

View File

@@ -1,8 +1,13 @@
diff --git a/browser/components/sessionstore/TabState.sys.mjs b/browser/components/sessionstore/TabState.sys.mjs
index 8f7ed557e6aa61e7e16ed4a8d785ad5fe651b3d8..05dbb00375523819163bcd225074117ef02b8b37 100644
index 8f7ed557e6aa61e7e16ed4a8d785ad5fe651b3d8..4c9f17408b912a2c51ebc1a670062203bf4994f3 100644
--- a/browser/components/sessionstore/TabState.sys.mjs
+++ b/browser/components/sessionstore/TabState.sys.mjs
@@ -84,6 +84,14 @@ class _TabState {
@@ -80,10 +80,19 @@ class _TabState {
tabData.muteReason = tab.muteReason;
}
- if (tab.group) {
+ if (tab.group && !tab.group.hasAttribute("split-view-group")) {
tabData.groupId = tab.group.id;
}
@@ -13,6 +18,7 @@ index 8f7ed557e6aa61e7e16ed4a8d785ad5fe651b3d8..05dbb00375523819163bcd225074117e
+ tabData.zenPinnedEntry = tab.getAttribute("zen-pinned-entry");
+ tabData.zenPinnedIcon = tab.getAttribute("zen-pinned-icon");
+ tabData.zenIsEmpty = tab.hasAttribute("zen-empty-tab");
+ tabData.zenHasStaticLabel = tab.hasAttribute("zen-has-static-label");
+
tabData.searchMode = tab.ownerGlobal.gURLBar.getSearchMode(browser, true);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index d41c486c02a6f09dcff5741a59ad8b617294c481..1c150fd8863335ee356601f7872c1fdc2086dcab 100644
index 777eabb7524f2b021a03b3f54d69faee49b7381d..192d2fa058f7d9f043532c0ae6e4c08129d16b8e 100644
--- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js
@@ -16,6 +16,7 @@
@@ -10,9 +10,9 @@ index d41c486c02a6f09dcff5741a59ad8b617294c481..1c150fd8863335ee356601f7872c1fdc
<stack class="tab-icon-stack">
<hbox class="tab-throbber"/>
<hbox class="tab-icon-pending"/>
@@ -35,8 +36,10 @@
@@ -32,8 +33,10 @@
<hbox class="tab-secondary-label">
<label class="tab-icon-sound-label tab-icon-sound-pip-label" data-l10n-id="browser-tab-audio-pip" role="presentation"/>
<label class="tab-icon-sound-label tab-icon-sound-tooltip-label" role="presentation"/>
</hbox>
+ <label class="tab-reset-pin-label" data-l10n-id="tab-reset-pin-label" role="presentation"/>
</vbox>
@@ -48,16 +48,16 @@ index d41c486c02a6f09dcff5741a59ad8b617294c481..1c150fd8863335ee356601f7872c1fdc
}
get lastAccessed() {
@@ -451,6 +454,8 @@
@@ -438,6 +441,8 @@
this.style.MozUserFocus = "ignore";
} else if (
event.target.classList.contains("tab-close-button") ||
+ event.target.classList.contains("tab-reset-button") ||
+ event.target.classList.contains("tab-reset-pin-button") ||
event.target.classList.contains("tab-icon-overlay")
event.target.classList.contains("tab-icon-overlay") ||
event.target.classList.contains("tab-audio-button")
) {
eventMaySelectTab = false;
@@ -544,6 +549,7 @@
@@ -536,6 +541,7 @@
if (this.multiselected) {
gBrowser.removeMultiSelectedTabs();
} else {
@@ -65,7 +65,7 @@ index d41c486c02a6f09dcff5741a59ad8b617294c481..1c150fd8863335ee356601f7872c1fdc
gBrowser.removeTab(this, {
animate: true,
triggeringEvent: event,
@@ -553,6 +559,14 @@
@@ -545,6 +551,14 @@
// (see tabbrowser-tabs 'click' handler).
gBrowser.tabContainer._blockDblClick = true;
}
@@ -80,11 +80,11 @@ index d41c486c02a6f09dcff5741a59ad8b617294c481..1c150fd8863335ee356601f7872c1fdc
}
on_dblclick(event) {
@@ -576,6 +590,8 @@
@@ -568,6 +582,8 @@
animate: true,
triggeringEvent: event,
});
+ } else if (this.hasAttribute('zen-essential')) {
+ } else if (this.hasAttribute('zen-essential') && !event.target.classList.contains("tab-icon-overlay")) {
+ gZenPinnedTabManager._onTabResetPinButton(event, this, 'reset');
}
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935dfcf339fa 100644
index 628aa6596627c85efe361fc1ece8fd58f7ee653e..c62727bad57eda3b9d9a73c1df739a92f194f0c2 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -406,11 +406,50 @@
@@ -412,11 +412,50 @@
return this.tabContainer.visibleTabs;
}
@@ -19,19 +19,6 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
+ return i;
+ }
+
+ get _numVisiblePinTabsWithoutGlance() {
+ let i = 0;
+ for (let tab of this.tabs) {
+ if (!tab.pinned) {
+ break;
+ }
+ if (!tab.hidden && !tab.hasAttribute("zen-glance-tab")) {
+ i++;
+ }
+ }
+ return i;
+ }
+
+ get _numZenEssentials() {
+ let i = 0;
+ for (let tab of this.tabs) {
@@ -42,6 +29,19 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
+ }
+ return i;
+ }
+
+ get _numZenVisibleEssentials() {
+ let i = 0;
+ for (let tab of this.tabs) {
+ if (!tab.hasAttribute("zen-essential") && !tab.hasAttribute("zen-glance-tab")) {
+ break;
+ }
+ if (!tab.hidden) {
+ i += !tab.hasAttribute("zen-glance-tab");
+ }
+ }
+ return i;
+ }
+
get pinnedTabCount() {
- for (var i = 0; i < this.tabs.length; i++) {
@@ -55,25 +55,42 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
}
return i;
}
@@ -807,7 +846,7 @@
@@ -811,12 +850,13 @@
}
this.showTab(aTab);
if (this.tabContainer.verticalMode) {
- this.ungroupTab(aTab);
- if (this.tabContainer.verticalMode) {
+ const handled = gZenFolders.handleTabPin(aTab);
+ if (!handled) this.ungroupTab(aTab);
+ if (this.tabContainer.verticalMode && !handled) {
this._handleTabMove(aTab, () =>
- this.verticalPinnedTabsContainer.appendChild(aTab)
+ aTab.hasAttribute("zen-essential") ? document.getElementById("zen-essentials-container").appendChild(aTab) : this.verticalPinnedTabsContainer.insertBefore(aTab, this.verticalPinnedTabsContainer.lastChild)
);
} else {
- } else {
+ } else if (!handled) {
this.moveTabTo(aTab, this.pinnedTabCount, { forceStandaloneTab: true });
@@ -828,7 +867,7 @@
}
aTab.setAttribute("pinned", "true");
@@ -830,12 +870,15 @@
}
if (this.tabContainer.verticalMode) {
+ const handled = gZenFolders.handleTabUnpin(aTab);
this._handleTabMove(aTab, () => {
// we remove this attribute first, so that allTabs represents
// the moving of a tab from the vertical pinned tabs container
// and back into arrowscrollbox.
aTab.removeAttribute("pinned");
- this.tabContainer.arrowScrollbox.prepend(aTab);
+ ZenWorkspaces.activeWorkspaceStrip.prepend(aTab);
+ if (!handled) {
+ ZenWorkspaces.activeWorkspaceStrip.prepend(aTab);
+ }
});
} else {
this.moveTabTo(aTab, this.pinnedTabCount - 1, {
@@ -1055,6 +1094,8 @@
@@ -1018,6 +1061,8 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
@@ -82,7 +99,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (
aIconURL &&
!aLoadingPrincipal &&
@@ -1065,6 +1106,9 @@
@@ -1028,6 +1073,9 @@
);
return;
}
@@ -92,7 +109,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL;
@@ -1310,6 +1354,7 @@
@@ -1273,6 +1321,7 @@
if (!this._previewMode) {
newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed();
@@ -100,7 +117,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -1462,6 +1507,9 @@
@@ -1425,6 +1474,9 @@
}
let activeEl = document.activeElement;
@@ -110,7 +127,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
// If focus is on the old tab, move it to the new tab.
if (activeEl == oldTab) {
newTab.focus();
@@ -1785,7 +1833,7 @@
@@ -1748,7 +1800,7 @@
}
_setTabLabel(aTab, aLabel, { beforeTabOpen, isContentTitle, isURL } = {}) {
@@ -119,7 +136,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
return false;
}
@@ -1888,7 +1936,7 @@
@@ -1851,7 +1903,7 @@
newIndex = this.selectedTab._tPos + 1;
}
@@ -128,17 +145,25 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
let browser;
if (targetTab) {
browser = this.getBrowserForTab(targetTab);
@@ -2222,7 +2270,8 @@
@@ -2108,6 +2160,7 @@
uriIsAboutBlank,
userContextId,
skipLoad,
+ _forZenEmptyTab,
} = {}) {
let b = document.createXULElement("browser");
// Use the JSM global to create the permanentKey, so that if the
@@ -2181,8 +2234,7 @@
// we use a different attribute name for this?
b.setAttribute("name", name);
}
-
- if (this._allowTransparentBrowser) {
+ if (this._allowTransparentBrowser || this._forZenEmptyTab) {
+ delete this._forZenEmptyTab;
+ if (this._allowTransparentBrowser || _forZenEmptyTab) {
b.setAttribute("transparent", "true");
}
@@ -2387,7 +2436,7 @@
@@ -2347,7 +2399,7 @@
let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID();
@@ -147,7 +172,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary.
@@ -2446,8 +2495,8 @@
@@ -2406,8 +2458,8 @@
// If we transitioned from one browser to two browsers, we need to set
// hasSiblings=false on both the existing browser and the new browser.
if (this.tabs.length == 2) {
@@ -158,20 +183,28 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
} else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
}
@@ -2679,6 +2728,12 @@
@@ -2629,6 +2681,7 @@
schemelessInput,
hasValidUserGestureActivation = false,
textDirectiveUserActivation = false,
+ _forZenEmptyTab,
} = {}
) {
// all callers of addTab that pass a params object need to pass
@@ -2639,6 +2692,12 @@
);
}
+ let hasZenDefaultUserContextId = false;
+ let zenForcedWorkspaceId = undefined;
+ if (typeof ZenWorkspaces !== "undefined") {
+ if (typeof ZenWorkspaces !== "undefined" && !_forZenEmptyTab) {
+ [userContextId, hasZenDefaultUserContextId, zenForcedWorkspaceId] = ZenWorkspaces.getContextIdIfNeeded(userContextId, fromExternal, allowInheritPrincipal);
+ }
+
if (!UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.start("browser.tabs.opening", "initting", window);
}
@@ -2742,6 +2797,12 @@
@@ -2702,6 +2761,15 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -180,11 +213,22 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
+ }
+ if (zenForcedWorkspaceId !== undefined) {
+ t.setAttribute("zen-workspace-id", zenForcedWorkspaceId);
+ }
+ if (_forZenEmptyTab) {
+ t.setAttribute("zen-empty-tab", "true");
+ }
if (insertTab) {
// insert the tab into the tab container in the correct position
this._insertTabAtIndex(t, {
@@ -2885,6 +2946,9 @@
@@ -2726,6 +2794,7 @@
initialBrowsingContextGroupId,
openWindowInfo,
skipLoad,
+ _forZenEmptyTab,
}));
if (focusUrlBar) {
@@ -2845,6 +2914,9 @@
}
}
@@ -194,7 +238,45 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
// Additionally send pinned tab events
if (pinned) {
this._notifyPinnedStatus(t);
@@ -3403,6 +3467,24 @@
@@ -2904,6 +2976,7 @@
label = "",
insertBefore = null,
showCreateUI = false,
+ forSplitView = false,
} = {}
) {
if (!tabs?.length) {
@@ -2918,7 +2991,12 @@
id = `${Date.now()}-${Math.round(Math.random() * 100)}`;
}
let group = this._createTabGroup(id, color, false, label);
- this.tabContainer.insertBefore(
+ if (forSplitView) {
+ group.setAttribute('split-view-group', true);
+ }
+ group.essential = tabs.some(tab => tab.hasAttribute("essential"));
+ group.pinned = group.essential || tabs.some(tab => tab.pinned);
+ (group.essential ? document.getElementById("zen-essentials-container") : (group.pinned ? this.verticalPinnedTabsContainer : this.tabContainer)).insertBefore(
group,
insertBefore?.group ?? insertBefore
);
@@ -3126,6 +3204,7 @@
initialBrowsingContextGroupId,
openWindowInfo,
skipLoad,
+ _forZenEmptyTab
}
) {
// If we don't have a preferred remote type, and we have a remote
@@ -3189,6 +3268,7 @@
openWindowInfo,
name,
skipLoad,
+ _forZenEmptyTab
});
}
@@ -3367,6 +3447,27 @@
) {
tabWasReused = true;
tab = this.selectedTab;
@@ -204,6 +286,9 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
+ if (tabData.zenIsEmpty) {
+ tab.setAttribute("zen-empty-tab", "true");
+ }
+ if (tabData.zenHasStaticLabel) {
+ tab.setAttribute("zen-has-static-label", "true");
+ }
+ if (tabData.zenPinnedId) {
+ tab.setAttribute("zen-pin-id", tabData.zenPinnedId);
+ }
@@ -219,7 +304,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (!tabData.pinned) {
this.unpinTab(tab);
} else {
@@ -3416,6 +3498,7 @@
@@ -3380,6 +3481,7 @@
restoreTabsLazily && !select && !tabData.pinned;
let url = "about:blank";
@@ -227,7 +312,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (tabData.entries?.length) {
let activeIndex = (tabData.index || tabData.entries.length) - 1;
// Ensure the index is in bounds.
@@ -3451,7 +3534,24 @@
@@ -3415,7 +3517,27 @@
skipLoad: true,
preferredRemoteType,
});
@@ -241,6 +326,9 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
+ 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");
+ }
@@ -253,7 +341,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (select) {
tabToSelect = tab;
}
@@ -3464,8 +3564,8 @@
@@ -3428,8 +3550,8 @@
// inserted in the DOM. If the tab is not yet in the DOM,
// just insert it in the right place from the start.
if (!tab.parentNode) {
@@ -264,7 +352,17 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
tab.toggleAttribute("pinned", true);
this.tabContainer._invalidateCachedTabs();
// Then ensure all the tab open/pinning information is sent.
@@ -3729,7 +3829,7 @@
@@ -3504,6 +3626,9 @@
this.selectedTab = tabToSelect;
this.removeTab(leftoverTab);
}
+ else {
+ this.selectedTab._possibleEmptyTab = true; // Not needed, but just in case.
+ }
if (tabs.length > 1 || !tabs[0].selected) {
this._updateTabsAfterInsert();
@@ -3693,7 +3818,7 @@
// Ensure we have an index if one was not provided.
if (typeof index != "number") {
// Move the new tab after another tab if needed, to the end otherwise.
@@ -273,7 +371,17 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (
!bulkOrderedOpen &&
((openerTab &&
@@ -3780,7 +3880,7 @@
@@ -3736,18 +3861,18 @@
// Ensure index is within bounds.
if (tab.pinned) {
- index = Math.max(index, 0);
- index = Math.min(index, this.pinnedTabCount);
+ index = Math.max(index, tab.hasAttribute("zen-essential") ? 0 : this._numZenEssentials);
+ index = Math.min(index, tab.hasAttribute("zen-essential") ? this._numZenEssentials : this.pinnedTabCount);
} else {
index = Math.max(index, this.pinnedTabCount);
index = Math.min(index, this.tabs.length);
}
/** @type {MozTabbrowserTab|undefined} */
@@ -281,8 +389,12 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
+ let tabAfter = this.tabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).at(index);
this.tabContainer._invalidateCachedTabs();
if (tabGroup) {
@@ -4095,6 +4195,9 @@
- if (tabGroup) {
+ if (tabGroup && !tabGroup.hasAttribute("split-view-group")) {
if (tabAfter && tabAfter.group == tabGroup) {
// Place at the front of, or between tabs in, the same tab group
this.tabContainer.insertBefore(tab, tabAfter);
@@ -4059,6 +4184,9 @@
return;
}
@@ -292,7 +404,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
this.removeTabs(selectedTabs);
}
@@ -4427,6 +4530,7 @@
@@ -4391,6 +4519,7 @@
skipSessionStore,
} = {}
) {
@@ -300,7 +412,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.finish("browser.tabs.opening", window);
}
@@ -4443,6 +4547,12 @@
@@ -4407,6 +4536,12 @@
TelemetryStopwatch.start("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
}
@@ -313,7 +425,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
// Handle requests for synchronously removing an already
// asynchronously closing tab.
if (!animate && aTab.closing) {
@@ -4457,7 +4567,9 @@
@@ -4421,7 +4556,9 @@
// frame created for it (for example, by updating the visually selected
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
@@ -324,7 +436,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -4471,7 +4583,6 @@
@@ -4435,7 +4572,6 @@
TelemetryStopwatch.cancel("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
return;
}
@@ -332,7 +444,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
let lockTabSizing =
!this.tabContainer.verticalMode &&
!aTab.pinned &&
@@ -4610,14 +4721,14 @@
@@ -4574,14 +4710,14 @@
!!this.tabsInCollapsedTabGroups.length;
if (
aTab.visible &&
@@ -349,7 +461,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -4641,6 +4752,7 @@
@@ -4605,6 +4741,7 @@
newTab = true;
}
@@ -357,7 +469,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -4681,9 +4793,7 @@
@@ -4645,9 +4782,7 @@
aTab._mouseleave();
if (newTab) {
@@ -368,7 +480,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
} else {
TabBarVisibility.update();
}
@@ -4812,6 +4922,8 @@
@@ -4776,6 +4911,8 @@
this.tabs[i]._tPos = i;
}
@@ -377,7 +489,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (!this._windowIsClosing) {
if (wasPinned) {
this.tabContainer._positionPinnedTabs();
@@ -5025,7 +5137,7 @@
@@ -4994,7 +5131,7 @@
!excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) {
@@ -386,7 +498,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
}
// Try to find a remaining tab that comes after the given tab
@@ -5047,7 +5159,7 @@
@@ -5016,7 +5153,7 @@
}
if (tab) {
@@ -395,7 +507,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
}
// If no qualifying visible tab was found, see if there is a tab in
@@ -5465,10 +5577,10 @@
@@ -5434,10 +5571,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -408,28 +520,58 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -5706,9 +5818,9 @@
@@ -5675,7 +5812,7 @@
// Don't allow mixing pinned and unpinned tabs.
if (aTab.pinned) {
- aIndex = Math.min(aIndex, this.pinnedTabCount - 1);
+ aIndex = aTab.hasAttribute('zen-essential') ? Math.min(aIndex, this._numZenEssentials) : Math.min(aIndex, this._numVisiblePinTabs - 1);
+ aIndex = aTab.hasAttribute('zen-essential') ? Math.min(aIndex, this._numZenEssentials - 1) : Math.min(aIndex, this.pinnedTabCount - 1);
} else {
- aIndex = Math.max(aIndex, this.pinnedTabCount);
+ aIndex = Math.max(aIndex, this._numVisiblePinTabsWithoutGlance + this._numZenEssentials);
aIndex = Math.max(aIndex, this.pinnedTabCount);
}
@@ -5684,11 +5821,18 @@
}
if (aTab._tPos == aIndex) {
return;
@@ -5717,7 +5829,7 @@
this._lastRelatedTabMap = new WeakMap();
this._handleTabMove(aTab, () => {
- let neighbor = this.tabs[aIndex];
+ let neighbor = this.tabs.filter(tab => !tab.hasAttribute("zen-glance-tab") && !tab.hasAttribute("zen-empty-tab"))[aIndex];
if (forceStandaloneTab && neighbor.group) {
- if (forceStandaloneTab && neighbor.group) {
+ let neighbor = this.tabs.filter(tab => !tab.hasAttribute("zen-glance-tab"))[aIndex];
+ const _tPos = aTab._tPos;
+ if ((forceStandaloneTab && neighbor.group) || neighbor.group?.hasAttribute("split-view-group")) {
neighbor = neighbor.group;
}
@@ -5802,7 +5914,7 @@
- if (neighbor && aIndex >= aTab._tPos) {
+ if (aTab.group?.hasAttribute("split-view-group")) {
+ aTab = aTab.group;
+ }
+ if (aTab.group?.hasAttribute("split-view-group") && neighbor == aTab.group) {
+ return;
+ }
+ if (neighbor && aIndex >= _tPos) {
neighbor.after(aTab);
} else {
this.tabContainer.insertBefore(aTab, neighbor);
@@ -5697,7 +5841,7 @@
}
moveTabToGroup(aTab, aGroup) {
- if (aTab.pinned) {
+ if (aTab.pinned != !!aGroup.pinned) {
return;
}
if (aTab.group && aTab.group.id === aGroup.id) {
@@ -5721,6 +5865,10 @@
moveActionCallback();
+ ZenWorkspaces._makeSureEmptyTabIsLast();
+ gZenViewSplitter._maybeRemoveFakeBrowser(false);
+ gZenViewSplitter._canDrop = false;
+
// Clear tabs cache after moving nodes because the order of tabs may have
// changed.
this.tabContainer._invalidateCachedTabs();
@@ -5771,7 +5919,7 @@
createLazyBrowser,
};
@@ -438,15 +580,15 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
if (aIndex < numPinned || (aTab.pinned && aIndex == numPinned)) {
params.pinned = true;
}
@@ -7443,6 +7555,7 @@
@@ -7415,6 +7563,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
+ if (!this.mTab.selected) this.mTab.setAttribute("unread", "true");
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
gBrowser.syncThrobberAnimations(this.mTab);
@@ -8411,7 +8524,7 @@ var TabContextMenu = {
}
@@ -8381,7 +8530,7 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !multiselectionContext;
@@ -455,7 +597,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
// Move Tab items
let contextMoveTabOptions = document.getElementById(
"context_moveTabOptions"
@@ -8444,7 +8557,7 @@ var TabContextMenu = {
@@ -8414,7 +8563,7 @@ var TabContextMenu = {
let contextMoveTabToStart = document.getElementById("context_moveToStart");
let isFirstTab =
tabsToMove[0] == visibleTabs[0] ||
@@ -464,7 +606,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935d
contextMoveTabToStart.disabled = isFirstTab && allSelectedTabsAdjacent;
document.getElementById("context_openTabInWindow").disabled =
@@ -8677,6 +8790,7 @@ var TabContextMenu = {
@@ -8647,6 +8796,7 @@ var TabContextMenu = {
if (this.contextTab.multiselected) {
gBrowser.removeMultiSelectedTabs();
} else {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2b437ce20 100644
index fa96568d366fd3608f9bd583fa793150bd815c8b..64e93a414f1544b89af05c636c587620036896db 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -94,7 +94,7 @@
@@ -11,7 +11,15 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
}
return true;
};
@@ -362,7 +362,7 @@
@@ -135,6 +135,7 @@
this.previewPanel = null;
this.allTabs[0].label = this.emptyTabTitle;
+ this.allTabs[0]._possibleEmptyTab = true;
// Hide the secondary text for locales where it is unsupported due to size constraints.
const language = Services.locale.appLocaleAsBCP47;
@@ -339,7 +340,7 @@
// and we're not hitting the scroll buttons.
if (
event.button != 0 ||
@@ -20,7 +28,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
event.composedTarget.localName == "toolbarbutton"
) {
return;
@@ -411,6 +411,7 @@
@@ -388,6 +389,7 @@
// Reset the "ignored click" flag
target._ignoredCloseButtonClicks = false;
}
@@ -28,26 +36,27 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
}
/* Protects from close-tab-button errant doubleclick:
@@ -659,7 +660,7 @@
@@ -683,7 +685,7 @@
if (this.#isContainerVerticalPinnedExpanded(tab)) {
// In expanded vertical mode, the max number of pinned tabs per row is dynamic
// Set this before adjusting dragged tab's position
- let pinnedTabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount);
+ let pinnedTabs = this.visibleTabs.slice(0, gBrowser._numVisiblePinTabs);
+ let pinnedTabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(0, gBrowser._numZenVisibleEssentials);
let tabsPerRow = 0;
let position = 0;
for (let pinnedTab of pinnedTabs) {
@@ -859,6 +860,9 @@
@@ -883,6 +885,10 @@
}
let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
+ if (draggedTab && effects === "move") {
+ gZenPinnedTabManager.applyDragoverClass(event, draggedTab);
+ gZenViewSplitter.onBrowserDragEndToSplit(event);
+ }
if (
(effects == "move" || effects == "copy") &&
this == draggedTab.container &&
@@ -972,6 +976,14 @@
@@ -996,6 +1002,14 @@
this._tabDropIndicator.hidden = true;
event.stopPropagation();
@@ -62,18 +71,23 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
if (draggedTab && dropEffect == "copy") {
// copy the dropped tab (wherever it's from)
let newIndex = this._getDropIndex(event);
@@ -1010,8 +1022,8 @@
@@ -1034,10 +1048,11 @@
}
} else {
let pinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
- let tabs = this.visibleTabs.slice(
- pinned ? 0 : numPinned,
- pinned ? numPinned : undefined
+ let numPinned = gBrowser._numVisiblePinTabs;
+ let essential = draggedTab.hasAttribute("zen-essential");
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(
pinned ? 0 : numPinned,
pinned ? numPinned : undefined
+ pinned ? (essential ? 0 : gBrowser._numZenVisibleEssentials) : numPinned,
+ pinned ? (essential ? gBrowser._numZenVisibleEssentials : numPinned) : undefined
);
@@ -1090,7 +1102,7 @@
let size = this.verticalMode ? "height" : "width";
let screenAxis = this.verticalMode ? "screenY" : "screenX";
@@ -1114,7 +1129,7 @@
let postTransitionCleanup = () => {
tab.removeAttribute("tabdrop-samewindow");
@@ -82,16 +96,41 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
if (dropIndex !== false) {
gBrowser.moveTabTo(tab, dropIndex);
if (!directionForward) {
@@ -1100,7 +1112,7 @@
gBrowser.syncThrobberAnimations(tab);
@@ -1122,7 +1137,7 @@
}
}
};
- if (gReduceMotion) {
+ if (gReduceMotion || true) {
+ if (true || gReduceMotion) {
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -1263,7 +1275,8 @@
@@ -1249,7 +1264,7 @@
return;
}
}
-
+ if (gZenViewSplitter.handleTabDrop(event, urls, replace, inBackground)) return;
gBrowser.loadTabs(urls, {
inBackground,
replace,
@@ -1279,13 +1294,23 @@
return;
}
- this._finishMoveTogetherSelectedTabs(draggedTab);
this._finishAnimateTabMove();
+ if (!dt.mozUserCancelled && dt.dropEffect == "none" && !this._isCustomizing) {
+ const moved = gZenViewSplitter.moveTabToSplitView(event, draggedTab);
+ if (moved) {
+ delete draggedTab._dragData;
+ return;
+ }
+ }
+
+ this._finishMoveTogetherSelectedTabs(draggedTab);
+
if (
dt.mozUserCancelled ||
dt.dropEffect != "none" ||
@@ -101,7 +140,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
) {
delete draggedTab._dragData;
return;
@@ -1478,7 +1491,7 @@
@@ -1517,7 +1542,7 @@
}
get newTabButton() {
@@ -110,7 +149,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
}
get verticalMode() {
@@ -1498,7 +1511,7 @@
@@ -1537,28 +1562,40 @@
if (this.#allTabs) {
return this.#allTabs;
}
@@ -119,8 +158,14 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
// remove arrowScrollbox periphery element
children.pop();
@@ -1512,14 +1525,29 @@
}
// explode tab groups
// Iterate backwards over the array to preserve indices while we modify
// things in place
- for (let i = children.length - 1; i >= 0; i--) {
- if (children[i].tagName == "tab-group") {
- children.splice(i, 1, ...children[i].tabs);
- }
- }
this.#allTabs = [
- ...this.verticalPinnedTabsContainer.children,
@@ -134,12 +179,14 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
+ if (glanceTab) {
+ // 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
+ this.#allTabs.splice(Math.min(i + 1, lastPinnedTabIdx), 0, glanceTab);
+ this.#allTabs.splice(Math.max(i + 1, lastPinnedTabIdx), 0, glanceTab);
+ i++;
+ } else if (this.#allTabs[i].classList.contains("vertical-pinned-tabs-container-separator")) {
+ // remove the separator from the list
+ this.#allTabs.splice(i, 1);
+ i--;
+ } else if (this.#allTabs[i].tagName == "tab-group") {
+ this.#allTabs.splice(i, 1, ...this.#allTabs[i].tabs);
+ }
+ }
return this.#allTabs;
@@ -151,7 +198,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
return children.filter(node => node.tagName == "tab-group");
}
@@ -1540,7 +1568,7 @@
@@ -1579,7 +1616,7 @@
*/
get visibleTabs() {
if (!this.#visibleTabs) {
@@ -160,7 +207,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
}
return this.#visibleTabs;
}
@@ -1574,10 +1602,8 @@
@@ -1613,10 +1650,8 @@
return this.#focusableItems;
}
@@ -173,7 +220,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
let focusableItems = [];
for (let child of children) {
@@ -1593,6 +1619,7 @@
@@ -1632,6 +1667,7 @@
}
this.#focusableItems = [
@@ -181,7 +228,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
...verticalPinnedTabsContainer.children,
...focusableItems,
];
@@ -1603,6 +1630,7 @@
@@ -1642,6 +1678,7 @@
_invalidateCachedTabs() {
this.#allTabs = null;
this._invalidateCachedVisibleTabs();
@@ -189,7 +236,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
}
_invalidateCachedVisibleTabs() {
@@ -1617,8 +1645,8 @@
@@ -1656,8 +1693,8 @@
#isContainerVerticalPinnedExpanded(tab) {
return (
this.verticalMode &&
@@ -200,7 +247,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
);
}
@@ -1633,7 +1661,7 @@
@@ -1672,7 +1709,7 @@
if (node == null) {
// We have a container for non-tab elements at the end of the scrollbox.
@@ -209,7 +256,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
}
node.before(tab);
@@ -1733,7 +1761,7 @@
@@ -1772,7 +1809,7 @@
// 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);
// Attach the long click popup to all of them.
@@ -218,7 +265,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
const newTab2 = this.newTabButton;
const newTabVertical = document.getElementById(
"vertical-tabs-newtab-button"
@@ -1816,7 +1844,7 @@
@@ -1855,7 +1892,7 @@
let rect = ele => {
return window.windowUtils.getBoundsWithoutFlushing(ele);
};
@@ -227,7 +274,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
if (tab && rect(tab).width <= this._tabClipWidth) {
this.setAttribute("closebuttons", "activetab");
} else {
@@ -1828,10 +1856,12 @@
@@ -1867,10 +1904,12 @@
_handleTabSelect(aInstant) {
let selectedTab = this.selectedItem;
@@ -240,7 +287,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
selectedTab._notselectedsinceload = false;
}
@@ -1843,7 +1873,7 @@
@@ -1882,7 +1921,7 @@
return;
}
@@ -249,7 +296,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
if (!tabs.length) {
return;
}
@@ -1879,7 +1909,7 @@
@@ -1918,7 +1957,7 @@
if (isEndTab && !this._hasTabTempMaxWidth) {
return;
}
@@ -258,7 +305,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
// Force tabs to stay the same width, unless we're closing the last tab,
// which case we need to let them expand just enough so that the overall
// tabbar width is the same.
@@ -1894,7 +1924,7 @@
@@ -1933,7 +1972,7 @@
let tabsToReset = [];
for (let i = numPinned; i < tabs.length; i++) {
let tab = tabs[i];
@@ -267,7 +314,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
if (!isEndTab) {
// keep tabs the same width
tab.style.transition = "none";
@@ -1960,16 +1990,15 @@
@@ -1999,16 +2038,15 @@
// 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.
@@ -286,11 +333,11 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
for (let i = 0; i < numPinned; i++) {
tabs[i].style.marginInlineStart = "";
- verticalTabsContainer.appendChild(tabs[i]);
+ tabs[i].hasAttribute("zen-essential") ? document.getElementById("zen-essentials-container").appendChild(tabs[i]) : verticalTabsContainer.insertBefore(tabs[i], verticalTabsContainer.lastChild);
+ tabs[i].hasAttribute("zen-essential") ? document.getElementById("zen-essentials-container").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);
}
}
@@ -1977,9 +2006,7 @@
@@ -2016,9 +2054,7 @@
}
_resetVerticalPinnedTabs() {
@@ -301,7 +348,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
if (!verticalTabsContainer.children.length) {
return;
@@ -1992,8 +2019,8 @@
@@ -2031,8 +2067,8 @@
}
_positionPinnedTabs() {
@@ -312,37 +359,81 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
let absPositionHorizontalTabs =
this.overflowing && tabs.length > numPinned && numPinned > 0;
@@ -2003,6 +2030,7 @@
@@ -2041,7 +2077,7 @@
if (this.verticalMode) {
this._updateVerticalPinnedTabs();
} else if (absPositionHorizontalTabs) {
+ return;
- } else if (absPositionHorizontalTabs) {
+ } else if (absPositionHorizontalTabs && false) {
let layoutData = this._pinnedTabsLayoutCache;
let uiDensity = document.documentElement.getAttribute("uidensity");
if (!layoutData || layoutData.uiDensity != uiDensity) {
@@ -2074,7 +2102,7 @@
@@ -2113,7 +2149,7 @@
return;
}
- let tabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount);
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(0, gBrowser._numVisiblePinTabs);
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(0, gBrowser._numZenVisibleEssentials);
let directionX = screenX > dragData.animLastScreenX;
let directionY = screenY > dragData.animLastScreenY;
@@ -2257,9 +2285,9 @@
@@ -2121,7 +2157,7 @@
dragData.animLastScreenX = screenX;
let { width: tabWidth, height: tabHeight } =
- draggedTab.getBoundingClientRect();
+ (draggedTab.group?.hasAttribute("split-view-group") ? draggedTab.group : draggedTab).getBoundingClientRect();
let shiftSizeX = tabWidth * movingTabs.length;
let shiftSizeY = tabHeight;
dragData.tabWidth = tabWidth;
@@ -2296,10 +2332,11 @@
}
let pinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
- let tabs = this.visibleTabs.slice(
- pinned ? 0 : numPinned,
- pinned ? numPinned : undefined
+ let numPinned = gBrowser._numVisiblePinTabs;
+ let essential = draggedTab.hasAttribute("zen-essential");
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(
+ pinned ? gBrowser._numZenEssentials : numPinned,
pinned ? numPinned : undefined
+ pinned ? (essential ? 0 : gBrowser._numZenVisibleEssentials) : numPinned,
+ pinned ? (essential ? gBrowser._numZenVisibleEssentials : numPinned) : undefined
);
@@ -2502,8 +2530,9 @@
if (this.#rtlMode) {
@@ -2348,7 +2385,11 @@
translate = Math.min(Math.max(translate, firstBound), lastBound);
for (let tab of movingTabs) {
- tab.style.transform = `${translateAxis}(${translate}px)`;
+ if (tab.group?.hasAttribute("split-view-group")) {
+ tab.group.style.transform = `${translateAxis}(${translate}px)`;
+ } else {
+ tab.style.transform = `${translateAxis}(${translate}px)`;
+ }
}
dragData.translatePos = translate;
@@ -2484,12 +2525,16 @@
// Shift background tabs to leave a gap where the dragged tab
// would currently be dropped.
for (let tab of tabs) {
- if (tab == draggedTab) {
+ if (tab == draggedTab || (tab.group?.hasAttribute("split-view-group") && tab.group == draggedTab.group)) {
continue;
}
let shift = getTabShift(tab, newIndex);
let transform = shift ? `${translateAxis}(${shift}px)` : "";
+ if (tab.group?.hasAttribute("split-view-group")) {
+ tab.group.style.transform = transform;
+ } else {
tab.style.transform = transform;
+ }
if (tab.group?.tabs[0] == tab) {
tab.group.style.setProperty(
"--tabgroup-dragover-transform",
@@ -2541,8 +2586,9 @@
);
}
@@ -354,7 +445,24 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
return;
}
@@ -2668,9 +2697,9 @@
@@ -2553,6 +2599,7 @@
tab.style.transform = "";
if (tab.group) {
tab.group.style.removeProperty("--tabgroup-dragover-transform");
+ tab.group.style.transform = "";
}
tab.removeAttribute("dragover-createGroup");
}
@@ -2604,7 +2651,7 @@
movingTab._moveTogetherSelectedTabsData.newIndex = movingTabNewIndex;
movingTab._moveTogetherSelectedTabsData.animate = false;
};
- if (gReduceMotion) {
+ if (true || gReduceMotion) {
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -2707,9 +2754,9 @@
function newIndex(aTab, index) {
// Don't allow mixing pinned and unpinned tabs.
if (aTab.pinned) {
@@ -366,7 +474,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
}
}
@@ -2754,7 +2783,7 @@
@@ -2793,7 +2840,7 @@
}
_notifyBackgroundTab(aTab) {
@@ -375,73 +483,3 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
return;
}
@@ -2772,12 +2801,14 @@
selectedTab = {
left: selectedTab.left,
right: selectedTab.right,
+ top: selectedTab.top,
+ bottom: selectedTab.bottom,
};
}
return [
this._lastTabToScrollIntoView,
this.arrowScrollbox.scrollClientRect,
- { left: lastTabRect.left, right: lastTabRect.right },
+ lastTabRect,
selectedTab,
];
})
@@ -2794,8 +2825,11 @@
delete this._lastTabToScrollIntoView;
// Is the new tab already completely visible?
if (
- scrollRect.left <= tabRect.left &&
- tabRect.right <= scrollRect.right
+ this.verticalMode
+ ? scrollRect.top <= tabRect.top &&
+ tabRect.bottom <= scrollRect.bottom
+ : scrollRect.left <= tabRect.left &&
+ tabRect.right <= scrollRect.right
) {
return;
}
@@ -2803,21 +2837,29 @@
if (this.arrowScrollbox.smoothScroll) {
// Can we make both the new tab and the selected tab completely visible?
if (
- !selectedRect ||
- Math.max(
- tabRect.right - selectedRect.left,
- selectedRect.right - tabRect.left
- ) <= scrollRect.width
+ !selectedRect || (this.verticalMode
+ ? Math.max(
+ tabRect.bottom - selectedRect.top,
+ selectedRect.bottom - tabRect.top
+ ) <= scrollRect.height
+ : Math.max(
+ tabRect.right - selectedRect.left,
+ selectedRect.right - tabRect.left
+ ) <= scrollRect.width)
) {
this.arrowScrollbox.ensureElementIsVisible(tabToScrollIntoView);
return;
}
- this.arrowScrollbox.scrollByPixels(
- this.#rtlMode
- ? selectedRect.right - scrollRect.right
- : selectedRect.left - scrollRect.left
- );
+ let scrollPixels;
+ if (this.verticalMode) {
+ scrollPixels = tabRect.top - selectedRect.top;
+ } else if (this.#rtlMode) {
+ scrollPixels = selectedRect.right - scrollRect.right;
+ } else {
+ scrollPixels = selectedRect.left - scrollRect.left;
+ }
+ this.arrowScrollbox.scrollByPixels(scrollPixels);
}
if (!this._animateElement.hasAttribute("highlight")) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f4e0945b0 100644
index 02c328f0d0724b0cf95c820fe49a43e94a97b3c2..30387bf4f128fdc1d687ee4f6c5a51eb0bee29ea 100644
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
@@ -67,6 +67,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
@@ -16,7 +16,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
const DEFAULT_FORM_HISTORY_NAME = "searchbar-history";
const SEARCH_BUTTON_CLASS = "urlbar-search-button";
@@ -348,7 +355,11 @@ export class UrlbarInput {
@@ -349,7 +356,11 @@ export class UrlbarInput {
// See _on_select(). HTMLInputElement.select() dispatches a "select"
// event but does not set the primary selection.
this._suppressPrimaryAdjustment = true;
@@ -28,7 +28,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
this._suppressPrimaryAdjustment = false;
}
@@ -424,6 +435,10 @@ export class UrlbarInput {
@@ -425,6 +436,10 @@ export class UrlbarInput {
hideSearchTerms = false,
isSameDocument = false
) {
@@ -39,7 +39,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
// We only need to update the searchModeUI on tab switch conditionally
// as we only persist searchMode with ScotchBonnet enabled.
if (
@@ -697,8 +712,11 @@ export class UrlbarInput {
@@ -698,8 +713,11 @@ export class UrlbarInput {
return;
}
}
@@ -52,10 +52,10 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
}
/**
@@ -1087,7 +1105,11 @@ export class UrlbarInput {
@@ -1098,7 +1116,11 @@ export class UrlbarInput {
}
if (!result.payload.providesSearchMode) {
if (!this.#providesSearchMode(result)) {
- this.view.close({ elementPicked: true });
+ if (this._zenHandleUrlbarClose) {
+ this._zenHandleUrlbarClose(true);
@@ -65,7 +65,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
}
this.controller.recordSelectedResult(event, result);
@@ -2144,6 +2166,11 @@ export class UrlbarInput {
@@ -2157,6 +2179,11 @@ export class UrlbarInput {
this.setAttribute("breakout-extend", "true");
@@ -77,7 +77,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
// Enable the animation only after the first extend call to ensure it
// doesn't run when opening a new window.
if (!this.hasAttribute("breakout-extend-animate")) {
@@ -2163,6 +2190,11 @@ export class UrlbarInput {
@@ -2176,6 +2203,11 @@ export class UrlbarInput {
return;
}
@@ -89,7 +89,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
this.removeAttribute("breakout-extend");
this.#updateTextboxPosition();
}
@@ -2946,7 +2978,7 @@ export class UrlbarInput {
@@ -2998,7 +3030,7 @@ export class UrlbarInput {
*/
_trimValue(val) {
let trimmedValue = lazy.UrlbarPrefs.get("trimURLs")
@@ -98,7 +98,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
: val;
// Only trim value if the directionality doesn't change to RTL and we're not
// showing a strikeout https protocol.
@@ -3305,7 +3337,7 @@ export class UrlbarInput {
@@ -3365,7 +3397,7 @@ export class UrlbarInput {
} else {
where = lazy.BrowserUtils.whereToOpenLink(event, false, false);
}
@@ -107,7 +107,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
if (where == "current") {
where = "tab";
} else if (where == "tab") {
@@ -3320,6 +3352,9 @@ export class UrlbarInput {
@@ -3380,6 +3412,9 @@ export class UrlbarInput {
) {
where = "current";
}
@@ -117,7 +117,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
return where;
}
@@ -3859,6 +3894,11 @@ export class UrlbarInput {
@@ -3921,6 +3956,11 @@ export class UrlbarInput {
}
_on_click(event) {
@@ -129,7 +129,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
if (
event.target == this.inputField ||
event.target == this._inputContainer ||
@@ -3930,7 +3970,7 @@ export class UrlbarInput {
@@ -3992,7 +4032,7 @@ export class UrlbarInput {
}
}
@@ -138,7 +138,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
this.view.autoOpen({ event });
} else {
if (this._untrimOnFocusAfterKeydown) {
@@ -3970,9 +4010,12 @@ export class UrlbarInput {
@@ -4032,9 +4072,12 @@ export class UrlbarInput {
}
_on_mousedown(event) {
@@ -152,7 +152,7 @@ index 50968dc04b527438acf30151f0c2e92f8b45097c..7f3579d39e53a36135fbabb786a6e07f
if (
event.target != this.inputField &&
@@ -3982,8 +4025,8 @@ export class UrlbarInput {
@@ -4044,8 +4087,8 @@ export class UrlbarInput {
break;
}

View File

@@ -0,0 +1,12 @@
diff --git a/browser/installer/windows/msix/AppxManifest.xml.in b/browser/installer/windows/msix/AppxManifest.xml.in
index b81a73518a183b7b1d178793886c66f44651058d..89690a4177229b70013bcf35ec1d805fff7e1b26 100644
--- a/browser/installer/windows/msix/AppxManifest.xml.in
+++ b/browser/installer/windows/msix/AppxManifest.xml.in
@@ -61,6 +61,7 @@
<uap:FileType>.avif</uap:FileType>
<uap:FileType>.htm</uap:FileType>
<uap:FileType>.html</uap:FileType>
+ <uap:FileType>.jxl</uap:FileType>
<uap:FileType>.pdf</uap:FileType>
<uap:FileType>.shtml</uap:FileType>
<uap:FileType>.xht</uap:FileType>

View File

@@ -0,0 +1,46 @@
diff --git a/browser/installer/windows/nsis/shared.nsh b/browser/installer/windows/nsis/shared.nsh
index b7f8e1453089ab5f1945e1a65f038e17b5273571..5297f5ed70fe3446e55be37df486fb4ad791a446 100644
--- a/browser/installer/windows/nsis/shared.nsh
+++ b/browser/installer/windows/nsis/shared.nsh
@@ -513,6 +513,7 @@ ${RemoveDefaultBrowserAgentShortcut}
${AddAssociationIfNoneExist} ".svg" "FirefoxHTML$5"
${AddAssociationIfNoneExist} ".webp" "FirefoxHTML$5"
${AddAssociationIfNoneExist} ".avif" "FirefoxHTML$5"
+ ${AddAssociationIfNoneExist} ".jxl" "FirefoxHTML$5"
${AddAssociationIfNoneExist} ".pdf" "FirefoxPDF$5"
@@ -609,6 +610,7 @@ ${RemoveDefaultBrowserAgentShortcut}
WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".svg" "FirefoxHTML$2"
WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".webp" "FirefoxHTML$2"
WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".avif" "FirefoxHTML$2"
+ WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".jxl" "FirefoxHTML$2"
WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".pdf" "FirefoxPDF$2"
@@ -681,6 +683,7 @@ ${RemoveDefaultBrowserAgentShortcut}
${WriteApplicationsSupportedType} ${RegKey} ".webm"
${WriteApplicationsSupportedType} ${RegKey} ".webp"
${WriteApplicationsSupportedType} ${RegKey} ".avif"
+ ${WriteApplicationsSupportedType} ${RegKey} ".jxl"
${WriteApplicationsSupportedType} ${RegKey} ".xht"
${WriteApplicationsSupportedType} ${RegKey} ".xhtml"
${WriteApplicationsSupportedType} ${RegKey} ".xml"
@@ -1728,6 +1731,8 @@ Function SetAsDefaultAppUserHKCU
Pop $0
AppAssocReg::SetAppAsDefault "$R9" ".avif" "file"
Pop $0
+ AppAssocReg::SetAppAsDefault "$R9" ".jxl" "file"
+ Pop $0
AppAssocReg::SetAppAsDefault "$R9" ".xht" "file"
Pop $0
AppAssocReg::SetAppAsDefault "$R9" ".xhtml" "file"
@@ -1857,7 +1862,7 @@ FunctionEnd
; uninstalled.
; Do all of that twice, once for the local machine and once for the current user
-
+
; Remove protocol handlers
ClearErrors
ReadRegStr $0 HKLM "Software\Classes\${_PROTOCOL}\DefaultIcon" ""

View File

@@ -0,0 +1,12 @@
diff --git a/browser/installer/windows/nsis/uninstaller.nsi b/browser/installer/windows/nsis/uninstaller.nsi
index 559c8b46ee06bc42c91da49b5d9e397fe8ff6126..62094a5d98712a41a607ba01ca2adfa1e4f51ccd 100644
--- a/browser/installer/windows/nsis/uninstaller.nsi
+++ b/browser/installer/windows/nsis/uninstaller.nsi
@@ -507,6 +507,7 @@ Section "Uninstall"
${un.RegCleanFileHandler} ".svg" "FirefoxHTML-$AppUserModelID"
${un.RegCleanFileHandler} ".webp" "FirefoxHTML-$AppUserModelID"
${un.RegCleanFileHandler} ".avif" "FirefoxHTML-$AppUserModelID"
+ ${un.RegCleanFileHandler} ".jxl" "FirefoxHTML-$AppUserModelID"
${un.RegCleanFileHandler} ".pdf" "FirefoxPDF-$AppUserModelID"

View File

@@ -0,0 +1,13 @@
diff --git a/browser/modules/URILoadingHelper.sys.mjs b/browser/modules/URILoadingHelper.sys.mjs
index 313e895980c502d79f64f5a6ab838f6a96c83835..8a1a853567aeae2c368005d3757815799457212a 100644
--- a/browser/modules/URILoadingHelper.sys.mjs
+++ b/browser/modules/URILoadingHelper.sys.mjs
@@ -512,7 +512,7 @@ export const URILoadingHelper = {
// page. If a load request bounces off for the currently selected tab,
// we'll open a new tab instead.
let tab = w.gBrowser.getTabForBrowser(targetBrowser);
- if (tab == w.FirefoxViewHandler.tab) {
+ if (tab == w.FirefoxViewHandler.tab || tab.hasAttribute("zen-empty-tab")) {
where = "tab";
targetBrowser = null;
} else if (

View File

@@ -1,17 +1,17 @@
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002f3008dde 100644
index 01815c2114a627e5cac183c702bd82f1bd4f58f8..f47bd9c8490cd8fc4bb686ad0012ce70ab4bac8f 100644
--- a/browser/themes/shared/tabbrowser/tabs.css
+++ b/browser/themes/shared/tabbrowser/tabs.css
@@ -33,7 +33,7 @@
--tab-icon-overlay-fill: light-dark(white, black);
--tab-icon-overlay-stroke: light-dark(black, white);
@@ -31,7 +31,7 @@
--tab-block-margin: 4px;
--tab-icon-end-margin: 5.5px;
--tab-label-line-height: 1.7;
- --tab-loading-fill: #0A84FF;
+ --tab-loading-fill: var(--zen-primary-color);
--tab-hover-background-color: color-mix(in srgb, currentColor 11%, transparent);
--tab-selected-textcolor: var(--toolbar-color);
--tab-selected-bgcolor: var(--toolbar-bgcolor);
@@ -207,8 +207,7 @@
@@ -209,8 +209,7 @@
}
#tabbrowser-tabs[positionpinnedtabs] > #tabbrowser-arrowscrollbox > &[pinned] {
@@ -21,7 +21,7 @@ index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002
}
#tabbrowser-tabs[movingtab] &:is([selected], [multiselected]) {
@@ -238,7 +237,6 @@
@@ -249,7 +248,6 @@
}
:root:not([uidensity=compact]) &[pinned] {
@@ -29,7 +29,7 @@ index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002
}
&:is([selected], [multiselected]) {
@@ -252,6 +250,7 @@
@@ -263,6 +261,7 @@
border-radius: inherit;
position: relative;
overflow: hidden;
@@ -37,15 +37,60 @@ index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002
&::before {
position: absolute;
@@ -511,7 +510,6 @@
background-repeat: no-repeat;
border-radius: 10px;
-moz-context-properties: fill;
- fill: var(--tab-icon-overlay-fill);
}
@@ -437,6 +436,7 @@
.tab-icon-image {
-moz-context-properties: fill, stroke;
fill: currentColor;
+ border-radius: 4px;
/* Apply crisp rendering for favicons at exactly 2dppx resolution */
@media (resolution: 2dppx) {
@@ -502,7 +502,7 @@
z-index: 1; /* Overlay tab title */
#tabbrowser-tabs[orient=vertical] & {
- top: 7px;
+ top: -7px;
}
@@ -569,14 +567,14 @@
&[crashed] {
@@ -510,7 +510,7 @@
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]),
- &[pinned]:not([crashed]) {
+ &:not([crashed]) {
&[soundplaying] {
list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg");
}
@@ -540,7 +540,7 @@
background-image: linear-gradient(var(--audio-overlay-extra-background)),
linear-gradient(var(--toolbox-bgcolor));
-moz-context-properties: fill;
- fill: var(--tab-selected-textcolor);
+ fill: var(--tab-selected-textcolor) !important;
color-scheme: var(--tab-selected-color-scheme);
border-radius: var(--border-radius-circle);
@@ -572,7 +572,7 @@
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:is([soundplaying], [muted], [activemedia-blocked]),
- &[pinned]:is([soundplaying], [muted], [activemedia-blocked]),
+ &:is([soundplaying], [muted], [activemedia-blocked]),
&[crashed] {
display: revert;
}
@@ -586,7 +586,7 @@
--button-min-height-small: 24px;
--button-border-radius: var(--border-radius-small);
- #tabbrowser-tabs:is([orient="vertical"][expanded], [orient="horizontal"]) &:not([pinned]):not([crashed]) {
+ #tabbrowser-tabs:is([orient="horizontal"]) &:not([pinned]):not([crashed]) {
&:is([soundplaying], [muted], [activemedia-blocked]) {
display: block;
}
@@ -617,14 +617,14 @@
}
&[textoverflow] {
@@ -64,7 +109,7 @@ index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002
direction: rtl;
mask-image: linear-gradient(to right, transparent, black var(--tab-label-mask-size));
}
@@ -1135,7 +1133,7 @@
@@ -1170,7 +1170,7 @@
}
}
@@ -73,7 +118,7 @@ index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002
#vertical-tabs-newtab-button {
appearance: none;
min-height: var(--tab-min-height);
@@ -1146,7 +1144,7 @@
@@ -1181,7 +1181,7 @@
margin-inline: var(--tab-inner-inline-margin);
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text {
@@ -82,7 +127,7 @@ index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002
}
&:hover {
@@ -1170,7 +1168,7 @@
@@ -1205,7 +1205,7 @@
* 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.
*/
@@ -91,7 +136,7 @@ index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002
margin-block: var(--tab-block-margin);
}
@@ -1194,7 +1192,6 @@
@@ -1229,7 +1229,6 @@
}
#vertical-pinned-tabs-container {
@@ -99,7 +144,7 @@ index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002
display: none;
grid-template-columns: repeat(auto-fit, minmax(var(--tab-pinned-min-width-expanded), auto));
overflow-y: auto;
@@ -1347,7 +1344,7 @@
@@ -1439,7 +1438,7 @@
toolbarbutton:not(#firefox-view-button),
toolbarpaletteitem:not(#wrapper-firefox-view-button)
) ~ #tabbrowser-tabs {
@@ -108,7 +153,7 @@ index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..9e11e715ade485c33ba4c8f719b41002
padding-inline-start: calc(var(--tab-overflow-pinned-tabs-width) + 2px);
margin-inline-start: 2px;
}
@@ -1381,7 +1378,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
@@ -1473,7 +1472,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
list-style-image: url(chrome://global/skin/icons/plus.svg);
}

View File

@@ -1,7 +1,16 @@
diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css
index 45aa61f93d354da432eceb1c276466609a6910d0..6585158b855af19689e86ef6a833f63736ec225c 100644
index 574f83af7fa49ddcdff6711ca8b1d3bed1a35e0c..7919f21f6b0b4df2f197b9c6f0e134ff85d50d0a 100644
--- a/browser/themes/shared/urlbar-searchbar.css
+++ b/browser/themes/shared/urlbar-searchbar.css
@@ -5,7 +5,7 @@
@namespace html url("http://www.w3.org/1999/xhtml");
:root {
- --urlbar-container-padding: 1px;
+ --urlbar-container-padding: 4px;
--urlbar-margin-inline: 5px;
--urlbar-padding-block: 4px;
}
@@ -291,7 +291,9 @@
}
@@ -13,3 +22,14 @@ index 45aa61f93d354da432eceb1c276466609a6910d0..6585158b855af19689e86ef6a833f637
width: calc(var(--urlbar-width) + 2 * var(--urlbar-margin-inline));
> .urlbar-input-container {
@@ -583,8 +585,8 @@
.urlbar-revert-button,
.urlbar-go-button,
.search-go-button {
- width: calc(var(--urlbar-min-height) - 2px /* border */ - 2 * var(--urlbar-container-padding));
- height: calc(var(--urlbar-min-height) - 2px /* border */ - 2 * var(--urlbar-container-padding));
+ width: calc(var(--urlbar-min-height) + 2px /* border */ - 2 * var(--urlbar-container-padding));
+ height: calc(var(--urlbar-min-height) + 2px /* border */ - 2 * var(--urlbar-container-padding));
border-radius: var(--urlbar-icon-border-radius);
padding: var(--urlbar-icon-padding);
color: inherit;

View File

@@ -0,0 +1,13 @@
diff --git a/browser/themes/shared/urlbarView.css b/browser/themes/shared/urlbarView.css
index 1c654e053ca8a014d7c2a9fc076cf15afba9c903..f2f63809d0a36db2774755db2b782f41a9bbe82b 100644
--- a/browser/themes/shared/urlbarView.css
+++ b/browser/themes/shared/urlbarView.css
@@ -20,7 +20,7 @@
--urlbarView-small-font-size: 0.85em;
- --urlbarView-results-padding: 4px;
+ --urlbarView-results-padding: 8px;
--urlbarView-row-gutter: 2px;
--urlbarView-item-inline-padding: var(--urlbar-icon-padding);
--urlbarView-item-block-padding: 6px;

View File

@@ -4,7 +4,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
.subviewbutton {
.subviewbutton,
#zen-welcome-start-button {
-moz-context-properties: fill, fill-opacity !important;
fill: currentColor !important;
}
@@ -23,6 +24,10 @@
list-style-image: url('move-tab.svg') !important;
}
.zen-tab-unsplit-button {
list-style-image: url('unpin.svg') !important;
}
#forward-button,
#zen-sidebar-web-panel-forward {
list-style-image: url('forward.svg') !important;
@@ -381,7 +386,8 @@
list-style-image: url('arrow-down.svg') !important;
}
.zen-workspace-actions-reorder-icon {
.zen-workspace-actions-reorder-icon,
.zen-tab-rearrange-button {
list-style-image: url('drag-indicator.svg') !important;
}
@@ -1138,3 +1144,9 @@ menupopup > menuitem:is([type='checkbox']) .menu-iconic-left {
padding-inline-start: 6px;
}
}
#toolbar-context-toggle-vertical-tabs,
#toolbar-context-customize-sidebar,
#sidebarRevampSeparator {
display: none !important;
}

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><circle cx="9" cy="2.25" r="1.5" data-color="color-2"></circle><line x1="7.25" y1="16.5" x2="7.25" y2="6.24"></line><line x1="10.75" y1="6.24" x2="10.75" y2="16.5"></line><path d="M2.75,5.75c1.751,.3,3.86,.531,6.25,.531,1.777,0,3.894-.128,6.25-.531"></path><line x1="7.25" y1="11.25" x2="10.75" y2="11.25"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><circle cx="9" cy="2.25" r="1.5" data-color="color-2"></circle><line x1="7.25" y1="16.5" x2="7.25" y2="6.24"></line><line x1="10.75" y1="6.24" x2="10.75" y2="16.5"></line><path d="M2.75,5.75c1.751,.3,3.86,.531,6.25,.531,1.777,0,3.894-.128,6.25-.531"></path><line x1="7.25" y1="11.25" x2="10.75" y2="11.25"></line></g></svg>

Before

Width:  |  Height:  |  Size: 572 B

After

Width:  |  Height:  |  Size: 572 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M14.181,3.257c-.221-.865-.998-1.507-1.931-1.507H5.75c-1.105,0-2,.896-2,2v12.5l5.25-3.5,5.25,3.5v-3"></path><line x1="14.25" y1="5.75" x2="14.25" y2="10.75" data-color="color-2"></line><line x1="16.75" y1="8.25" x2="11.75" y2="8.25" data-color="color-2"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M14.181,3.257c-.221-.865-.998-1.507-1.931-1.507H5.75c-1.105,0-2,.896-2,2v12.5l5.25-3.5,5.25,3.5v-3"></path><line x1="14.25" y1="5.75" x2="14.25" y2="10.75" data-color="color-2"></line><line x1="16.75" y1="8.25" x2="11.75" y2="8.25" data-color="color-2"></line></g></svg>

Before

Width:  |  Height:  |  Size: 528 B

After

Width:  |  Height:  |  Size: 528 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="15.25 6.5 9 12.75 2.75 6.5"></polyline></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="15.25 6.5 9 12.75 2.75 6.5"></polyline></g></svg>

Before

Width:  |  Height:  |  Size: 316 B

After

Width:  |  Height:  |  Size: 316 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="11.5 15.25 5.25 9 11.5 2.75"></polyline></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="11.5 15.25 5.25 9 11.5 2.75"></polyline></g></svg>

Before

Width:  |  Height:  |  Size: 317 B

After

Width:  |  Height:  |  Size: 317 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="6.5 2.75 12.75 9 6.5 15.25"></polyline></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="6.5 2.75 12.75 9 6.5 15.25"></polyline></g></svg>

Before

Width:  |  Height:  |  Size: 316 B

After

Width:  |  Height:  |  Size: 316 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="2.75 11.5 9 5.25 15.25 11.5"></polyline></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="2.75 11.5 9 5.25 15.25 11.5"></polyline></g></svg>

Before

Width:  |  Height:  |  Size: 317 B

After

Width:  |  Height:  |  Size: 317 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><line x1="5.75" y1="7.25" x2="5.75" y2="13.75"></line><line x1="14.75" y1="5.75" x2="14.75" y2="12.25"></line><path d="m8.6399,3.0186l4.9461-.8246c.61-.102,1.164.368,1.164.986v2.57l-9,1.5"></path><circle cx="3.75" cy="13.75" r="2"></circle><circle cx="12.75" cy="12.25" r="2"></circle><line x1="3.75" y1="1.25" x2="3.75" y2="6.25" data-color="color-2"></line><line x1="6.25" y1="3.75" x2="1.25" y2="3.75" data-color="color-2"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><line x1="5.75" y1="7.25" x2="5.75" y2="13.75"></line><line x1="14.75" y1="5.75" x2="14.75" y2="12.25"></line><path d="m8.6399,3.0186l4.9461-.8246c.61-.102,1.164.368,1.164.986v2.57l-9,1.5"></path><circle cx="3.75" cy="13.75" r="2"></circle><circle cx="12.75" cy="12.25" r="2"></circle><line x1="3.75" y1="1.25" x2="3.75" y2="6.25" data-color="color-2"></line><line x1="6.25" y1="3.75" x2="1.25" y2="3.75" data-color="color-2"></line></g></svg>

Before

Width:  |  Height:  |  Size: 692 B

After

Width:  |  Height:  |  Size: 692 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M9.25,8.75V1.75s1.303,2.048,3.427,3.573"></path><path d="M5.406,16.13c.268,.078,.551,.12,.844,.12,1.657,0,3-1.343,3-3,0-.293-.042-.577-.12-.844"></path><path d="M7.485,10.515c-.377-.17-.795-.265-1.235-.265-1.657,0-3,1.343-3,3,0,.44,.095,.858,.265,1.235"></path><line x1="2" y1="16" x2="16" y2="2" data-color="color-2"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M9.25,8.75V1.75s1.303,2.048,3.427,3.573"></path><path d="M5.406,16.13c.268,.078,.551,.12,.844,.12,1.657,0,3-1.343,3-3,0-.293-.042-.577-.12-.844"></path><path d="M7.485,10.515c-.377-.17-.795-.265-1.235-.265-1.657,0-3,1.343-3,3,0,.44,.095,.858,.265,1.235"></path><line x1="2" y1="16" x2="16" y2="2" data-color="color-2"></line></g></svg>

Before

Width:  |  Height:  |  Size: 593 B

After

Width:  |  Height:  |  Size: 593 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M9.75,13.25V1.75s1.75,2.75,4.5,4.25" data-color="color-2"></path><circle cx="6.75" cy="13.25" r="3"></circle></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M9.75,13.25V1.75s1.75,2.75,4.5,4.25" data-color="color-2"></path><circle cx="6.75" cy="13.25" r="3"></circle></g></svg>

Before

Width:  |  Height:  |  Size: 377 B

After

Width:  |  Height:  |  Size: 377 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><line x1="2.75" y1="9" x2="15.25" y2="9" data-color="color-2"></line><polyline points="7 13.25 2.75 9 7 4.75"></polyline></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><line x1="2.75" y1="9" x2="15.25" y2="9" data-color="color-2"></line><polyline points="7 13.25 2.75 9 7 4.75"></polyline></g></svg>

Before

Width:  |  Height:  |  Size: 380 B

After

Width:  |  Height:  |  Size: 380 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M12.25,16.25l-4.75-3.5-4.75,3.5V6.75c0-1.105,.895-2,2-2h5.5c1.105,0,2,.895,2,2v9.5Z"></path><path d="M6.781,2c.287-.159,.617-.25,.969-.25h5.5c1.105,0,2,.895,2,2V13.25" data-color="color-2"></path></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M12.25,16.25l-4.75-3.5-4.75,3.5V6.75c0-1.105,.895-2,2-2h5.5c1.105,0,2,.895,2,2v9.5Z"></path><path d="M6.781,2c.287-.159,.617-.25,.969-.25h5.5c1.105,0,2,.895,2,2V13.25" data-color="color-2"></path></g></svg>

Before

Width:  |  Height:  |  Size: 464 B

After

Width:  |  Height:  |  Size: 464 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M12.25,16.25l-4.75-3.5-4.75,3.5V6.75c0-1.105,.895-2,2-2h5.5c1.105,0,2,.895,2,2v9.5Z"></path><path d="M6.781,2c.287-.159,.617-.25,.969-.25h5.5c1.105,0,2,.895,2,2V13.25" data-color="color-2"></path></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M12.25,16.25l-4.75-3.5-4.75,3.5V6.75c0-1.105,.895-2,2-2h5.5c1.105,0,2,.895,2,2v9.5Z"></path><path d="M6.781,2c.287-.159,.617-.25,.969-.25h5.5c1.105,0,2,.895,2,2V13.25" data-color="color-2"></path></g></svg>

Before

Width:  |  Height:  |  Size: 464 B

After

Width:  |  Height:  |  Size: 464 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M14.25,16.25l-5.25-3.5-5.25,3.5V3.75c0-1.105,.895-2,2-2h6.5c1.105,0,2,.895,2,2v12.5Z"></path><polyline points="6.497 8 8.106 9.5 11.503 5" data-color="color-2"></polyline></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M14.25,16.25l-5.25-3.5-5.25,3.5V3.75c0-1.105,.895-2,2-2h6.5c1.105,0,2,.895,2,2v12.5Z"></path><polyline points="6.497 8 8.106 9.5 11.503 5" data-color="color-2"></polyline></g></svg>

Before

Width:  |  Height:  |  Size: 439 B

After

Width:  |  Height:  |  Size: 439 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M7.285,14.25h6.965c1.105,0,2-.895,2-2V5.75c0-.138-.014-.273-.041-.403"></path><path d="M14.25,3.75h-2.25l-.507-1.351c-.146-.39-.519-.649-.936-.649h-3.114c-.417,0-.79,.259-.936,.649l-.507,1.351H3.75c-1.105,0-2,.895-2,2v6.5c0,1.105,.895,2,2,2"></path><path d="M7.055,10.945c-.498-.498-.805-1.185-.805-1.945,0-1.519,1.231-2.75,2.75-2.75,.759,0,1.447,.308,1.945,.805" data-color="color-2"></path><circle cx="4.25" cy="6.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle><line x1="2" y1="16" x2="16" y2="2" data-color="color-2"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M7.285,14.25h6.965c1.105,0,2-.895,2-2V5.75c0-.138-.014-.273-.041-.403"></path><path d="M14.25,3.75h-2.25l-.507-1.351c-.146-.39-.519-.649-.936-.649h-3.114c-.417,0-.79,.259-.936,.649l-.507,1.351H3.75c-1.105,0-2,.895-2,2v6.5c0,1.105,.895,2,2,2"></path><path d="M7.055,10.945c-.498-.498-.805-1.185-.805-1.945,0-1.519,1.231-2.75,2.75-2.75,.759,0,1.447,.308,1.945,.805" data-color="color-2"></path><circle cx="4.25" cy="6.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle><line x1="2" y1="16" x2="16" y2="2" data-color="color-2"></line></g></svg>

Before

Width:  |  Height:  |  Size: 843 B

After

Width:  |  Height:  |  Size: 843 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M14.25,3.75h-2.25l-.507-1.351c-.146-.39-.519-.649-.936-.649h-3.114c-.417,0-.79,.259-.936,.649l-.507,1.351H3.75c-1.105,0-2,.895-2,2v6.5c0,1.105,.895,2,2,2H14.25c1.105,0,2-.895,2-2V5.75c0-1.105-.895-2-2-2Z"></path><circle cx="9" cy="9" r="2.75" data-color="color-2"></circle><circle cx="4.25" cy="6.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M14.25,3.75h-2.25l-.507-1.351c-.146-.39-.519-.649-.936-.649h-3.114c-.417,0-.79,.259-.936,.649l-.507,1.351H3.75c-1.105,0-2,.895-2,2v6.5c0,1.105,.895,2,2,2H14.25c1.105,0,2-.895,2-2V5.75c0-1.105-.895-2-2-2Z"></path><circle cx="9" cy="9" r="2.75" data-color="color-2"></circle><circle cx="4.25" cy="6.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle></g></svg>

Before

Width:  |  Height:  |  Size: 660 B

After

Width:  |  Height:  |  Size: 660 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M3.762,14.989l6.074-6.075c.781-.781,2.047-.781,2.828,0l2.586,2.586" data-color="color-2"></path><rect x="2.75" y="2.75" width="12.5" height="12.5" rx="2" ry="2"></rect><circle cx="6.25" cy="7.25" r="1.25" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M3.762,14.989l6.074-6.075c.781-.781,2.047-.781,2.828,0l2.586,2.586" data-color="color-2"></path><rect x="2.75" y="2.75" width="12.5" height="12.5" rx="2" ry="2"></rect><circle cx="6.25" cy="7.25" r="1.25" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle></g></svg>

Before

Width:  |  Height:  |  Size: 556 B

After

Width:  |  Height:  |  Size: 556 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="2.75 9.5 6.5 13.25 15.25 4.5"></polyline></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="2.75 9.5 6.5 13.25 15.25 4.5"></polyline></g></svg>

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 318 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="9.75 4.75 14 9 9.75 13.25" data-color="color-2"></polyline><polyline points="5 4.75 9.25 9 5 13.25"></polyline></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="9.75 4.75 14 9 9.75 13.25" data-color="color-2"></polyline><polyline points="5 4.75 9.25 9 5 13.25"></polyline></g></svg>

Before

Width:  |  Height:  |  Size: 388 B

After

Width:  |  Height:  |  Size: 388 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M1.75,16.25v-.5c0-1.105,.895-2,2-2H14.25c1.105,0,2,.895,2,2v.5"></path><path d="M3.75,11.25c0-.828,.672-1.5,1.5-1.5h7.5c.828,0,1.5,.672,1.5,1.5"></path><polyline points="11.5 4.75 9 7.25 6.5 4.75" data-color="color-2"></polyline><line x1="9" y1="7" x2="9" y2="1.75" data-color="color-2"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M1.75,16.25v-.5c0-1.105,.895-2,2-2H14.25c1.105,0,2,.895,2,2v.5"></path><path d="M3.75,11.25c0-.828,.672-1.5,1.5-1.5h7.5c.828,0,1.5,.672,1.5,1.5"></path><polyline points="11.5 4.75 9 7.25 6.5 4.75" data-color="color-2"></polyline><line x1="9" y1="7" x2="9" y2="1.75" data-color="color-2"></line></g></svg>

Before

Width:  |  Height:  |  Size: 562 B

After

Width:  |  Height:  |  Size: 562 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><line x1="14" y1="4" x2="4" y2="14" data-color="color-2"></line><line x1="4" y1="4" x2="14" y2="14"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><line x1="14" y1="4" x2="4" y2="14" data-color="color-2"></line><line x1="4" y1="4" x2="14" y2="14"></line></g></svg>

Before

Width:  |  Height:  |  Size: 366 B

After

Width:  |  Height:  |  Size: 366 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M6.75,2.75h7c1.105,0,2,.895,2,2v1.5" data-color="color-2"></path><line x1="11.25" y1="2.75" x2="11.25" y2="6.25" data-color="color-2"></line><line x1="14.75" y1="11.75" x2="14.75" y2="16.75" data-color="color-2"></line><path d="M15.75,9.461v-3.211H6.75V2.75h-2.5c-1.105,0-2,.895-2,2V13.25c0,1.105,.895,2,2,2h5.711"></path><line x1="17.25" y1="14.25" x2="12.25" y2="14.25" data-color="color-2"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M6.75,2.75h7c1.105,0,2,.895,2,2v1.5" data-color="color-2"></path><line x1="11.25" y1="2.75" x2="11.25" y2="6.25" data-color="color-2"></line><line x1="14.75" y1="11.75" x2="14.75" y2="16.75" data-color="color-2"></line><path d="M15.75,9.461v-3.211H6.75V2.75h-2.5c-1.105,0-2,.895-2,2V13.25c0,1.105,.895,2,2,2h5.711"></path><line x1="17.25" y1="14.25" x2="12.25" y2="14.25" data-color="color-2"></line></g></svg>

Before

Width:  |  Height:  |  Size: 668 B

After

Width:  |  Height:  |  Size: 668 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="10.25 12.75 12.75 15.25 15.25 12.75" data-color="color-2"></polyline><polyline points="15.25 5.25 12.75 2.75 10.25 5.25" data-color="color-2"></polyline><line x1="12.75" y1="15" x2="12.75" y2="3" data-color="color-2"></line><rect x="2.75" y="10.25" width="5" height="5" rx="1" ry="1"></rect><rect x="2.75" y="2.75" width="5" height="5" rx="1" ry="1"></rect></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><polyline points="10.25 12.75 12.75 15.25 15.25 12.75" data-color="color-2"></polyline><polyline points="15.25 5.25 12.75 2.75 10.25 5.25" data-color="color-2"></polyline><line x1="12.75" y1="15" x2="12.75" y2="3" data-color="color-2"></line><rect x="2.75" y="10.25" width="5" height="5" rx="1" ry="1"></rect><rect x="2.75" y="2.75" width="5" height="5" rx="1" ry="1"></rect></g></svg>

Before

Width:  |  Height:  |  Size: 634 B

After

Width:  |  Height:  |  Size: 634 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M13.368,4.632c-.726-1.694-2.408-2.882-4.368-2.882h0c-2.623,0-4.75,2.127-4.75,4.75v4.75c0,1.105-.895,2-2,2h2.5"></path><path d="M8,13.25h7.75c-1.105,0-2-.895-2-2v-3.5"></path><path d="M10.588,15.185c-.095-.117-.237-.185-.388-.185h-2.399c-.151,0-.293,.068-.388,.185-.095,.117-.132,.271-.101,.418,.173,.822,.868,1.397,1.689,1.397s1.516-.575,1.689-1.397c.031-.147-.006-.301-.101-.418Z" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></path><line x1="2" y1="16" x2="16" y2="2" data-color="color-2"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M13.368,4.632c-.726-1.694-2.408-2.882-4.368-2.882h0c-2.623,0-4.75,2.127-4.75,4.75v4.75c0,1.105-.895,2-2,2h2.5"></path><path d="M8,13.25h7.75c-1.105,0-2-.895-2-2v-3.5"></path><path d="M10.588,15.185c-.095-.117-.237-.185-.388-.185h-2.399c-.151,0-.293,.068-.388,.185-.095,.117-.132,.271-.101,.418,.173,.822,.868,1.397,1.689,1.397s1.516-.575,1.689-1.397c.031-.147-.006-.301-.101-.418Z" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></path><line x1="2" y1="16" x2="16" y2="2" data-color="color-2"></line></g></svg>

Before

Width:  |  Height:  |  Size: 795 B

After

Width:  |  Height:  |  Size: 795 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M15.75,13.25c-1.105,0-2-.895-2-2V6.5c0-2.623-2.127-4.75-4.75-4.75h0c-2.623,0-4.75,2.127-4.75,4.75v4.75c0,1.105-.895,2-2,2H15.75Z"></path><path d="M10.588,15.185c-.095-.117-.237-.185-.388-.185h-2.399c-.151,0-.293,.068-.388,.185-.095,.117-.132,.271-.101,.418,.173,.822,.868,1.397,1.689,1.397s1.516-.575,1.689-1.397c.031-.147-.006-.301-.101-.418Z" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></path></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M15.75,13.25c-1.105,0-2-.895-2-2V6.5c0-2.623-2.127-4.75-4.75-4.75h0c-2.623,0-4.75,2.127-4.75,4.75v4.75c0,1.105-.895,2-2,2H15.75Z"></path><path d="M10.588,15.185c-.095-.117-.237-.185-.388-.185h-2.399c-.151,0-.293,.068-.388,.185-.095,.117-.132,.271-.101,.418,.173,.822,.868,1.397,1.689,1.397s1.516-.575,1.689-1.397c.031-.147-.006-.301-.101-.418Z" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></path></g></svg>

Before

Width:  |  Height:  |  Size: 694 B

After

Width:  |  Height:  |  Size: 694 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><circle cx="9" cy="12.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle><circle cx="11.75" cy="12.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle><circle cx="6.25" cy="12.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle><path d="M6.25,15.25h-1c-1.105,0-2-.895-2-2v-2.625c0-.897-.728-1.625-1.625-1.625,.897,0,1.625-.728,1.625-1.625v-2.625c0-1.105,.895-2,2-2h1"></path><path d="M11.75,15.25h1c1.105,0,2-.895,2-2v-2.625c0-.897,.728-1.625,1.625-1.625-.897,0-1.625-.728-1.625-1.625v-2.625c0-1.105-.895-2-2-2h-1"></path></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><circle cx="9" cy="12.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle><circle cx="11.75" cy="12.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle><circle cx="6.25" cy="12.25" r=".75" fill="currentColor" data-color="color-2" data-stroke="none" stroke="none"></circle><path d="M6.25,15.25h-1c-1.105,0-2-.895-2-2v-2.625c0-.897-.728-1.625-1.625-1.625,.897,0,1.625-.728,1.625-1.625v-2.625c0-1.105,.895-2,2-2h1"></path><path d="M11.75,15.25h1c1.105,0,2-.895,2-2v-2.625c0-.897,.728-1.625,1.625-1.625-.897,0-1.625-.728-1.625-1.625v-2.625c0-1.105-.895-2-2-2h-1"></path></g></svg>

Before

Width:  |  Height:  |  Size: 911 B

After

Width:  |  Height:  |  Size: 911 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M15.25,11.75v1.5c0,1.105-.895,2-2,2H4.75c-1.105,0-2-.895-2-2v-1.5"></path><polyline points="5.5 6.75 9 10.25 12.5 6.75" data-color="color-2"></polyline><line x1="9" y1="10.25" x2="9" y2="2.75" data-color="color-2"></line></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M15.25,11.75v1.5c0,1.105-.895,2-2,2H4.75c-1.105,0-2-.895-2-2v-1.5"></path><polyline points="5.5 6.75 9 10.25 12.5 6.75" data-color="color-2"></polyline><line x1="9" y1="10.25" x2="9" y2="2.75" data-color="color-2"></line></g></svg>

Before

Width:  |  Height:  |  Size: 489 B

After

Width:  |  Height:  |  Size: 489 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><circle cx="6.75" cy="9" r=".5" fill="currentColor" data-color="color-2"></circle><circle cx="6.75" cy="3.75" r=".5" fill="currentColor"></circle><circle cx="6.75" cy="14.25" r=".5" fill="currentColor"></circle><circle cx="11.25" cy="9" r=".5" fill="currentColor" data-color="color-2"></circle><circle cx="11.25" cy="3.75" r=".5" fill="currentColor"></circle><circle cx="11.25" cy="14.25" r=".5" fill="currentColor"></circle></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><circle cx="6.75" cy="9" r=".5" fill="currentColor" data-color="color-2"></circle><circle cx="6.75" cy="3.75" r=".5" fill="currentColor"></circle><circle cx="6.75" cy="14.25" r=".5" fill="currentColor"></circle><circle cx="11.25" cy="9" r=".5" fill="currentColor" data-color="color-2"></circle><circle cx="11.25" cy="3.75" r=".5" fill="currentColor"></circle><circle cx="11.25" cy="14.25" r=".5" fill="currentColor"></circle></g></svg>

Before

Width:  |  Height:  |  Size: 684 B

After

Width:  |  Height:  |  Size: 684 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><rect x="5.25" y="5.25" width="11" height="11" rx="2" ry="2"></rect><path d="M2.801,11.998L1.772,5.074c-.162-1.093,.592-2.11,1.684-2.272l6.924-1.029c.933-.139,1.81,.39,2.148,1.228" data-color="color-2"></path></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><rect x="5.25" y="5.25" width="11" height="11" rx="2" ry="2"></rect><path d="M2.801,11.998L1.772,5.074c-.162-1.093,.592-2.11,1.684-2.272l6.924-1.029c.933-.139,1.81,.39,2.148,1.228" data-color="color-2"></path></g></svg>

Before

Width:  |  Height:  |  Size: 468 B

After

Width:  |  Height:  |  Size: 468 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M1.75,6.75v6.5c0,1.105,.895,2,2,2H12.25" data-color="color-2"></path><rect x="4.75" y="2.75" width="11.5" height="9.5" rx="2" ry="2" transform="translate(21 15) rotate(180)"></rect></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><path d="M1.75,6.75v6.5c0,1.105,.895,2,2,2H12.25" data-color="color-2"></path><rect x="4.75" y="2.75" width="11.5" height="9.5" rx="2" ry="2" transform="translate(21 15) rotate(180)"></rect></g></svg>

Before

Width:  |  Height:  |  Size: 449 B

After

Width:  |  Height:  |  Size: 449 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="currentColor" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><line x1="12.75" y1="7.75" x2="16.25" y2="7.75" data-color="color-2"></line><line x1="4" y1="7.75" x2="9.25" y2="7.75" data-color="color-2"></line><circle cx="4" cy="5.5" r="2.25" data-color="color-2"></circle><line x1="5.409" y1="11.659" x2="14" y2="3"></line><circle cx="7" cy="13.25" r="2.25"></circle></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="18" width="18" viewBox="0 0 18 18"><g stroke-linecap="round" stroke-width="1.5" fill="none" stroke="context-fill" stroke-opacity="context-fill-opacity" stroke-linejoin="round" class="nc-icon-wrapper"><line x1="12.75" y1="7.75" x2="16.25" y2="7.75" data-color="color-2"></line><line x1="4" y1="7.75" x2="9.25" y2="7.75" data-color="color-2"></line><circle cx="4" cy="5.5" r="2.25" data-color="color-2"></circle><line x1="5.409" y1="11.659" x2="14" y2="3"></line><circle cx="7" cy="13.25" r="2.25"></circle></g></svg>

Before

Width:  |  Height:  |  Size: 564 B

After

Width:  |  Height:  |  Size: 564 B

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