Compare commits

..

36 Commits

Author SHA1 Message Date
Mr. M
c701a24db5 feat: Implement site security section, b=no-bug, c=common, tabs 2025-10-02 17:04:30 +02:00
mr. m
f098ff9ddf Merge branch 'dev' into feat/permissions-panel 2025-10-02 12:02:50 +02:00
Mr. M
8bd7d835b4 feat: Finished permissions and addons, b=no-bug, c=common 2025-10-02 12:02:00 +02:00
Mr. M
236abce07b feat: Add more delay when the mouse leaves the urlbar, b=no-bug, c=compact-mode 2025-10-02 01:02:14 +02:00
Mr. M
c1df4a3c3e Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-10-01 23:45:37 +02:00
Mr. M
4f4b1cc140 chore: Bump version, b=no-bug, c=no-component 2025-10-01 23:45:34 +02:00
mr. m
2c31564f5d Revert "chore: Re-enable updater service, p=#10654, c=configs", p=#10660 2025-10-01 23:45:22 +02:00
Mr. M
ebcd77d9ce feat: Properly show panel view, b=no-bug, c=common 2025-10-01 23:44:55 +02:00
mr. m
69a0ddd03c fix: Fix compact mode native radius and separtion for windows, b=no-bug, c=compact-mode 2025-10-01 22:17:42 +02:00
mr. m
bb9b7b74aa feat: Improved space edit button sizings, b=no-bug, c=workspaces 2025-10-01 21:52:26 +02:00
mr. m
9887871d01 fix: Fixed compact mode twitching with raycast, b=closes #10637, c=tabs, common 2025-10-01 19:13:41 +02:00
mr. m
1300ae2521 fix: Updated to Firefox 143.0.3, b=no-bug, c=l10n 2025-10-01 16:26:34 +02:00
Mr. M
a76ce8b0f6 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-10-01 15:48:54 +02:00
Mr. M
a8712f9aba fix: Fixed urlbar being stuck on the screen, b=closes #10650, c=common 2025-10-01 15:48:48 +02:00
mr. m
58a939f2ad chore: Re-enable updater service, p=#10654, c=configs 2025-10-01 15:42:23 +02:00
mr. m
428b61d6d4 New Crowdin updates (#10611) 2025-10-01 15:41:55 +02:00
Mr. M
8d00b54e03 feat: Start fetching site permissions, b=no-bug, c=no-component 2025-10-01 14:57:07 +02:00
mr. m
a1a2ae0a67 Merge branch 'dev' into feat/permissions-panel 2025-10-01 13:24:03 +02:00
mr. m
fc68cc5ab3 feat: New site data popup, b=no-bug, c=common 2025-10-01 13:13:19 +02:00
mr-cheffy
1ebe5286f9 docs: Update monthly issue metrics, b=(no bug), c={docs} 2025-10-01 02:40:32 +00:00
mr. m
2abba4d266 fix: Fixed empty tabs appearing on the 'all tabs' panel, b=closes #10610, c=common 2025-09-29 10:57:19 +02:00
mr. m
32944f1548 fix: Fixed bookmarks not hiding when opening folders, b=closes #10612, c=common 2025-09-29 10:43:22 +02:00
mr. m
a7f853e0f0 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-09-28 21:52:55 +02:00
mr. m
e59c73ae53 fix: Fixed workspace icons resizing on overflow, b=closes #10596, c=workspaces 2025-09-28 21:52:50 +02:00
Kamil Monicz
d9bc654fc7 fix: zen.source missing vsc from nested modules that are checksummed (#10607) 2025-09-28 21:03:59 +02:00
Kamil Monicz
bc5e4eb48f fix: zen.source ignore VCS data, p=#10606 2025-09-28 17:48:01 +02:00
Mr. M
028b7d35db chore: lint project, b=no-bug, c=compact-mode 2025-09-28 16:12:40 +02:00
Bernhard Kaindl
a091751e09 urlbar.yaml: Fix network.IDN_show_punycode to show international characters as designed (#10600)
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2025-09-28 16:10:18 +02:00
Kamil Monicz
cc8dfc693b fix: zen.source builds missing dotfiles (#10599) 2025-09-28 16:06:59 +02:00
mr. m
9a1c466368 New Crowdin updates (#10591) 2025-09-28 16:06:56 +02:00
mr. m
88f26d8829 Revert "feat: Improved startup performance and flashes, p=#10588, c=common, t…" (#10604) 2025-09-28 16:06:17 +02:00
mr. m
b0d0a79fc5 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-09-28 13:44:22 +02:00
mr. m
3146ec1c3b fix: Fixed toolbar bg not showing until hover, b=closes #10595, c=compact-mode, workspaces 2025-09-28 13:44:14 +02:00
Mr. M
19fbed782d Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-09-28 00:59:04 +02:00
Mr. M
b1d6e0eb21 feat: Small tweaks to the command bar animations, b=no-bug, c=common 2025-09-28 00:59:00 +02:00
mr. m
47181da49e feat: Improved startup performance and flashes, p=#10588, c=common, tabs, workspaces 2025-09-27 19:04:59 +02:00
61 changed files with 1388 additions and 643 deletions

View File

@@ -266,9 +266,11 @@ jobs:
- name: Compress
run: |
cd engine
tar --use-compress-program=zstd -hcf ../zen.source.tar.zst *
cd ..
tar \
--exclude='./.git' \
--use-compress-program=zstd \
-hcf zen.source.tar.zst \
-C engine .
- name: Upload artifact
uses: actions/upload-artifact@v4

View File

@@ -34,8 +34,8 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne
### Firefox Versions
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `143.0.1`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 143.0.1`!
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `143.0.3`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 143.0.3`!
### Contributing

View File

@@ -1 +1 @@
1b0467f0c46520bbed6648f6583a9ba6710d76cb
c8042c4961ad61678121d8ce9ca2d17cc85fefbe

View File

@@ -0,0 +1,280 @@
# Issue Metrics
| Metric | Average | Median | 90th percentile |
| --- | --- | --- | ---: |
| Time to first response | 17:16:35 | 3:11:05 | 1 day, 7:58:23 |
| Time to close | 1 day, 8:59:53 | 8:32:05 | 3 days, 14:43:34 |
| Metric | Count |
| --- | ---: |
| Number of items that remain open | 123 |
| Number of items closed | 139 |
| Total number of items created | 262 |
| Title | URL | Time to first response | Time to close |
| --- | --- | --- | --- |
| Auto PIP not working upon tab switch | https://github.com/zen-browser/desktop/issues/10645 | None | None |
| URL bar Opening on the left side of the browser when clicked on new tab | https://github.com/zen-browser/desktop/issues/10642 | None | None |
| Browser opens on wrong monitor on macOS | https://github.com/zen-browser/desktop/issues/10639 | None | None |
| All tabs are lost after each update | https://github.com/zen-browser/desktop/issues/10638 | 2:25:57 | None |
| Sidebar expands independently | https://github.com/zen-browser/desktop/issues/10637 | 2:21:31 | None |
| Onboarding broken (tiny window) on flatpak version | https://github.com/zen-browser/desktop/issues/10635 | None | None |
| Bitwarden extension not synching (self hosted) | https://github.com/zen-browser/desktop/issues/10634 | None | None |
| Zen completely freezes when clicking on "New Tab" | https://github.com/zen-browser/desktop/issues/10632 | None | None |
| Zen Browser URL Bar: Search Engine Highlight Rectangle Looks Broken in Input Mode | https://github.com/zen-browser/desktop/issues/10630 | 9:01:57 | 9:01:57 |
| Url bar doesn't fully appear | https://github.com/zen-browser/desktop/issues/10629 | 1:51:21 | 9:11:03 |
| 1Password Autofill/Universal Autofill feature fails silently | https://github.com/zen-browser/desktop/issues/10627 | None | None |
| Moxfield Bug | https://github.com/zen-browser/desktop/issues/10626 | 16:58:48 | 16:58:48 |
| Tabs are not restored on Startup | https://github.com/zen-browser/desktop/issues/10625 | 0:03:14 | None |
| Zen uses `$HOME/.mozilla/native-messaging-hosts/` instead of `$HOME/.zen/native-messaging-hosts/` | https://github.com/zen-browser/desktop/issues/10622 | None | None |
| No video with supported format and MIME type found | https://github.com/zen-browser/desktop/issues/10620 | 4:38:39 | 4:38:39 |
| Youtube window size | https://github.com/zen-browser/desktop/issues/10619 | None | None |
| Webpage UI elements glitching and not fully rendering | https://github.com/zen-browser/desktop/issues/10615 | None | None |
| bookmarks toolbar failed to collapse automatically in single toolbar mode + compact mode | https://github.com/zen-browser/desktop/issues/10612 | None | 8:56:43 |
| Closing "New Tab" in the "List all tabs" toolbar widget causes zen to not exit cleanly | https://github.com/zen-browser/desktop/issues/10610 | 1:45:50 | 12:56:07 |
| Opening link in new tab switches focus to new tab instead of staying on current tab | https://github.com/zen-browser/desktop/issues/10609 | 2:14:04 | 13:39:31 |
| Webpage flickering/glitching during normal browsing | https://github.com/zen-browser/desktop/issues/10605 | None | None |
| Essentials Get jumbled when reopening the browser | https://github.com/zen-browser/desktop/issues/10602 | 0:19:34 | 0:45:36 |
| Entering ecom in URL bar shows compact mode as first suggestion. | https://github.com/zen-browser/desktop/issues/10601 | 6:27:16 | 6:27:16 |
| Loads of empty windows opening on startup and mysterious tray icon | https://github.com/zen-browser/desktop/issues/10598 | None | None |
| URLbar becomes invisible after bookmarking a tab. | https://github.com/zen-browser/desktop/issues/10597 | None | None |
| Workspace icons too small with narrow sidebar | https://github.com/zen-browser/desktop/issues/10596 | None | 8:06:55 |
| Top toolbar has no background in compact mode after changing space until the URL bar is hovered | https://github.com/zen-browser/desktop/issues/10595 | None | 1:45:30 |
| Video controls going under the screen when in fullscreen using Zen in fullscreen mode | https://github.com/zen-browser/desktop/issues/10594 | None | None |
| Multiple instances of Zen for each tab | https://github.com/zen-browser/desktop/issues/10593 | 4:55:51 | 4:55:51 |
| Tabs Disappear | https://github.com/zen-browser/desktop/issues/10592 | None | 6:02:25 |
| Cannot upgrade from `1.15.5b` to `1.16.1b` | https://github.com/zen-browser/desktop/issues/10590 | None | None |
| New windows come up with ~200 copies of the same link in the pinned tab of some workspaces | https://github.com/zen-browser/desktop/issues/10589 | None | 15:51:30 |
| on_TabGroupsCollapse is hiding currently open tabs | https://github.com/zen-browser/desktop/issues/10587 | 18:18:04 | 18:18:04 |
| websites don't properly go fullscreen in split view on Wayland and windows | https://github.com/zen-browser/desktop/issues/10586 | None | 21:23:38 |
| Active tabs and URLs not prioritized in URL bar over extensions | https://github.com/zen-browser/desktop/issues/10582 | 8:32:05 | 8:32:05 |
| Always floating URL bar does not float on new tab with replace-newtab disabled | https://github.com/zen-browser/desktop/issues/10581 | None | None |
| URL bar not respecting browser.urlbar.maxRichResults setting | https://github.com/zen-browser/desktop/issues/10580 | 0:11:00 | None |
| "Zoom" Icon is missing in the Application Menu | https://github.com/zen-browser/desktop/issues/10578 | 1 day, 2:23:42 | None |
| Search/New Tab Popup Misplaced in Compact Mode (Hidden Vertical Tab Bar) | https://github.com/zen-browser/desktop/issues/10576 | 0:50:41 | 1:38:50 |
| Essentials Tab | https://github.com/zen-browser/desktop/issues/10575 | 2:40:40 | 5:34:25 |
| Udemy - problem with movies | https://github.com/zen-browser/desktop/issues/10571 | 1:11:04 | 1:11:04 |
| Fully lost all data | https://github.com/zen-browser/desktop/issues/10568 | 9:29:58 | 10:31:54 |
| Flatpak fails to launch on Fedora 42 (clone() failure EPERM) | https://github.com/zen-browser/desktop/issues/10567 | 1:22:23 | 3:40:35 |
| The top bar in compact mode is not controlled by the theme, it appears white | https://github.com/zen-browser/desktop/issues/10566 | 1:47:24 | 1:47:24 |
| Pinned extension render bug: pinned extensions are floating on the web page | https://github.com/zen-browser/desktop/issues/10565 | None | None |
| Home link not appearing | https://github.com/zen-browser/desktop/issues/10563 | 0:42:18 | 2:59:02 |
| Connection to "incoming.telemetry.mozilla.org" on startup. | https://github.com/zen-browser/desktop/issues/10560 | 3:29:10 | 21:14:29 |
| Command bar actions not work if they are not translated to selected language | https://github.com/zen-browser/desktop/issues/10559 | None | 4:06:26 |
| the address bar does not respect the color theme when compact mode is enabled | https://github.com/zen-browser/desktop/issues/10557 | 0:14:27 | 0:14:27 |
| Browser crashing on media playback as of 1.16.1b on Nvidia Wayland (VA-API) | https://github.com/zen-browser/desktop/issues/10555 | 0:14:09 | None |
| Split View preview effect still remains after using the Escape key | https://github.com/zen-browser/desktop/issues/10554 | 3:49:15 | 1 day, 0:27:29 |
| Spotify is not working | https://github.com/zen-browser/desktop/issues/10553 | 1:42:55 | 1:42:55 |
| Command bar features doesn't work with other langage than english | https://github.com/zen-browser/desktop/issues/10551 | None | 0:01:48 |
| Nested CSS transform breaks backdrop blur | https://github.com/zen-browser/desktop/issues/10550 | 0:55:22 | 1:22:05 |
| (MINOR) URL bar: custom search engine name has uneven background fill than its icon | https://github.com/zen-browser/desktop/issues/10546 | None | None |
| Special unicode characters (Chinese, Korean, Japanese, etc.) are not showing | https://github.com/zen-browser/desktop/issues/10545 | 3:45:25 | None |
| Computer hard freezes when zen is open with performance intensive tasks going in the background | https://github.com/zen-browser/desktop/issues/10544 | None | None |
| 软件开启使用一会后,右上角关闭按钮失效 | https://github.com/zen-browser/desktop/issues/10543 | 5:28:33 | 5:28:33 |
| Bookmark menu shows up in wrong place, and its entries' context menu has weird layout problem | https://github.com/zen-browser/desktop/issues/10542 | None | None |
| Find bar changes into plain white bar when "X" is clicked | https://github.com/zen-browser/desktop/issues/10541 | 8:22:04 | 10:27:21 |
| browser.tabs.closeWindowWithLastTab doesn't work anymore on v1.16.1b | https://github.com/zen-browser/desktop/issues/10540 | 10:59:55 | None |
| Some UI Elements are Missing On Some Sites | https://github.com/zen-browser/desktop/issues/10538 | 2:19:13 | 3 days, 22:36:11 |
| Browser Freeze on Passkey Call&CallBack Failure | https://github.com/zen-browser/desktop/issues/10533 | None | None |
| Wrong sidebar color in compact mode | https://github.com/zen-browser/desktop/issues/10532 | 0:48:09 | 1 day, 17:09:58 |
| Playing Audio icon inconsistent on tabs not focused on linux | https://github.com/zen-browser/desktop/issues/10531 | None | 21:06:12 |
| Missing "Edit Theme" button in the right click menu | https://github.com/zen-browser/desktop/issues/10530 | 0:56:54 | 1 day, 17:21:25 |
| Stars are shown all over all websites | https://github.com/zen-browser/desktop/issues/10529 | 18:59:14 | None |
| v1.16b not available on flathub | https://github.com/zen-browser/desktop/issues/10528 | 3:10:02 | 5:21:21 |
| Firefox-Zen browser name inconsistency in error page | https://github.com/zen-browser/desktop/issues/10527 | None | None |
| Highlight mini window doesn't close automatically | https://github.com/zen-browser/desktop/issues/10526 | None | None |
| Zen Browser maximized window overlaps with Windows taskbar area | https://github.com/zen-browser/desktop/issues/10525 | None | 0:37:13 |
| Spotify Skipping 7 Songs | https://github.com/zen-browser/desktop/issues/10524 | 2:57:34 | 2:57:34 |
| McAfee notifactions from Zen Browser | https://github.com/zen-browser/desktop/issues/10522 | None | 0:24:17 |
| Zen Browser crashes occasionally when I download a file | https://github.com/zen-browser/desktop/issues/10520 | 13:03:32 | None |
| (SERIOUS BUG DONT IGNORE) Split tab bug report | https://github.com/zen-browser/desktop/issues/10519 | None | 0:01:36 |
| tab spliting issue | https://github.com/zen-browser/desktop/issues/10517 | None | 0:51:11 |
| Rounded window borders cause choppy scrolling. | https://github.com/zen-browser/desktop/issues/10516 | None | None |
| Closing the last tab cannot automatically create a new tab | https://github.com/zen-browser/desktop/issues/10515 | 14:08:09 | 14:08:09 |
| Pinned tabs always load from cache. | https://github.com/zen-browser/desktop/issues/10514 | 1:49:05 | None |
| Command Bar works only in english language | https://github.com/zen-browser/desktop/issues/10509 | 0:10:10 | 0:10:10 |
| Pop up windows don't close properly | https://github.com/zen-browser/desktop/issues/10506 | None | None |
| When accessing Alibaba Cloud DataWorks using the Zen browser, it will report Path Not Found: /page/errorbrowser, or Not Online? | https://github.com/zen-browser/desktop/issues/10503 | 10:29:49 | 10:30:28 |
| Floating url bar not appering where it is suposed to | https://github.com/zen-browser/desktop/issues/10502 | 3:09:03 | 11:51:16 |
| Split tabs are not aligned with other tabs | https://github.com/zen-browser/desktop/issues/10501 | 0:15:04 | 2 days, 14:12:29 |
| Microsoft Entra Platform SSO on MacOS | https://github.com/zen-browser/desktop/issues/10498 | 2 days, 12:29:33 | None |
| Dragging a split panel to the sidebar opens search for panel id | https://github.com/zen-browser/desktop/issues/10495 | 0:42:53 | None |
| After closing all tabs, cmd / ctrl + W does not close the window | https://github.com/zen-browser/desktop/issues/10493 | 1:22:58 | 1:22:58 |
| Youtube lags when adblocker is installed. [Seemingly fixed] | https://github.com/zen-browser/desktop/issues/10492 | 4:34:01 | 4:34:01 |
| URL Bar mispositioning | https://github.com/zen-browser/desktop/issues/10490 | 0:35:10 | 2:15:20 |
| Fullscreen F11 | https://github.com/zen-browser/desktop/issues/10489 | 21:42:02 | 3 days, 20:34:06 |
| Combined tabs are not shown properly in the navigation menu | https://github.com/zen-browser/desktop/issues/10488 | 0:41:09 | None |
| Translucent color codes do not appear translucent in toolbar themes | https://github.com/zen-browser/desktop/issues/10487 | 6:19:55 | None |
| Discord always requires me to log in after closing Zen | https://github.com/zen-browser/desktop/issues/10482 | 7 days, 13:26:09 | None |
| 1.16b crashes a lot on Windows 11 | https://github.com/zen-browser/desktop/issues/10481 | 0:19:54 | None |
| There is bug on perplexity.ai | https://github.com/zen-browser/desktop/issues/10480 | 2:16:15 | 1 day, 10:27:53 |
| Theme bug when Zen not focused. | https://github.com/zen-browser/desktop/issues/10479 | 2:39:03 | None |
| Hiding top bar in collapsed bar mode is white | https://github.com/zen-browser/desktop/issues/10478 | 12:23:32 | 7 days, 4:09:44 |
| URL preview in split screen always appears on focused window | https://github.com/zen-browser/desktop/issues/10477 | 1:20:54 | None |
| After the update, all loose tabs disappeared!!! | https://github.com/zen-browser/desktop/issues/10476 | None | None |
| Compact Mode Url position | https://github.com/zen-browser/desktop/issues/10475 | 2:15:11 | 4:17:47 |
| Zen captures all touchpad input and no other applications receive it, even if they're in the foreground (including desktop) | https://github.com/zen-browser/desktop/issues/10474 | None | None |
| Toolbar 'Edit Theme' features broken | https://github.com/zen-browser/desktop/issues/10473 | None | 12:09:50 |
| Camera / Microphone Permissions | https://github.com/zen-browser/desktop/issues/10471 | 0:09:35 | None |
| Cannot drag sidebar tabs | https://github.com/zen-browser/desktop/issues/10466 | 7 days, 19:48:26 | None |
| tool bar not responsive | https://github.com/zen-browser/desktop/issues/10465 | None | None |
| Zen adaptive history doesn't work (auto-suggestions don't change ranks) | https://github.com/zen-browser/desktop/issues/10464 | 6:38:12 | None |
| Udemy Videos not playing(some DRM issue) | https://github.com/zen-browser/desktop/issues/10462 | 0:26:28 | 0:26:28 |
| Clicking a link to open to a new tab from a page in a folder opens outside of the folder instead of staying inside it | https://github.com/zen-browser/desktop/issues/10461 | 1:22:00 | 1:36:41 |
| bookmark tool bar on full screen mode | https://github.com/zen-browser/desktop/issues/10460 | 7:11:57 | None |
| Compact mode: hide tab not work | https://github.com/zen-browser/desktop/issues/10459 | 7:21:59 | 7:26:31 |
| Error Building on mac, suggested fix as well | https://github.com/zen-browser/desktop/issues/10458 | None | None |
| Clicking on a duplicated tab of an essential tab causes switching to the last workspace | https://github.com/zen-browser/desktop/issues/10457 | 2 days, 11:37:42 | None |
| Very long opening times | https://github.com/zen-browser/desktop/issues/10456 | 1 day, 12:13:47 | None |
| Browser window doesn't close when closing last tab | https://github.com/zen-browser/desktop/issues/10455 | None | 22:08:46 |
| Passkeys not supported | https://github.com/zen-browser/desktop/issues/10454 | 2:29:55 | 2 days, 8:28:48 |
| Focus Bitwader | https://github.com/zen-browser/desktop/issues/10447 | 1 day, 6:48:09 | 1 day, 6:48:09 |
| Unable to change workspace name | https://github.com/zen-browser/desktop/issues/10446 | None | None |
| Udemy video's don't play in Zen. | https://github.com/zen-browser/desktop/issues/10443 | 0:52:31 | 1 day, 21:47:45 |
| SoundCloud audio stops when joining Discord voice in browser | https://github.com/zen-browser/desktop/issues/10441 | None | None |
| Calling browser.search.search (from webextensions API) opens glance window instead of new tab. | https://github.com/zen-browser/desktop/issues/10439 | 1:36:27 | None |
| Side bar expands when you remove pinned extension. | https://github.com/zen-browser/desktop/issues/10438 | 1 day, 2:34:08 | None |
| Compact mode X Bookmarks on Zen startup / Closing all pages | https://github.com/zen-browser/desktop/issues/10436 | 0:10:16 | None |
| Zen using more resources while using adblocking dns then ublock. | https://github.com/zen-browser/desktop/issues/10435 | 4:22:57 | 2 days, 3:07:53 |
| WebRender crashes and switches to Software rendering | https://github.com/zen-browser/desktop/issues/10432 | 5:25:30 | None |
| When there are 2 rows of essentials, essentials can only be moved up, not down | https://github.com/zen-browser/desktop/issues/10428 | 1:54:32 | 8 days, 4:33:00 |
| moz-extension page doesnt load for distill web monitor | https://github.com/zen-browser/desktop/issues/10427 | None | None |
| Sidebar incorrectly overlapping with address bar | https://github.com/zen-browser/desktop/issues/10426 | None | None |
| Unexpected window pops when aborting bitwarden validation | https://github.com/zen-browser/desktop/issues/10419 | 0:47:28 | 1:04:53 |
| Redundant `margin-left` on `#sidebar-box` when zen tabs are on the right | https://github.com/zen-browser/desktop/issues/10415 | None | 5:41:18 |
| Toolbar cannot be automatically hidden in the compact mode | https://github.com/zen-browser/desktop/issues/10414 | 6:26:39 | None |
| Closing and then reopening the last tab that's part of a split screen (3+ split screen tabs) breaks the split screen | https://github.com/zen-browser/desktop/issues/10413 | None | 14:22:44 |
| Opening links from external apps creates a new window but doesnt redirect to the target URL | https://github.com/zen-browser/desktop/issues/10409 | None | None |
| No Youtube Live Chat | https://github.com/zen-browser/desktop/issues/10408 | 0:14:57 | None |
| Pinned tab is not focused when closing child tab; focus snaps to last pin instead of owner | https://github.com/zen-browser/desktop/issues/10407 | 1:28:19 | 1:28:19 |
| Huge CPU usage and RAM comsumption when idle | https://github.com/zen-browser/desktop/issues/10406 | 3:24:27 | None |
| Browsing history reset itself unexpectedly | https://github.com/zen-browser/desktop/issues/10403 | None | None |
| Opening new background tab(Middle mouse click) from within folder opens new tab outside folder | https://github.com/zen-browser/desktop/issues/10399 | 4:44:58 | 7:04:02 |
| Icons for webpages in the Essentials tab don't load on startup. | https://github.com/zen-browser/desktop/issues/10398 | None | 0:03:42 |
| Can't sign in to any Google services, says cookies are disabled | https://github.com/zen-browser/desktop/issues/10397 | 1:28:00 | 1 day, 6:18:57 |
| Zen crashes on Fedora Linux | https://github.com/zen-browser/desktop/issues/10395 | 0:53:47 | 1 day, 7:05:12 |
| Audio bugs on Google Meet | https://github.com/zen-browser/desktop/issues/10394 | 15:13:01 | None |
| Pinned split screen tabs still not preserved when opening a new window (issue #8583 remains unresolved) | https://github.com/zen-browser/desktop/issues/10388 | None | None |
| A cursor appears when I click on the screen | https://github.com/zen-browser/desktop/issues/10387 | 1:39:24 | 4:27:59 |
| Custom set images that you upload yourself for Firefox Home new tab wallpapers have been broken for a while. | https://github.com/zen-browser/desktop/issues/10384 | 15:32:44 | 3 days, 14:22:59 |
| Scrolling lag when looking at preview (glance) of a webpage when using mouse input | https://github.com/zen-browser/desktop/issues/10382 | None | 3:43:58 |
| Apple's accout verification Not Working | https://github.com/zen-browser/desktop/issues/10381 | None | 1 day, 22:20:39 |
| Find bar doesn't go away | https://github.com/zen-browser/desktop/issues/10380 | 4:16:03 | 4:16:08 |
| Cookies, data, history, and all tabs close and are deleted on every browser restart, despite turning off the settings to do so. | https://github.com/zen-browser/desktop/issues/10377 | None | None |
| Windows Navigation Icons not Showing Up on Zen | https://github.com/zen-browser/desktop/issues/10374 | None | None |
| 无法打开部分网站,显示安全问题或超时 | https://github.com/zen-browser/desktop/issues/10372 | 0:12:19 | 0:12:19 |
| Merci App extension not working - Login not working | https://github.com/zen-browser/desktop/issues/10370 | 3:56:26 | 6:10:52 |
| Compact mode tabs overlay stays fixed on top of bookmarks bar | https://github.com/zen-browser/desktop/issues/10369 | None | 4:13:01 |
| Browsing history reset itself unexpectedly | https://github.com/zen-browser/desktop/issues/10367 | 9:50:29 | 2 days, 10:39:26 |
| Choppy animation while hovering on top bar area in single toolbar compact mode with google doc file open | https://github.com/zen-browser/desktop/issues/10366 | 0:45:17 | None |
| Logged me out of everything after Restart | https://github.com/zen-browser/desktop/issues/10365 | 0:06:34 | None |
| Discord fails at uploading and playing media | https://github.com/zen-browser/desktop/issues/10364 | 1:35:04 | 17:56:18 |
| Pinned tabs inconsisntely dissapear and reappear in the sidebar | https://github.com/zen-browser/desktop/issues/10363 | 2:23:29 | None |
| 1Password no longer allowing touch ID on latest release | https://github.com/zen-browser/desktop/issues/10362 | 2:03:43 | 21:35:42 |
| [Linux: Flatpak] Can't open certain local-network URLs | https://github.com/zen-browser/desktop/issues/10360 | 4 days, 15:35:37 | None |
| Discord WebApp Issue with Audio | https://github.com/zen-browser/desktop/issues/10358 | None | 5:03:34 |
| Apple Security Blocked | https://github.com/zen-browser/desktop/issues/10354 | None | None |
| Always Blank Screen - although It's working and loading Pages | https://github.com/zen-browser/desktop/issues/10353 | 0:21:31 | 8 days, 17:02:49 |
| Tabs are lost then a workspace deletion is synced | https://github.com/zen-browser/desktop/issues/10345 | None | None |
| Fix | https://github.com/zen-browser/desktop/issues/10344 | 8:18:05 | 1 day, 9:23:10 |
| 1px white border on the top of the window which wasnt there before | https://github.com/zen-browser/desktop/issues/10342 | 2 days, 0:57:48 | None |
| zen browser isn't closing correctly | https://github.com/zen-browser/desktop/issues/10337 | 8:28:03 | 17:42:22 |
| Fix Multiple Tabs/Containers in Split View in Sidebar | https://github.com/zen-browser/desktop/issues/10335 | None | None |
| Fresh install: "Essentials" are grayed out for some sites | https://github.com/zen-browser/desktop/issues/10333 | 0:17:20 | 2:38:34 |
| Unticking 'Open Previous Tabs on Startup' messes with pinened folders | https://github.com/zen-browser/desktop/issues/10331 | None | None |
| Can't open Connection secure (certificate) 'page' anymore | https://github.com/zen-browser/desktop/issues/10330 | 1:25:14 | 4:54:22 |
| Some favicons of pins / essentials disappear when restarting without `Open previous windows and tabs` | https://github.com/zen-browser/desktop/issues/10329 | 3:12:08 | None |
| X Spaces breaks when Mic is requested | https://github.com/zen-browser/desktop/issues/10328 | 12 days, 16:06:32 | None |
| Tabs on Right , have Weird White Container that come out of nowhere | https://github.com/zen-browser/desktop/issues/10327 | None | 0:50:40 |
| Multiacccount containers + Mozilla sync deletes all custom containers | https://github.com/zen-browser/desktop/issues/10324 | None | None |
| Cannot open Links from Thunderbird emails in Zen browser | https://github.com/zen-browser/desktop/issues/10323 | 2 days, 7:50:34 | None |
| As long as the Baidu search engine exists in the search engine, the Baidu search engine in the quick search interface is at the top, regardless of whether it is checked or not. | https://github.com/zen-browser/desktop/issues/10322 | 1 day, 0:23:30 | None |
| Your tab just crashed | https://github.com/zen-browser/desktop/issues/10321 | None | None |
| Can not import bookmarks from FF | https://github.com/zen-browser/desktop/issues/10320 | None | None |
| Separate accounts across workspaces; should workspaces have different cookies and site data? | https://github.com/zen-browser/desktop/issues/10319 | 0:20:35 | None |
| folder names are a different font size | https://github.com/zen-browser/desktop/issues/10318 | 2:06:09 | 3 days, 16:05:52 |
| zen.view.experimental-no-window-controls stopped working | https://github.com/zen-browser/desktop/issues/10317 | 7:18:21 | 13:06:50 |
| Images get corrupted when uploading on Zen Browser (Flatpak + AUR, Linux + Wayland + NVIDIA) | https://github.com/zen-browser/desktop/issues/10316 | None | 4:13:56 |
| Popout Tab extensions not working | https://github.com/zen-browser/desktop/issues/10315 | None | None |
| Zen Browser freezing after waking from suspend | https://github.com/zen-browser/desktop/issues/10314 | 1 day, 7:54:39 | None |
| compact mode not working | https://github.com/zen-browser/desktop/issues/10313 | 3:21:50 | 12:27:20 |
| libnotify not used in Flatpak | https://github.com/zen-browser/desktop/issues/10310 | 19:30:48 | 19:30:48 |
| Essentials Tab order reset everytime I restart Zen Browser | https://github.com/zen-browser/desktop/issues/10309 | 1:24:30 | None |
| [ux]first keydown on fill bar is plain focus, enforce type wwhat to typeout what. on chatgpt.com | https://github.com/zen-browser/desktop/issues/10308 | 4:52:52 | 4:52:52 |
| Copying URL using shortcut when in reader mode does not work as expected | https://github.com/zen-browser/desktop/issues/10303 | 0:04:42 | None |
| Reopening Closed Tabs (Ctrl+Shift+T) Duplicates Essentials/Pinned, Causing Loss on Next Session If The Dupes Were Closed | https://github.com/zen-browser/desktop/issues/10302 | 4 days, 23:41:33 | None |
| Tabs within Folders in Workspaces switch back to the default workspace | https://github.com/zen-browser/desktop/issues/10299 | None | None |
| Can't clear the cookies and site data due to a UI bug | https://github.com/zen-browser/desktop/issues/10298 | 6:00:32 | 6:00:32 |
| Cannot move pinned tab to the top of normal tabs | https://github.com/zen-browser/desktop/issues/10295 | None | None |
| Mouse cursor position can have an undesirable effect on the tab switcher | https://github.com/zen-browser/desktop/issues/10292 | 2:12:31 | 2:29:10 |
| Essential tabs and Pinned tabs (including the ones inside a folder) do not load on startup | https://github.com/zen-browser/desktop/issues/10291 | 2:47:15 | None |
| Browser doesn't launch after update | https://github.com/zen-browser/desktop/issues/10290 | 4:30:50 | None |
| Double-click on sidebar no longer opens a new tab after recent Zen update | https://github.com/zen-browser/desktop/issues/10289 | 12:03:10 | 12:03:10 |
| ArchLinux AUR: Quellen für zen-browser-bin-1.15.4b-1 konnten nicht heruntergeladen werden | https://github.com/zen-browser/desktop/issues/10288 | 2:39:09 | 2:39:09 |
| Ctrl+Shift+T after reopening Zen mixes tabs from multiple workspaces | https://github.com/zen-browser/desktop/issues/10286 | None | 4 days, 6:16:17 |
| Keyboard Input Delay While Typing on Monaco Editors | https://github.com/zen-browser/desktop/issues/10285 | 1 day, 6:25:04 | None |
| the top close maximize minimize are shwoing up and not going according to the theme and its just very bugged | https://github.com/zen-browser/desktop/issues/10284 | 5:13:41 | 6:27:09 |
| New Tab opens in new window. | https://github.com/zen-browser/desktop/issues/10283 | 0:29:33 | None |
| Can only open in safe mode. 1.15.5b | https://github.com/zen-browser/desktop/issues/10282 | 2:10:07 | 3:33:03 |
| Copy to Cliboard button in the url bar not working | https://github.com/zen-browser/desktop/issues/10281 | 2 days, 6:09:05 | 20 days, 2:34:28 |
| After the 1.15.4b update, the automatic hiding of the top and tab is not working | https://github.com/zen-browser/desktop/issues/10280 | 4:35:52 | 16:55:08 |
| Cannot move window when holding down left mouse button on sidebar | https://github.com/zen-browser/desktop/issues/10278 | 3 days, 19:54:46 | 3 days, 21:15:09 |
| Sidebar always visible in compact mode after right-clicking container icon when opening a new tab | https://github.com/zen-browser/desktop/issues/10276 | 1:53:46 | None |
| zen cannot play youtube livestreams | https://github.com/zen-browser/desktop/issues/10274 | 5:07:19 | None |
| Compact sidebar pops up when opening menus in menubar | https://github.com/zen-browser/desktop/issues/10273 | None | None |
| Newest Update — weird Bookmarks behavior | https://github.com/zen-browser/desktop/issues/10272 | None | 0:34:25 |
| Double-clicking no longer opens a new tab. | https://github.com/zen-browser/desktop/issues/10270 | 1:23:48 | 2:13:30 |
| Theme is inconsistent with and without focus | https://github.com/zen-browser/desktop/issues/10268 | None | None |
| Tabs inside folder goes invisible when closing folder | https://github.com/zen-browser/desktop/issues/10267 | 10:34:08 | 11:05:06 |
| Essentials/Pinned tabs are removed with middle click | https://github.com/zen-browser/desktop/issues/10266 | 2:33:21 | 11:29:40 |
| Creating split window by dragging pinned Essentials icon removes the Essential icon | https://github.com/zen-browser/desktop/issues/10264 | None | None |
| Macos: extention pop-ups open up at a different desktop in fullscreen | https://github.com/zen-browser/desktop/issues/10260 | None | None |
| Split tabs can't be moved to new workspace | https://github.com/zen-browser/desktop/issues/10256 | None | 11:32:53 |
| Google account not shared between spaces — must re-add to sign in to Figma | https://github.com/zen-browser/desktop/issues/10255 | 8:43:21 | None |
| Split tabs context menu does not show when selecting already split tabs | https://github.com/zen-browser/desktop/issues/10254 | 1 day, 8:31:56 | None |
| Netflix Error F7121-1331 | https://github.com/zen-browser/desktop/issues/10251 | 2:31:38 | 0:02:34 |
| Gradient themes get cut off if using vertical taskbar on W10 | https://github.com/zen-browser/desktop/issues/10250 | 20 days, 21:52:53 | None |
| White/Transparent search bar and bookmarks | https://github.com/zen-browser/desktop/issues/10247 | 11:15:56 | 1 day, 14:35:40 |
| Pin tabs duplication | https://github.com/zen-browser/desktop/issues/10246 | 13:43:00 | 13:43:00 |
| Zen window transparency only works when window is maximized | https://github.com/zen-browser/desktop/issues/10243 | None | None |
| Cursor rapid flickering on random places within the browser window when graphic tablet is used | https://github.com/zen-browser/desktop/issues/10242 | 21:55:18 | 21:57:24 |
| MIssing last second(s) in certain audios | https://github.com/zen-browser/desktop/issues/10240 | None | None |
| Issue with Transparency Effect in background in Zen Browser | https://github.com/zen-browser/desktop/issues/10239 | 3:36:39 | 18 days, 3:00:45 |
| Zen icon does not load even apon restart. | https://github.com/zen-browser/desktop/issues/10238 | 1 day, 7:03:03 | 1 day, 7:03:03 |
| Discord login page does not load | https://github.com/zen-browser/desktop/issues/10234 | None | None |
| Native window title doesn't show Page title(document.title) when tab is pinned and renamed, shows only profile name and app name | https://github.com/zen-browser/desktop/issues/10232 | None | None |
| Enabling "Always use private browsing mode" results in totally black UI | https://github.com/zen-browser/desktop/issues/10231 | None | None |
| After newest Update there is now a ugly white Border around the Hidden Compact Sidebar | https://github.com/zen-browser/desktop/issues/10230 | 1 day, 13:55:29 | 2 days, 20:51:00 |
| File manager not opening in Arch linux | https://github.com/zen-browser/desktop/issues/10226 | 0:12:51 | None |
| Default color back to orange | https://github.com/zen-browser/desktop/issues/10225 | 0:07:41 | 3:10:01 |
| NAVEGADOR CONSUMINDO 12 GIGAS? CARALHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO | https://github.com/zen-browser/desktop/issues/10224 | None | 0:24:57 |
| gemini style bug | https://github.com/zen-browser/desktop/issues/10222 | 1:32:02 | 1:04:01 |
| Zen Browser opens on the last used virtual desktop instead of the current one | https://github.com/zen-browser/desktop/issues/10221 | 2:07:09 | None |
| Tabs having weird behaviour when moving them form one window to the other | https://github.com/zen-browser/desktop/issues/10220 | None | None |
| Web pages in the workspace cannot be synced | https://github.com/zen-browser/desktop/issues/10219 | 5 days, 0:56:10 | 5 days, 6:23:07 |
| Swipe workspaces gesture freezes on "Mute Tab" icon hover | https://github.com/zen-browser/desktop/issues/10217 | None | None |
| Sub-folders of Tabs, Dump Tabs when moved in a Folder List | https://github.com/zen-browser/desktop/issues/10216 | 2 days, 13:52:56 | 4 days, 22:25:16 |
| Labels rendering bug | https://github.com/zen-browser/desktop/issues/10215 | 11:10:14 | 3 days, 22:48:16 |
| Browser doesn't allow completion of TOTP number on Paypal site | https://github.com/zen-browser/desktop/issues/10214 | None | None |
| Unable to use Option+Cmd+ArrowLeft or Option+Cmd+ArrowRight to change spaces. | https://github.com/zen-browser/desktop/issues/10211 | 14:39:09 | 15:34:26 |
| The Workspace Icon can't be hided anymore | https://github.com/zen-browser/desktop/issues/10209 | 1:41:32 | 1:41:32 |
| Tabs move into Folders | https://github.com/zen-browser/desktop/issues/10208 | 0:24:03 | 7:25:32 |
| Native select low contrast theme | https://github.com/zen-browser/desktop/issues/10207 | None | None |
| Trackpad zooming on PDF no longer working | https://github.com/zen-browser/desktop/issues/10205 | None | None |
| Cant add tab to Essentials | https://github.com/zen-browser/desktop/issues/10204 | 1:15:16 | 8:15:36 |
| Zen browser can't go through system proxies on Linux | https://github.com/zen-browser/desktop/issues/10203 | None | None |
| The Browser's adressbar is not visible because it blends into the current viewed page. | https://github.com/zen-browser/desktop/issues/10202 | 0:13:50 | 2 days, 23:44:36 |
| Wrong favicon instead of cached icons bug is back | https://github.com/zen-browser/desktop/issues/10199 | 1 day, 6:59:45 | 2 days, 21:44:37 |
| iCloud not working | https://github.com/zen-browser/desktop/issues/10192 | 6:18:44 | 11:56:51 |
| Truncated folder name in the search inside folders feature | https://github.com/zen-browser/desktop/issues/10189 | 2:31:02 | None |
| Missing translations in the search inside folders feature | https://github.com/zen-browser/desktop/issues/10188 | 2:16:01 | 2:16:01 |
| New "floadting" tab bar window covers bookmark bar | https://github.com/zen-browser/desktop/issues/10186 | 6:07:17 | 16:21:43 |
| Revert 1.15.3b!!!! | https://github.com/zen-browser/desktop/issues/10185 | 1:12:24 | 1:03:18 |
| "New Tab Below" menu item when right clicking on a tab no longer shows after upgrading from 1.14.11b | https://github.com/zen-browser/desktop/issues/10184 | None | 2:40:19 |
| Multiple bugs with new folder Feature | https://github.com/zen-browser/desktop/issues/10182 | 1:37:43 | None |
| New window bug - unpinned tabs disappear, folders expand | https://github.com/zen-browser/desktop/issues/10180 | 2:22:55 | 2:22:55 |
| Essentials not syncing across all spaces in same container | https://github.com/zen-browser/desktop/issues/10179 | 3:37:37 | 24 days, 5:11:42 |
| Macos Universal download installer | https://github.com/zen-browser/desktop/issues/10175 | 7:10:27 | 7:10:27 |
_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-09-01..2025-09-30`

View File

@@ -48,4 +48,4 @@ zen-icons-picker-emoji =
.label = Emojis
zen-icons-picker-svg =
.label = Icones
urlbar-search-mode-zen_actions = Actions
urlbar-search-mode-zen_actions = Accions

View File

@@ -48,4 +48,4 @@ zen-icons-picker-emoji =
.label = Emojis
zen-icons-picker-svg =
.label = Symbole
urlbar-search-mode-zen_actions = Actions
urlbar-search-mode-zen_actions = Aktionen

View File

@@ -64,3 +64,24 @@ zen-icons-picker-svg =
.label = Icons
urlbar-search-mode-zen_actions = Actions
zen-site-data-settings = Settings
zen-generic-manage = Manage
zen-generic-more = More
# These labels will be used for the site data panel settings
zen-site-data-setting-allow = Allowed
zen-site-data-setting-block = Blocked
zen-site-data-security-info-extension =
.label = Extension
zen-site-data-security-info-secure =
.label = Secure
zen-site-data-security-info-not-secure =
.label = Not Secure
zen-site-data-manage-addons =
.label = Manage Extensions
zen-site-data-get-addons =
.label = Add Extensions
zen-site-data-site-settings =
.label = All Site Settings

View File

@@ -4,7 +4,7 @@ tab-context-zen-reset-pinned-tab =
.label = Réinitialiser longlet épinglé
.accesskey = R
tab-context-zen-add-essential =
.label = Ajouter aux Essentials ({ $num } / 12 emplacements remplis)
.label = Ajouter aux Essentials ({ $num }/12 emplacements occupés)
.accesskey = E
tab-context-zen-remove-essential =
.label = Retirer des Essentials

View File

@@ -48,4 +48,4 @@ zen-icons-picker-emoji =
.label = Emojis
zen-icons-picker-svg =
.label = Deilbhíní
urlbar-search-mode-zen_actions = Actions
urlbar-search-mode-zen_actions = Gníomhartha

View File

@@ -48,4 +48,4 @@ zen-icons-picker-emoji =
.label = Emoji
zen-icons-picker-svg =
.label = Ikon
urlbar-search-mode-zen_actions = Actions
urlbar-search-mode-zen_actions = Aksi

View File

@@ -48,4 +48,4 @@ zen-icons-picker-emoji =
.label = 이모티콘
zen-icons-picker-svg =
.label = 아이콘
urlbar-search-mode-zen_actions = Actions
urlbar-search-mode-zen_actions = 액션

View File

@@ -48,4 +48,4 @@ zen-icons-picker-emoji =
.label = Emojis
zen-icons-picker-svg =
.label = Ícones
urlbar-search-mode-zen_actions = Actions
urlbar-search-mode-zen_actions = Ações

View File

@@ -48,4 +48,4 @@ zen-icons-picker-emoji =
.label = Емоджі
zen-icons-picker-svg =
.label = Значки
urlbar-search-mode-zen_actions = Actions
urlbar-search-mode-zen_actions = Дії

View File

@@ -27,7 +27,7 @@ zen-glance-trigger-shift-click =
zen-glance-trigger-meta-click =
.label = Meta (Command) + 左鍵
zen-glance-trigger-mantain-click =
.label = 長按(即將上線
.label = 長按(即將推出
zen-look-and-feel-compact-view-header = 在緊湊模式下顯示
zen-look-and-feel-compact-view-description = 只顯示你需要用的工具欄!
zen-look-and-feel-compact-view-enabled =
@@ -92,12 +92,12 @@ zen-vertical-tabs-expand-tabs-header = 如何擴展分頁
zen-vertical-tabs-expand-tabs-description = 選擇要如何擴展側邊欄中的分頁
zen-theme-marketplace-header = Zen 模組
zen-theme-disable-all-enabled =
.title = 啟用所有主題
.title = 啟用所有模組
zen-theme-disable-all-disabled =
.title = 停用所有主題
zen-theme-marketplace-description = 從商店尋找並安裝主題
.title = 停用所有模組
zen-theme-marketplace-description = 從商店尋找並安裝模組
zen-theme-marketplace-remove-button =
.label = 移除主題
.label = 移除模組
zen-theme-marketplace-check-for-updates-button =
.label = 檢查更新
zen-theme-marketplace-import-button =
@@ -114,15 +114,15 @@ zen-theme-marketplace-toggle-enabled-button =
.title = 關閉佈景主題
zen-theme-marketplace-toggle-disabled-button =
.title = 啟用佈景主題
zen-theme-marketplace-remove-confirmation = 您確定要移除此模組?
zen-theme-marketplace-remove-confirmation = 您確定要移除此模組
zen-theme-marketplace-close-modal = 關閉
zen-theme-marketplace-theme-header-title =
.title = CSS 選擇器:{ $name }
zen-theme-marketplace-dropdown-default-label =
.label = 無
zen-theme-marketplace-input-default-placeholder =
.placeholder = 請輸入
pane-zen-marketplace-title = Zen 模
.placeholder = 請輸入...
pane-zen-marketplace-title = Zen 模
zen-themes-auto-update =
.label = 啟動時自動更新已安裝模組
zen-settings-workspaces-force-container-tabs-to-workspace =
@@ -150,12 +150,12 @@ pane-zen-CKS-title = 快捷鍵
category-zen-CKS =
.tooltiptext = { pane-zen-CKS-title }
pane-settings-CKS-title = { -brand-short-name } 快捷鍵
zen-settings-CKS-header = 自定義的快捷鍵
zen-settings-CKS-description = 依據的愛好來更改預設的快捷鍵以近一步改善你的瀏覽體驗
zen-settings-CKS-header = 自定義的快捷鍵
zen-settings-CKS-description = 依據的愛好來更改預設的快捷鍵以近一步改善你的瀏覽體驗
zen-settings-CKS-disable-firefox =
.label = 停用 { -brand-short-name } 的預設快捷鍵
zen-settings-CKS-duplicate-shortcut =
.label = 重複的快捷鍵
.label = 複製快捷鍵
zen-settings-CKS-reset-shortcuts =
.label = 重設為預設值
zenCKSOption-group-other = 其它
@@ -173,13 +173,13 @@ zenCKSOption-group-devTools = 開發人員工具
zen-key-quick-restart = 快速重啟
zen-window-new-shortcut = 開新視窗
zen-tab-new-shortcut = 開新分頁
zen-key-redo = 重做
zen-key-redo = 取消復原
zen-restore-last-closed-tab-shortcut = 復原上次關閉的分頁
zen-location-open-shortcut = 選取網址列
zen-location-open-shortcut-alt = 選取網址列(備用)
zen-key-undo-close-window = 還原已關閉視窗
zen-text-action-undo-shortcut = 復原
zen-text-action-redo-shortcut = 取消復原
zen-text-action-redo-shortcut = 取消復原
zen-text-action-cut-shortcut = 剪下
zen-text-action-copy-shortcut = 複製
zen-text-action-copy-url-shortcut = 複製目前網址
@@ -219,9 +219,9 @@ zen-history-show-all-shortcut = 顯示所有歷史
zen-key-enter-full-screen = 進入全畫面模式
zen-key-exit-full-screen = 離開全畫面模式
zen-ai-chatbot-sidebar-shortcut = 開啟 AI 聊天側邊欄
zen-key-inspector-mac = 開啟檢測器(Mac)
zen-key-inspector-mac = 開啟檢測器 (Mac)
zen-toggle-sidebar-shortcut = 開啟 Firefox 側邊欄
zen-toggle-pin-tab-shortcut = Toggle Pin Tab
zen-toggle-pin-tab-shortcut = 切換釘選分頁
zen-reader-mode-toggle-shortcut-other = 切換閱讀模式
zen-picture-in-picture-toggle-shortcut = 切換子母畫面
zen-nav-reload-shortcut-2 = 重新整理

View File

@@ -1,21 +1,21 @@
zen-folders-search-placeholder =
.placeholder = Search { $folder-name }...
.placeholder = 搜尋 { $folder-name }...
zen-folders-panel-rename-folder =
.label = Rename Folder
.label = 重新命名分頁夾
zen-folders-panel-unpack-folder =
.label = Unpack Folder
.label = 解散分頁夾
zen-folders-new-subfolder =
.label = New Subfolder
.label = 新增子分頁夾
zen-folders-panel-delete-folder =
.label = Delete Folder
.label = 刪除分頁夾
zen-folders-panel-convert-folder-to-space =
.label = Convert folder to Space
.label = 將分頁夾轉換為工作區
zen-folders-panel-change-folder-space =
.label = Change Space...
.label = 變更工作區...
zen-folders-panel-change-icon-folder =
.label = Change Icon
.label = 變更圖示
zen-folders-unload-all-tooltip =
.tooltiptext = Unload active in this folder
.tooltiptext = 卸載此分頁夾中所有分頁
zen-folders-unload-folder =
.label = Unload All Tabs
zen-folders-search-no-results = 沒有找到搜尋的分頁 🤔
.label = 卸載所有分頁
zen-folders-search-no-results = 找不到符合搜尋的分頁 🤔

View File

@@ -1,5 +1,5 @@
zen-panel-ui-current-profile-text = 當前設定檔
unified-extensions-description = 擴充功能用於為 { -brand-short-name } 帶來更多功能。
unified-extensions-description = 擴充功能為 { -brand-short-name } 帶來更多額外功能。
tab-context-zen-reset-pinned-tab =
.label = 重置釘選的分頁
.accesskey = R
@@ -12,25 +12,25 @@ tab-context-zen-remove-essential =
tab-context-zen-replace-pinned-url-with-current =
.label = 將釘選的網址換成目前的網址
.accesskey = C
zen-themes-corrupted = 你的 { -brand-short-name } 模組文件已損壞,它們已重為預設佈景主題。
zen-themes-corrupted = 你的 { -brand-short-name } 模組文件已損壞,它們已重為預設主題。
zen-shortcuts-corrupted = 你的 { -brand-short-name } 快捷文件已損壞。它們已被重設為預設值。
# note: Do not translate the "<br/>" tags in the following string
zen-new-urlbar-notification = 新的 URL 欄已啟用,你不再需要新增新分頁。<br/><br/>馬上打開新分頁來看看新的 URL 欄!
zen-disable =
zen-disable =
pictureinpicture-minimize-btn =
.aria-label = Minimize
.tooltip = Minimize
.aria-label = 最小化
.tooltip = 最小化
zen-panel-ui-gradient-generator-custom-color = 自訂顏色
zen-panel-ui-gradient-generator-saved-message = 漸層儲存成功
zen-panel-ui-gradient-generator-saved-message = 已成功儲存漸層!
zen-copy-current-url-confirmation = 網址已複製到剪貼簿。
zen-general-cancel-label =
.label = 取消
zen-general-confirm =
.label = 確認
zen-pinned-tab-replaced = 釘選分頁網址已替換為當前當前網址。
zen-tabs-renamed = 分頁重新命名成功
zen-background-tab-opened-toast = New background tab opened!
zen-workspace-renamed-toast = Workspace has been successfully renamed!
zen-tabs-renamed = 已成功重新命名分頁
zen-background-tab-opened-toast = 已在背景開啟新分頁!
zen-workspace-renamed-toast = 已成功重新命名工作區!
zen-library-sidebar-workspaces =
.label = 工作區
zen-library-sidebar-mods =
@@ -45,5 +45,5 @@ zen-singletoolbar-urlbar-placeholder-with-name =
zen-icons-picker-emoji =
.label = 表情符號
zen-icons-picker-svg =
.label = Icons
urlbar-search-mode-zen_actions = Actions
.label = 圖示
urlbar-search-mode-zen_actions = 操作

View File

@@ -10,7 +10,7 @@ zen-split-link =
.accesskey = S
zen-split-view-modifier-header = 分割畫面
zen-split-view-modifier-activate-reallocation =
.label = 啟用重新分配
zen-split-view-modifier-enabled-toast = 分割畫面重新排列已開啟
zen-split-view-modifier-enabled-toast-description = 拖曳畫面以重新排列。按 Esc 鍵退出
zen-split-view-modifier-disabled-toast = 分割畫面重新排列已關閉
.label = 啟用重新排列
zen-split-view-modifier-enabled-toast = 已開啟分割畫面重新排列功能
zen-split-view-modifier-enabled-toast-description = 拖曳畫面以重新排列。按 Esc 鍵退出
zen-split-view-modifier-disabled-toast = 已關閉分割畫面重新排列功能。

View File

@@ -15,12 +15,12 @@ zen-toolbar-context-compact-mode-hide-both =
.label = 兩者皆隱藏
.accesskey = H
zen-toolbar-context-new-folder =
.label = New Folder
.label = 新增分頁夾
.accesskey = N
sidebar-zen-expand =
.label = 展開側邊欄
sidebar-zen-create-new =
.label = Create New...
.label = 新增...
tabbrowser-unload-tab-button =
.tooltiptext =
{ $tabCount ->

View File

@@ -2,26 +2,26 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
zen-welcome-title-line1 = Welcome to
zen-welcome-title-line2 = a calmer internet
zen-welcome-import-title = A Fresh Start, Same Bookmarks
zen-welcome-import-description-1 = Your bookmarks, history, and passwords are like a trail of breadcrumbs through the internet—dont leave them behind!
zen-welcome-title-line1 = 歡迎使用
zen-welcome-title-line2 = 更寧靜的網路體驗
zen-welcome-import-title = 全新開始,書籤依舊
zen-welcome-import-description-1 = 您的書籤、歷史記錄和密碼,是您網路足跡的珍貴紀錄——別把它們遺忘了!
zen-welcome-import-description-2 = 輕鬆匯入其他瀏覽器的資料,無縫接續瀏覽體驗。
zen-welcome-import-button = Import now
zen-welcome-set-default-browser = Set { -brand-short-name } as your default browser
zen-welcome-dont-set-default-browser = DONT set { -brand-short-name } as your default browser
zen-welcome-initial-essentials-title = Your Key Tabs, Always Within Reach
zen-welcome-initial-essentials-description-1 = Keep your most important tabs easily accessible and always at hand, no matter how many you open.
zen-welcome-initial-essentials-description-2 = Essential tabs are always visible, no matter what workspace you are in.
zen-welcome-workspace-colors-title = Your Workspaces, Your Colors
zen-welcome-workspace-colors-description = Personalize your browser by giving each workspace its own unique color identity.
zen-welcome-import-button = 立即匯入
zen-welcome-set-default-browser = { -brand-short-name } 設為您的預設瀏覽器
zen-welcome-dont-set-default-browser = 不要將 { -brand-short-name } 設為您的預設瀏覽器
zen-welcome-initial-essentials-title = 重要分頁,隨手可及
zen-welcome-initial-essentials-description-1 = 無論開啟多少分頁,最重要的分頁將永遠顯示,讓您輕鬆存取。
zen-welcome-initial-essentials-description-2 = 無論您在哪個工作區Essential 分頁會永遠顯示。
zen-welcome-workspace-colors-title = 您的工作區,您的色彩
zen-welcome-workspace-colors-description = 為每個工作區賦予獨特的色彩,打造個人化瀏覽器。
zen-welcome-start-browsing-title =
All set?<br/>
Lets get rolling!
zen-welcome-start-browsing-description-1 = Youre all set up and ready to go. Click the button below to start browsing with { -brand-short-name }.
zen-welcome-start-browsing = Dive in!
zen-welcome-default-search-title = Your Default Search Engine
zen-welcome-default-search-description = Choose your default search engine. You can always change it later!
zen-welcome-skip-button = Skip
zen-welcome-next-action = Next
zen-welcome-finished = Your Zen has been set up correctly!
準備好了嗎?<br/>
馬上開始體驗吧!
zen-welcome-start-browsing-description-1 = 您已完成所有設定並準備就緒。點擊下方按鈕,開始使用 { -brand-short-name } 瀏覽網路吧。
zen-welcome-start-browsing = 立即開始!
zen-welcome-default-search-title = 您的預設搜尋引擎
zen-welcome-default-search-description = 選擇您的預設搜尋引擎,您可以隨時更改它!
zen-welcome-skip-button = 跳過
zen-welcome-next-action = 下一步
zen-welcome-finished = 您的 Zen 瀏覽器已成功設定!

View File

@@ -1,8 +1,8 @@
zen-panel-ui-workspaces-text = 工作區
zen-panel-ui-workspaces-create =
.label = 建工作區
.label = 建工作區
zen-panel-ui-folder-create =
.label = Create Folder
.label = 建立分頁夾
zen-panel-ui-new-empty-split =
.label = New Split
zen-workspaces-panel-context-delete =
@@ -13,7 +13,7 @@ zen-workspaces-panel-change-name =
zen-workspaces-panel-change-icon =
.label = 變更圖示
zen-workspaces-panel-context-default-profile =
.label = Set Profile
.label = 設定設定檔
zen-workspaces-how-to-reorder-title = 如何排序工作區
zen-workspaces-how-to-reorder-desc = 拖曳側邊欄底部工作區圖示以重新排序
zen-workspaces-change-theme =
@@ -25,7 +25,7 @@ zen-workspaces-panel-context-edit =
.label = 編輯工作區
.accesskey = E
context-zen-change-workspace-tab =
.label = 將分頁(含多個)移至工作區
.label = 將分頁移至工作區
.accesskey = C
zen-bookmark-edit-panel-workspace-selector =
.value = 選擇工作區
@@ -45,9 +45,9 @@ zen-workspace-creation-name =
.placeholder = 工作區名稱
zen-workspaces-panel-context-reorder =
.label = 排序工作區
zen-workspace-creation-profile = Profile
.tooltiptext = Profiles are used to separate cookies and site data between spaces.
zen-workspace-creation-header = 建工作區
zen-workspace-creation-label = Spaces are used to organize your tabs and sessions.
zen-workspace-creation-profile = 設定檔
.tooltiptext = 設定檔用於隔離不同工作區的 Cookie 和網站資料。
zen-workspace-creation-header = 建工作區
zen-workspace-creation-label = 工作區用於組織您的分頁與工作階段。
zen-workspaces-delete-workspace-title = 刪除工作區?
zen-workspaces-delete-workspace-body = 確定要刪除 { $name } 嗎?該動作無法復原。
zen-workspaces-delete-workspace-body = 確定要刪除 { $name } 嗎?此操錯無法復原。

View File

@@ -3,8 +3,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
- name: browser.startup.page
value: 0
locked: true
value: 3
- name: browser.sessionstore.restore_pinned_tabs_on_demand
value: true

View File

@@ -53,9 +53,6 @@
- name: browser.formfill.enable
value: false
- name: network.IDN_show_punycode
value: true
- name: browser.urlbar.suggest.topsites
value: true
locked: true

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js
index d7542a38a0242dd9c9c6390171d59992d75a0c19..d20e5a9fa42c88c7ba28fac1ef13dd693f1f1135 100644
index d7542a38a0242dd9c9c6390171d59992d75a0c19..baa5d84c26f7e74c779bc7e1a2b83b543b413441 100644
--- a/browser/base/content/browser-addons.js
+++ b/browser/base/content/browser-addons.js
@@ -1064,7 +1064,7 @@ var gXPInstallObserver = {
@@ -20,7 +20,38 @@ index d7542a38a0242dd9c9c6390171d59992d75a0c19..d20e5a9fa42c88c7ba28fac1ef13dd69
},
};
@@ -2608,7 +2608,7 @@ var gUnifiedExtensions = {
@@ -2205,7 +2205,7 @@ var gUnifiedExtensions = {
// If the new ID is not added in NOTIFICATION_IDS, consider handling the case
// in the "PopupNotificationsBeforeAnchor" handler elsewhere in this file.
getPopupAnchorID(aBrowser, aWindow) {
- const anchorID = "unified-extensions-button";
+ const anchorID = "zen-site-data-icon-button";
const attr = anchorID + "popupnotificationanchor";
if (!aBrowser[attr]) {
@@ -2216,7 +2216,7 @@ var gUnifiedExtensions = {
anchorID
// Anchor on the toolbar icon to position the popup right below the
// button.
- ).firstElementChild;
+ );
}
return anchorID;
@@ -2509,11 +2509,7 @@ var gUnifiedExtensions = {
// Lazy load the unified-extensions-panel panel the first time we need to
// display it.
if (!this._panel) {
- let template = document.getElementById(
- "unified-extensions-panel-template"
- );
- template.replaceWith(template.content);
- this._panel = document.getElementById("unified-extensions-panel");
+ this._panel = document.getElementById("zen-unified-site-data-panel");
let customizationArea = this._panel.querySelector(
"#unified-extensions-area"
);
@@ -2608,7 +2604,7 @@ var gUnifiedExtensions = {
this.recordButtonTelemetry(reason || "extensions_panel_showing");
this.ensureButtonShownBeforeAttachingPanel(panel);
PanelMultiView.openPopup(panel, this._button, {
@@ -29,7 +60,7 @@ index d7542a38a0242dd9c9c6390171d59992d75a0c19..d20e5a9fa42c88c7ba28fac1ef13dd69
triggerEvent: aEvent,
});
}
@@ -2795,18 +2795,20 @@ var gUnifiedExtensions = {
@@ -2795,18 +2791,20 @@ var gUnifiedExtensions = {
this._maybeMoveWidgetNodeBack(widgetId);
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/navigator-toolbox.js b/browser/base/content/navigator-toolbox.js
index 413bad2a62058a1c434d6a44e927e44eb397289d..b621c586e679bb8686fe9a5e6743512e71604425 100644
index 413bad2a62058a1c434d6a44e927e44eb397289d..472eab5d3bca2bc665920707a71105167cbe75ec 100644
--- a/browser/base/content/navigator-toolbox.js
+++ b/browser/base/content/navigator-toolbox.js
@@ -8,7 +8,7 @@
@@ -11,6 +11,24 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..b621c586e679bb8686fe9a5e6743512e
const widgetOverflow = document.getElementById("widget-overflow");
function onPopupShowing(event) {
@@ -110,7 +110,7 @@ document.addEventListener(
#pageActionButton,
#downloads-button,
#fxa-toolbar-menu-button,
- #unified-extensions-button,
+ #zen-site-data-icon-button,
#library-button
`);
if (!element) {
@@ -138,7 +138,7 @@ document.addEventListener(
gSync.toggleAccountPanel(element, event);
break;
- case "unified-extensions-button":
+ case "zen-site-data-icon-button":
gUnifiedExtensions.togglePanel(event);
break;
@@ -187,6 +187,7 @@ document.addEventListener(
#reload-button ,
#urlbar-go-button,
@@ -27,3 +45,21 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..b621c586e679bb8686fe9a5e6743512e
gBrowser.handleNewTabMiddleClick(element, event);
break;
@@ -317,7 +319,7 @@ document.addEventListener(
#pageActionButton,
#downloads-button,
#fxa-toolbar-menu-button,
- #unified-extensions-button,
+ #zen-site-data-icon-button,
#library-button
`);
if (!element) {
@@ -396,7 +398,7 @@ document.addEventListener(
gSync.toggleAccountPanel(element, event);
break;
- case "unified-extensions-button":
+ case "zen-site-data-icon-button":
gUnifiedExtensions.togglePanel(event);
break;

View File

@@ -58,4 +58,3 @@
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenDownloadAnimation.mjs"></script>
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenEmojiPicker.mjs"></script>
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspaceCreation.mjs"></script>
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWindowSyncing.mjs"></script>

View File

@@ -42,7 +42,6 @@
content/browser/zen-components/ZenWorkspaceIcons.mjs (../../zen/workspaces/ZenWorkspaceIcons.mjs)
content/browser/zen-components/ZenWorkspace.mjs (../../zen/workspaces/ZenWorkspace.mjs)
content/browser/zen-components/ZenWorkspaces.mjs (../../zen/workspaces/ZenWorkspaces.mjs)
content/browser/zen-components/ZenWindowSyncing.mjs (../../zen/workspaces/ZenWindowSyncing.mjs)
content/browser/zen-components/ZenWorkspaceCreation.mjs (../../zen/workspaces/ZenWorkspaceCreation.mjs)
content/browser/zen-components/ZenWorkspacesStorage.mjs (../../zen/workspaces/ZenWorkspacesStorage.mjs)
content/browser/zen-components/ZenWorkspacesSync.mjs (../../zen/workspaces/ZenWorkspacesSync.mjs)

View File

@@ -49,3 +49,12 @@
<menuitem id="context_zenFolderUnpack" data-l10n-id="zen-folders-panel-unpack-folder"/>
<menuitem id="context_zenFolderDelete" data-l10n-id="zen-folders-panel-delete-folder"/>
</menupopup>
<menupopup id="zenSiteDataActions">
<menuitem id="context_zenClearSiteData" data-l10n-id="identity-clear-site-data"/>
<menuseparator />
<menuitem command="Tools:Addons" data-l10n-id="zen-site-data-manage-addons"/>
<menuitem id="context_zenOpenGetAddons" data-l10n-id="zen-site-data-get-addons"/>
<menuseparator />
<menuitem id="context_zenOpenSiteSettings" data-l10n-id="zen-site-data-site-settings"/>
</menupopup>

View File

@@ -0,0 +1,80 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
<panel id="zen-unified-site-data-panel"
role="group"
type="arrow"
noautofocus="true"
position="bottomright topright">
<panelmultiview mainViewId="unified-extensions-view">
# We'll keep the view with this name/id in order to prevent
# any sort of future issues we may have if firefox decides
# to change the functionality of this view
<panelview id="unified-extensions-view"
class="cui-widget-panelview"
mainview-with-header="true">
<hbox id="zen-site-data-header">
<toolbarbutton id="zen-site-data-header-share"
data-l10n-id="zen-site-data-share" />
<toolbarbutton id="zen-site-data-header-reader-mode"
command="View:ReaderView" />
<toolbarbutton id="zen-site-data-header-screenshot"
command="Browser:Screenshot" />
</hbox>
<vbox class="zen-site-data-section">
<hbox class="zen-site-data-section-header">
<label data-l10n-id="unified-extensions-header-title" flex="1" />
<label data-l10n-id="zen-generic-manage" id="zen-site-data-manage-addons" />
</hbox>
<hbox class="panel-subview-body" context="unified-extensions-context-menu" id="zen-site-data-addons">
<html:div id="unified-extensions-messages-container">
<!-- messages will be inserted here -->
</html:div>
<vbox id="overflowed-extensions-list">
<!-- overflowed extension buttons from the nav-bar will go here -->
</vbox>
<vbox id="unified-extensions-area">
<!-- default area for extension browser action buttons -->
</vbox>
<vbox class="unified-extensions-list">
<!-- active visible extensions go here -->
</vbox>
<vbox id="zen-site-data-new-addon-button-container">
<toolbarbutton id="zen-site-data-new-addon-button"
class="subviewbutton toolbarbutton-1" />
</vbox>
</hbox>
# Keep this button on the DOM even though we hide it for ever,
# again, to keep firefox happy if they decide to change functionality
# for this specific button / id
<toolbarbutton id="unified-extensions-manage-extensions"
class="subviewbutton panel-subview-footer-button unified-extensions-manage-extensions"
data-l10n-id="unified-extensions-manage-extensions"
hidden="true" />
</vbox>
<vbox class="zen-site-data-section">
<hbox class="zen-site-data-section-header">
<label data-l10n-id="zen-site-data-settings" flex="1" />
<label data-l10n-id="zen-generic-more" id="zen-site-data-settings-more" />
</hbox>
<vbox id="zen-site-data-settings-list">
<!-- settings will be inserted here -->
</vbox>
</vbox>
<hbox id="zen-site-data-footer">
<toolbarbutton id="zen-site-data-security-info"
class="subviewbutton zen-interactive-button" />
<toolbarbutton id="zen-site-data-actions"
class="subviewbutton zen-interactive-button"
closemenu="none"
context="zenSiteDataActions" />
</hbox>
</panelview>
</panelmultiview>
</panel>

View File

@@ -5,5 +5,6 @@
#include zen-panels/gradient-generator.inc
#include zen-panels/emojis-picker.inc
#include zen-panels/folders-search.inc
#include zen-panels/site-data.inc
#include zen-panels/popups.inc

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs
index 4f62449d670701c77c681ae36e00bae8bf2f636c..132c77e396cb259181ed13ca8ff784e0ade05e3b 100644
index 4f62449d670701c77c681ae36e00bae8bf2f636c..ac542f33927f9de9040bab9cd98351a4d74ede4e 100644
--- a/browser/components/customizableui/CustomizableUI.sys.mjs
+++ b/browser/components/customizableui/CustomizableUI.sys.mjs
@@ -14,6 +14,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -10,6 +10,15 @@ index 4f62449d670701c77c681ae36e00bae8bf2f636c..132c77e396cb259181ed13ca8ff784e0
HomePage: "resource:///modules/HomePage.sys.mjs",
PanelMultiView:
"moz-src:///browser/components/customizableui/PanelMultiView.sys.mjs",
@@ -323,7 +324,7 @@ var CustomizableUIInternal = {
{
type: CustomizableUI.TYPE_PANEL,
defaultPlacements: [],
- anchor: "unified-extensions-button",
+ anchor: "zen-site-data-icon-button",
},
false
);
@@ -333,19 +334,14 @@ var CustomizableUIInternal = {
"back-button",
"forward-button",

View File

@@ -0,0 +1,13 @@
diff --git a/browser/components/tabbrowser/TabsList.sys.mjs b/browser/components/tabbrowser/TabsList.sys.mjs
index 97990af166b63cae4b0343c77da5084850890504..b58d20eb3db82867030292625d45277afce1bbea 100644
--- a/browser/components/tabbrowser/TabsList.sys.mjs
+++ b/browser/components/tabbrowser/TabsList.sys.mjs
@@ -87,7 +87,7 @@ class TabsListBase {
/** @type {function(MozTabbrowserTab):boolean} */
this.filterFn = onlyHiddenTabs
? tab => filterFn(tab) && tab.hidden
- : filterFn;
+ : tab => !tab.hasAttribute("zen-empty-tab") && filterFn(tab);
/** @type {Element} */
this.containerNode = containerNode;
/** @type {Element|null} */

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536322388ea 100644
index b2d54218ca51f86d4591730054d0e7e1138adb94..d2c1f7f5b68ecc531c4e9e597457221fb51207c6 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -44,6 +44,9 @@
@@ -361,7 +361,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
#ensureTabIsVisible(tab, shouldScrollInstantly = false) {
- let arrowScrollbox = tab.closest("arrowscrollbox");
+ let arrowScrollbox = this.arrowScrollbox;
if (arrowScrollbox.overflowing) {
if (arrowScrollbox?.overflowing) {
arrowScrollbox.ensureElementIsVisible(tab, shouldScrollInstantly);
}
@@ -2288,6 +2343,16 @@
@@ -410,9 +410,9 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
translateX = Math.min(Math.max(translateX, firstBoundX), lastBoundX);
translateY = Math.min(Math.max(translateY, firstBoundY), lastBoundY);
@@ -2743,13 +2810,18 @@
@@ -2744,13 +2811,18 @@
this.#clearDragOverGroupingTimer();
this.#clearPinnedDropIndicatorTimer();
- let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
@@ -433,7 +433,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
if (this.#rtlMode) {
tabs.reverse();
@@ -2760,7 +2832,7 @@
@@ -2761,7 +2833,7 @@
let screenAxis = this.verticalMode ? "screenY" : "screenX";
let size = this.verticalMode ? "height" : "width";
let translateAxis = this.verticalMode ? "translateY" : "translateX";
@@ -442,7 +442,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
let tabSize = this.verticalMode ? tabHeight : tabWidth;
let translateX = event.screenX - dragData.screenX;
let translateY = event.screenY - dragData.screenY;
@@ -2776,6 +2848,12 @@
@@ -2777,6 +2849,12 @@
);
let lastMovingTab = movingTabs.at(-1);
let firstMovingTab = movingTabs[0];
@@ -455,7 +455,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
let endEdge = ele => ele[screenAxis] + bounds(ele)[size];
let lastMovingTabScreen = endEdge(lastMovingTab);
let firstMovingTabScreen = firstMovingTab[screenAxis];
@@ -2790,6 +2868,11 @@
@@ -2791,6 +2869,11 @@
let endBound = this.#rtlMode
? endEdge(this) - lastMovingTabScreen
: periphery[screenAxis] - 1 - lastMovingTabScreen;
@@ -467,7 +467,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
translate = Math.min(Math.max(translate, startBound), endBound);
// Center the tab under the cursor if the tab is not under the cursor while dragging
@@ -2979,6 +3062,8 @@
@@ -2980,6 +3063,8 @@
};
let dropElement = getOverlappedElement();
@@ -476,7 +476,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
let newDropElementIndex;
if (dropElement) {
@@ -3060,7 +3145,7 @@
@@ -3061,7 +3146,7 @@
? Services.prefs.getIntPref(
"browser.tabs.dragDrop.moveOverThresholdPercent"
) / 100
@@ -485,7 +485,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
moveOverThreshold = Math.min(1, Math.max(0, moveOverThreshold));
let shouldMoveOver = overlapPercent > moveOverThreshold;
if (logicalForward && shouldMoveOver) {
@@ -3093,6 +3178,7 @@
@@ -3094,6 +3179,7 @@
// If dragging a group over another group, don't make it look like it is
// possible to drop the dragged group inside the other group.
if (
@@ -493,7 +493,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
isTabGroupLabel(draggedTab) &&
dropElement?.group &&
(!dropElement.group.collapsed ||
@@ -3119,20 +3205,13 @@
@@ -3120,20 +3206,13 @@
let isOutOfBounds = isPinned
? dropElement.elementIndex >= numPinned
: dropElement.elementIndex < numPinned;
@@ -518,7 +518,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
let groupingDelay = Services.prefs.getIntPref(
"browser.tabs.dragDrop.createGroup.delayMS"
);
@@ -3140,6 +3219,7 @@
@@ -3141,6 +3220,7 @@
// When dragging tab(s) over an ungrouped tab, signal to the user
// that dropping the tab(s) will create a new tab group.
let shouldCreateGroupOnDrop =
@@ -526,7 +526,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
!movingTabsSet.has(dropElement) &&
isTab(dropElement) &&
!dropElement?.group &&
@@ -3148,6 +3228,7 @@
@@ -3149,6 +3229,7 @@
// When dragging tab(s) over a collapsed tab group label, signal to the
// user that dropping the tab(s) will add them to the group.
let shouldDropIntoCollapsedTabGroup =
@@ -534,7 +534,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
isTabGroupLabel(dropElement) &&
dropElement.group.collapsed &&
overlapPercent > dragOverGroupingThreshold;
@@ -3192,19 +3273,14 @@
@@ -3193,19 +3274,14 @@
dropElement = dropElementGroup;
colorCode = undefined;
} else if (isTabGroupLabel(dropElement)) {
@@ -562,7 +562,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
}
this.#setDragOverGroupColor(colorCode);
this.toggleAttribute("movingtab-addToGroup", colorCode);
@@ -3223,11 +3299,11 @@
@@ -3224,11 +3300,11 @@
dragData.dropElement = dropElement;
dragData.dropBefore = dropBefore;
dragData.animDropElementIndex = newDropElementIndex;
@@ -576,7 +576,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
continue;
}
@@ -3346,12 +3422,14 @@
@@ -3350,12 +3426,14 @@
element?.removeAttribute("dragover-groupTarget");
}
@@ -593,7 +593,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
for (let item of this.ariaFocusableItems) {
this.#resetGroupTarget(item);
@@ -3394,16 +3472,15 @@
@@ -3402,16 +3480,15 @@
tab.style.left = "";
tab.style.top = "";
tab.style.maxWidth = "";
@@ -612,7 +612,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
}
let periphery = draggedTabDocument.getElementById(
"tabbrowser-arrowscrollbox-periphery"
@@ -3475,7 +3552,7 @@
@@ -3483,7 +3560,7 @@
let postTransitionCleanup = () => {
movingTab._moveTogetherSelectedTabsData.animate = false;
};
@@ -621,7 +621,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -3639,7 +3716,7 @@
@@ -3647,7 +3724,7 @@
}
_notifyBackgroundTab(aTab) {
@@ -630,7 +630,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
return;
}
@@ -3748,7 +3825,10 @@
@@ -3756,7 +3833,10 @@
#getDragTarget(event, { ignoreSides = false } = {}) {
let { target } = event;
while (target) {
@@ -642,7 +642,7 @@ index c7557dad38db9ef02b981c46de9595df77cb67db..f45ecacd23179f06a436d5f3d372b536
break;
}
target = target.parentNode;
@@ -3765,6 +3845,9 @@
@@ -3773,6 +3853,9 @@
return null;
}
}

View File

@@ -1,12 +1,12 @@
diff --git a/browser/components/urlbar/UrlbarController.sys.mjs b/browser/components/urlbar/UrlbarController.sys.mjs
index 36e3ab4a5a153230bb488b66dda7e3e7c763ca23..81f2944b939ac0963c129f86aab0b55817349401 100644
index 36e3ab4a5a153230bb488b66dda7e3e7c763ca23..cc4ea61914a316451fa54b01a5c8c6a305e4038a 100644
--- a/browser/components/urlbar/UrlbarController.sys.mjs
+++ b/browser/components/urlbar/UrlbarController.sys.mjs
@@ -434,6 +434,8 @@ export class UrlbarController {
});
}
event.preventDefault();
+ } else {
+ } else if (!this.input.value && !(event.ctrlKey || event.altKey || event.shiftKey)) {
+ this.browserWindow.gZenUIManager.enableCommandsMode(event);
}
break;

View File

@@ -0,0 +1,12 @@
diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
index 555273f6ea1efd77aa3062b9910bbfe28568775d..5c4a46c926913ab592f5e12908b8817410abe6b6 100644
--- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
+++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
@@ -716,6 +716,7 @@ export class Query {
if (
result.heuristic &&
this.context.searchMode &&
+ !(this.context.searchMode.source === lazy.UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS && result.payload?.zenAction) &&
(!this.context.trimmedSearchString ||
(!this.context.searchMode.engineName && !result.autofill))
) {

View File

@@ -74,7 +74,8 @@
}
#appMenu-zoom-controls,
#PanelUI-zen-gradient-generator-color-add {
#PanelUI-zen-gradient-generator-color-add,
#zen-site-data-new-addon-button {
list-style-image: url('plus.svg') !important;
}
@@ -213,7 +214,8 @@
.search-setting-button > .button-box > .button-icon,
#appMenu-settings-button,
#PanelUI-zen-profiles-managePrfs,
.unified-extensions-item-open-menu.subviewbutton {
.unified-extensions-item-open-menu.subviewbutton,
.zen-site-data-permission-icon {
list-style-image: url('settings.svg') !important;
}
@@ -466,8 +468,15 @@
}
/* permissions */
#permissions-granted-icon {
list-style-image: url('permissions.svg') !important;
#identity-permission-box,
#identity-icon-box {
display: none !important;
}
#zen-site-data-icon-button image {
list-style-image: url('permissions.svg');
-moz-context-properties: fill, fill-opacity;
pointer-events: none;
}
.geo-icon {
@@ -558,7 +567,8 @@
list-style-image: url('midi.svg') !important;
}
.install-icon {
.install-icon,
.zen-permission-extension-icon {
list-style-image: url('extension.svg') !important;
}
@@ -811,3 +821,57 @@
-moz-context-properties: fill;
fill: currentColor;
}
#zen-site-data-security-info {
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
appearance: none;
border-radius: 4px;
padding: 5px;
&[identity='secure'] {
list-style-image: url('security.svg');
}
&[identity='not-secure'] {
list-style-image: url('security-broken.svg');
}
&[identity='extension'] {
list-style-image: url('extension.svg');
}
&:not([identity='secure']) * {
color: light-dark(var(--color-red-70), var(--color-red-30));
}
& .toolbarbutton-text {
padding-inline-start: 4px !important;
}
& .toolbarbutton-icon {
width: 16px;
}
& > * {
opacity: 0.8;
}
}
#zen-site-data-actions {
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
appearance: none;
width: 26px;
height: 26px;
border-radius: 99px;
margin-left: auto !important;
list-style-image: url('menu.svg');
justify-content: center;
align-items: center;
padding: 0;
& label {
display: none;
}
}

View File

@@ -2,4 +2,4 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
<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.638,3.495L2.213,12.891c-.605,1.048,.151,2.359,1.362,2.359H14.425c1.211,0,1.967-1.31,1.362-2.359L10.362,3.495c-.605-1.048-2.119-1.048-2.724,0Z"></path><line x1="9" y1="6.5" x2="9" y2="10" data-color="color-2"></line><path d="M9,13.569c-.552,0-1-.449-1-1s.448-1,1-1,1,.449,1,1-.448,1-1,1Z" 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"><path d="M7.638,3.495L2.213,12.891c-.605,1.048,.151,2.359,1.362,2.359H14.425c1.211,0,1.967-1.31,1.362-2.359L10.362,3.495c-.605-1.048-2.119-1.048-2.724,0Z"></path><line x1="9" y1="6.5" x2="9" y2="10"></line><path d="M9,13.569c-.552,0-1-.449-1-1s.448-1,1-1,1,.449,1,1-.448,1-1,1Z" fill="context-fill" data-stroke="none" stroke="none"></path></g></svg>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css
index 4485369284ee762bc8b35afb84fec0874a831fff..7096e2e5d50cda99b62a2aa7118fea6371e76b85 100644
index 4485369284ee762bc8b35afb84fec0874a831fff..6a1ad15f657437aa4ef98fda63ae921a378f7310 100644
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -31,7 +31,6 @@
@@ -10,13 +10,14 @@ index 4485369284ee762bc8b35afb84fec0874a831fff..7096e2e5d50cda99b62a2aa7118fea63
}
/* Using a semitransparent background preserves the tinting from the backdrop.
@@ -60,14 +59,12 @@
@@ -60,14 +59,13 @@
}
/* This is needed for Windows 10, see bug 1961257 */
-@media (-moz-windows-accent-color-in-titlebar) {
- :root[customtitlebar][sizemode="normal"] #navigator-toolbox {
+ :root[customtitlebar][sizemode="normal"] #browser {
+ --zen-sidebar-compact-top-offset: 1px;
border-top: 0.5px solid ActiveBorder;
&:-moz-window-inactive {
border-top-color: InactiveBorder;

View File

@@ -106,12 +106,20 @@ export var ZenCustomizableUI = new (class {
_initCreateNewButton(window) {
const button = window.document.getElementById('zen-create-new-button');
button.addEventListener('command', () => {
button.addEventListener('command', (event) => {
if (button.hasAttribute('open')) {
return;
}
const popup = window.document.getElementById('zenCreateNewPopup');
popup.openPopup(button, 'before_start');
popup.openPopup(
button,
'before_start',
0,
0,
true /* isContextMenu */,
false /* attributesOverride */,
event
);
});
}

View File

@@ -15,7 +15,11 @@
observeSelectorExistence(element, descendantSelectors, stateAttribute, attributeFilter = []) {
const updateState = () => {
const exists = descendantSelectors.some(({ selector }) => {
return element.querySelector(selector);
let selected = element.querySelector(selector);
if (selected?.tagName?.toLowerCase() === 'menu') {
return null;
}
return selected;
});
const { exists: shouldExist = true } = descendantSelectors;
if (exists === shouldExist) {

View File

@@ -1,6 +1,11 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
ChromeUtils.defineESModuleGetters(this, {
nsZenSiteDataPanel: 'resource:///modules/ZenSiteDataPanel.sys.mjs',
});
var gZenUIManager = {
_popupTrackingElements: [],
_hoverPausedForExpand: false,
@@ -14,19 +19,6 @@ var gZenUIManager = {
init() {
document.addEventListener('popupshowing', this.onPopupShowing.bind(this));
document.addEventListener('popuphidden', this.onPopupHidden.bind(this));
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
);
document.addEventListener('mousedown', this.handleMouseDown.bind(this), true);
@@ -44,6 +36,8 @@ var gZenUIManager = {
return document.getElementById('zen-toast-container');
});
window.gZenSiteDataPanel = new nsZenSiteDataPanel(window);
gURLBar._zenTrimURL = this.urlbarTrim.bind(this);
new ResizeObserver(
@@ -215,8 +209,10 @@ var gZenUIManager = {
!el.contains(showEvent.explicitOriginalTarget) ||
(showEvent.explicitOriginalTarget instanceof Element &&
showEvent.explicitOriginalTarget?.closest('panel')) ||
// See bug #7590: Ignore menupopup elements opening
showEvent.explicitOriginalTarget.tagName === 'menupopup'
// See bug #7590: Ignore menupopup elements opening.
// Also see #10612 for the exclusion of the zen-appcontent-navbar-wrapper
(showEvent.explicitOriginalTarget.tagName === 'menupopup' &&
el.id !== 'zen-appcontent-navbar-wrapper')
) {
continue;
}
@@ -260,7 +256,7 @@ var gZenUIManager = {
gURLBar.removeAttribute('animate-searchmode');
delete this._animatingSearchModeTimeout;
});
}, 700);
}, 1000);
}
}
},
@@ -594,6 +590,26 @@ var gZenUIManager = {
},
};
XPCOMUtils.defineLazyPreferenceGetter(
gZenUIManager,
'contentElementSeparation',
'zen.theme.content-element-separation',
0
);
XPCOMUtils.defineLazyPreferenceGetter(
gZenUIManager,
'urlbarWaitToClear',
'zen.urlbar.wait-to-clear',
0
);
XPCOMUtils.defineLazyPreferenceGetter(
gZenUIManager,
'urlbarShowDomainOnly',
'zen.urlbar.show-domain-only-in-sidebar',
true
);
var gZenVerticalTabsManager = {
init() {
this._multiWindowFeature = new nsZenMultiWindowFeature();

View File

@@ -103,10 +103,15 @@
/* Mark: URL Bar */
@keyframes zen-urlbar-searchmode {
0% {
box-shadow: 0 0 20px color-mix(in srgb, var(--zen-primary-color), var(--toolbox-textcolor) 20%);
box-shadow: 0 0 20px
color-mix(
in srgb,
color-mix(in srgb, var(--zen-primary-color), var(--toolbox-textcolor) 20%),
light-dark(rgba(0, 0, 0, 0.3), transparent) 50%
);
}
100% {
box-shadow: 0 0 300px color-mix(in srgb, var(--zen-primary-color), transparent 100%);
box-shadow: 0 0 250px color-mix(in srgb, var(--zen-primary-color), transparent 100%);
}
}

View File

@@ -120,6 +120,20 @@
border-radius: 10px !important;
}
}
.identity-box-button {
opacity: 0;
transition:
opacity 0.2s,
visibility 0.2s;
visibility: collapse;
#navigator-toolbox:hover &,
&[open] {
opacity: 1;
visibility: visible;
}
}
}
.urlbar-page-action,
@@ -155,8 +169,11 @@
order: 2 !important;
}
#urlbar[breakout-extend='true'] {
#urlbar[breakout] {
position: fixed;
}
#urlbar[breakout-extend='true'] {
z-index: 2;
& .urlbar-input-container {
@@ -172,8 +189,8 @@
& .urlbar-background {
--zen-urlbar-background-base: light-dark(
white,
color-mix(in srgb, hsl(0, 0%, 1%), var(--zen-colors-primary) 25%)
#fbfbfb,
color-mix(in srgb, hsl(0, 0%, 1%), var(--zen-colors-primary) 30%)
);
@media -moz-pref('zen.theme.acrylic-elements') {
--zen-urlbar-background-transparent: color-mix(
@@ -186,7 +203,7 @@
--zen-urlbar-background-transparent,
var(--zen-urlbar-background-base)
) !important;
box-shadow: 0px 0px 90px -10px light-dark(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.75)) !important;
box-shadow: 0px 30px 140px -15px light-dark(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.6)) !important;
backdrop-filter: none !important;
outline: 0.5px solid light-dark(rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.2)) !important;
outline-offset: var(--zen-urlbar-outline-offset) !important;
@@ -208,7 +225,7 @@
height: 100%;
border-radius: inherit;
pointer-events: none;
animation: zen-urlbar-searchmode ease-out 0.7s forwards;
animation: zen-urlbar-searchmode ease-out 1s forwards;
}
}
@@ -219,22 +236,12 @@
:root[zen-single-toolbar='true'] {
--urlbar-icon-border-radius: 10px !important;
.urlbar-page-action:not([open]):not(#identity-permission-box),
.urlbar-page-action:not([open]):not([showing]):not(#identity-permission-box),
#tracking-protection-icon-container {
display: none;
}
#identity-box:not([pageproxystate='invalid']):not(.notSecure) #identity-icon-box:not([open]) {
margin-inline-start: calc(-8px - 2 * var(--urlbar-icon-padding));
transform: translateX(100%);
opacity: 0;
:root:not([supress-primary-adjustment]) & {
transition: all 0.1s ease;
}
}
#identity-permission-box > *:not(#permissions-granted-icon) {
#identity-permission-box > *:not(#zen-site-data-icon-button) {
visibility: collapse;
}
@@ -242,25 +249,11 @@
display: none;
}
#urlbar[open]
:is(#tracking-protection-icon-container, .urlbar-page-action, .identity-box-button):not(
[hidden]
):not(#identity-permission-box),
#urlbar:hover #identity-icon-box {
opacity: 1 !important;
margin-inline-start: 0 !important;
transform: none !important;
display: flex;
#urlbar:not(:hover) & {
transition: none;
}
}
#urlbar:not([open]) #userContext-icons {
margin-inline: 0;
}
#urlbar:not([open]) {
#urlbar:not([breakout-extend='true']) {
#identity-box:not([pageproxystate='invalid']) {
order: 2;
}
@@ -678,4 +671,8 @@
#urlbar-search-mode-indicator-title {
font-weight: 600;
padding: 0px;
}
#reader-mode-button {
}

View File

@@ -31,7 +31,6 @@
--uc-autocomplete-panel-separator-margin-vertical: 4px;
--uc-permission-itemcontainer-padding-block: 8px;
--uc-permission-item-margin-block: 4px;
--uc-permission-item-padding-inline: 16px;
--zen-panel-separator-width: 1px;
}
@@ -228,12 +227,8 @@ panel {
.permission-popup-permission-item,
#permission-popup-storage-access-permission-list-header {
margin-block: var(--uc-permission-item-margin-block);
}
.permission-popup-permission-label,
.permission-popup-permission-header-label {
margin-inline-start: var(--uc-arrowpanel-menuicon-margin-inline);
padding-block: 4px;
margin-block: 0px;
}
#editBookmarkPanel > #editBookmarkHeaderSeparator,
@@ -241,12 +236,6 @@ panel {
margin-inline: 0;
}
#identity-popup-mainView > toolbarseparator:first-child,
#unified-extensions-view > toolbarseparator:first-child {
display: none;
opacity: 0;
}
menupopup,
panel {
box-shadow: none;

View File

@@ -43,7 +43,8 @@ body > #confetti {
}
/* Firefox View */
#firefox-view-button {
#firefox-view-button,
#wrapper-firefox-view-button {
display: none !important;
}
@@ -188,6 +189,21 @@ body > #confetti {
}
}
.zen-interactive-button {
background: color-mix(in srgb, currentColor 6%, transparent) !important;
transition:
background-color 0.12s ease-in-out,
transform 0.12s ease-in-out;
&:hover {
background-color: color-mix(in srgb, currentColor 10%, transparent) !important;
}
&:active:hover {
transform: scale(0.95);
}
}
/** Update animation */
#zen-update-animation {
@@ -260,3 +276,187 @@ body > #confetti {
#customization-container {
--toolbar-bgcolor: var(--zen-dialog-background);
}
/* Site Data popup */
#zen-unified-site-data-panel {
--panel-padding: 0px;
--panel-width: 228px;
--menu-panel-width-wide: calc(var(--panel-width) - var(--panel-padding) * 2);
--uei-icon-size: 14px;
--arrowpanel-menuitem-border-radius: 10px;
}
#unified-extensions-messages-container {
display: none;
}
#zen-site-data-addons {
display: flex;
flex-wrap: wrap;
gap: 8px;
overflow: visible;
.unified-extensions-item-name,
.unified-extensions-item-message,
.unified-extensions-item-message-hover,
.unified-extensions-item-message-hover-menu-button,
.unified-extensions-item-menu-button {
display: none;
}
#overflowed-extensions-list,
#unified-extensions-area,
.unified-extensions-list,
#zen-site-data-new-addon-button-container {
display: contents;
&:empty {
display: none;
}
& > * {
background-color: color-mix(in srgb, currentcolor 6%, transparent);
width: 46px;
height: 34px;
margin: 0;
justify-content: center;
align-items: center;
border-radius: 6px;
transition:
background-color 0.1s ease-in-out,
transform 0.12s ease-in-out;
& toolbarbutton {
background: transparent !important;
}
& .toolbarbutton-badge-stack {
margin: 0;
}
&:hover {
transform: scale(1.05);
}
&:active:hover {
transform: scale(0.95);
background-color: color-mix(in srgb, currentcolor 10%, transparent);
}
}
}
}
.zen-site-data-section {
gap: 6px;
padding: 8px;
}
.zen-site-data-section-header {
font-weight: 500;
font-size: small;
& label {
margin: 0;
}
& > label:nth-child(2) {
font-weight: 400;
font-size: smaller;
transition: opacity 0.15s ease-in-out;
opacity: 0;
padding: 0px 4px;
.zen-site-data-section:hover & {
opacity: 0.8;
}
}
}
#zen-site-data-new-addon-button .toolbarbutton-text {
display: none;
}
.permission-popup-permission-item {
gap: 8px;
overflow: hidden;
align-items: center;
}
.permission-popup-permission-label {
margin: 0px;
font-weight: 500;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.permission-popup-permission-icon {
fill: var(--button-primary-color);
padding: 8px;
width: 34px;
height: 34px;
overflow: visible;
position: relative;
appearance: none;
& label {
display: none;
}
& image {
-moz-context-properties: fill;
z-index: 1;
}
&::before {
content: '';
position: absolute;
inset: 1px;
border-radius: 99px;
width: 32px;
height: 32px;
background: var(--button-primary-bgcolor);
opacity: 0.6;
transition:
transform 0.12s ease-in-out,
opacity 0.12s ease-in-out;
}
.permission-popup-permission-item:hover &::before {
transform: scale(1.05);
}
.permission-popup-permission-item:active:hover &::before {
transform: scale(0.95);
}
.permission-popup-permission-item[state='allow'] &::before {
opacity: 1;
}
}
.zen-permission-popup-permission-state-label {
opacity: 0.8;
font-size: smaller;
font-weight: 400;
margin: 0;
}
#identity-box {
opacity: 0.6;
}
#zen-site-data-footer {
border-top: 1px solid color-mix(in srgb, currentColor 6%, transparent);
padding-top: 8px;
margin: 2px 8px 8px 8px;
& toolbarbutton {
margin: 0;
}
}
#unified-extensions-button:not([showing]) {
display: none !important;
}

View File

@@ -661,7 +661,7 @@ var gZenCompactModeManager = {
requestAnimationFrame(() => {
delete this._hasHoveredUrlbar;
});
}, 0);
}, 10);
}, 0);
});
},

View File

@@ -29,7 +29,7 @@
&,
&::before,
&::after {
border-radius: calc(var(--zen-native-inner-radius) + var(--zen-element-separation) / 4 - var(--zen-compact-mode-no-padding-radius-fix, 0px));
border-radius: calc(var(--zen-native-inner-radius) - var(--zen-compact-mode-no-padding-radius-fix, 0px));
}
}
@@ -97,7 +97,10 @@
bottom: var(--zen-compact-float);
padding: 0 var(--zen-compact-float) !important;
:root[zen-single-toolbar='true'] & {
top: calc(var(--zen-compact-float) / 2);
/* We add an extra offset since windows users have a border top
* in the window in order to compensate how windows renders the
* titlebar */
top: calc(var(--zen-compact-float) / 2 + var(--zen-sidebar-compact-top-offset, 0px));
height: calc(100% - var(--zen-compact-float));
}
:root:not([zen-single-toolbar='true']) & {
@@ -322,6 +325,9 @@
}
& #zen-appcontent-navbar-wrapper {
& .zen-toolbar-background {
display: flex;
}
--zen-compact-toolbar-offset: 5px;
position: absolute;
top: calc(-1 * var(--zen-toolbar-height) + 1px);
@@ -360,9 +366,6 @@
) {
& #zen-appcontent-navbar-container {
visibility: visible !important;
& .zen-toolbar-background {
display: flex;
}
}
border-top-width: 0px;

View File

@@ -1,27 +0,0 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
const FILE_NAME = 'zen-sessions.jsonlz4';
export class nsZenSessionFile {
#path;
#windows;
constructor() {
this.#path = PathUtils.join(profileDir, FILE_NAME);
}
async read() {
try {
return await IOUtils.readJSON(this.#path, { compress: true });
} catch (e) {
return {};
}
}
async write(data) {
await IOUtils.writeJSON(this.#path, data, { compress: true });
}
}

View File

@@ -1,50 +0,0 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
import {
cancelIdleCallback,
clearTimeout,
requestIdleCallback,
setTimeout,
} from 'resource://gre/modules/Timer.sys.mjs';
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
ZenSessionFile: 'resource://gre/modules/ZenSessionFile.sys.mjs',
PrivateBrowsingUtils: 'resource://gre/modules/PrivateBrowsingUtils.sys.mjs',
RunState: 'resource:///modules/sessionstore/RunState.sys.mjs',
});
class nsZenSessionManager {
#file;
constructor() {
this.#file = null;
}
get file() {
if (!this.#file) {
this.#file = lazy.ZenSessionFile;
}
return this.#file;
}
/**
* Saves the current session state. Collects data and writes to disk.
*
* @param forceUpdateAllWindows (optional)
* Forces us to recollect data for all windows and will bypass and
* update the corresponding caches.
*/
saveState(forceUpdateAllWindows = false) {
if (lazy.PrivateBrowsingUtils.permanentPrivateBrowsing) {
// Don't save (or even collect) anything in permanent private
// browsing mode
return Promise.resolve();
}
}
}
export const ZenSessionStore = new nsZenSessionManager();

View File

@@ -1,35 +0,0 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
export class ZenSessionWindow {
#id;
#selectedWorkspace;
#selectedTab;
constructor(id) {
this.#id = id;
this.#selectedWorkspace = null;
this.#selectedTab = null;
}
get id() {
return this.#id;
}
get selectedWorkspace() {
return this.#selectedWorkspace;
}
set selectedWorkspace(workspace) {
this.#selectedWorkspace = workspace;
}
get selectedTab() {
return this.#selectedTab;
}
set selectedTab(tab) {
this.#selectedTab = tab;
}
}

View File

@@ -97,7 +97,6 @@
}
onTabIconChanged(tab, url = null) {
tab.dispatchEvent(new CustomEvent('ZenTabIconChanged', { bubbles: true, detail: { tab } }));
const iconUrl = url ?? tab.iconImage.src;
if (!iconUrl && tab.hasAttribute('zen-pin-id')) {
try {
@@ -1512,7 +1511,6 @@
}
async onTabLabelChanged(tab) {
tab.dispatchEvent(new CustomEvent('ZenTabLabelChanged', { detail: { tab } }));
if (!this._pinsCache) {
return;
}

View File

@@ -978,9 +978,6 @@
& #PanelUI-button {
order: -2;
}
& #unified-extensions-button {
order: -1;
}
}
& #zen-sidebar-top-buttons-customization-target {

View File

@@ -0,0 +1,382 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
export class nsZenSiteDataPanel {
#iconMap = {
install: 'extension',
};
constructor(window) {
this.window = window;
this.document = window.document;
this.panel = this.document.getElementById('zen-unified-site-data-panel');
this.#init();
}
#init() {
// Add a new button to the urlbar popup
const button = this.window.MozXULElement.parseXULToFragment(`
<box id="zen-site-data-icon-button" role="button" align="center" class="identity-box-button" delegatesanchor="true">
<image />
</box>
`);
this.anchor = button.querySelector('#zen-site-data-icon-button');
this.document.getElementById('identity-icon-box').after(button);
this.window.gUnifiedExtensions._button = this.anchor;
this.document
.getElementById('nav-bar')
.setAttribute('addon-webext-overflowbutton', 'zen-site-data-icon-button');
// Remove the old permissions dialog
this.document.getElementById('unified-extensions-panel-template').remove();
this.#initEventListeners();
}
#initEventListeners() {
this.panel.addEventListener('popupshowing', this);
this.document
.getElementById('zen-site-data-new-addon-button')
.addEventListener('command', this);
this.document.getElementById('zen-site-data-manage-addons').addEventListener('click', this);
this.document.getElementById('zen-site-data-settings-more').addEventListener('click', this);
this.document.getElementById('zen-site-data-security-info').addEventListener('command', this);
this.document.getElementById('zen-site-data-actions').addEventListener('command', this);
this.#initContextMenuEventListener();
}
#initContextMenuEventListener() {
const kCommands = {
context_zenClearSiteData: (event) => {
this.window.gIdentityHandler.clearSiteData(event);
},
context_zenOpenGetAddons: () => {
this.#openGetAddons();
},
context_zenOpenSiteSettings: () => {
const { BrowserCommands } = this.window;
BrowserCommands.pageInfo(null, 'permTab');
},
};
for (let [id, handler] of Object.entries(kCommands)) {
this.document.getElementById(id).addEventListener('command', handler);
}
}
#preparePanel() {
this.#setSitePermissions();
this.#setSiteSecurityInfo();
}
#setSiteSecurityInfo() {
const { gIdentityHandler } = this.window;
const button = this.document.getElementById('zen-site-data-security-info');
if (gIdentityHandler._isSecureInternalUI) {
button.parentNode.hidden = true;
return;
}
let identity;
if (gIdentityHandler._pageExtensionPolicy) {
this.document.l10n.setAttributes(button, 'zen-site-data-security-info-extension');
identity = 'extension';
} else if (gIdentityHandler._uriHasHost && gIdentityHandler._isSecureConnection) {
this.document.l10n.setAttributes(button, 'zen-site-data-security-info-secure');
identity = 'secure';
} else {
this.document.l10n.setAttributes(button, 'zen-site-data-security-info-not-secure');
identity = 'not-secure';
}
button.parentNode.hidden = false;
button.setAttribute('identity', identity);
}
#setSitePermissions() {
const { gBrowser, SitePermissions } = this.window;
const list = this.document.getElementById('zen-site-data-settings-list');
const section = list.closest('.zen-site-data-section');
// show permission icons
let permissions = SitePermissions.getAllPermissionDetailsForBrowser(gBrowser.selectedBrowser);
// Don't display origin-keyed 3rdPartyStorage permissions that are covered by
// site-keyed 3rdPartyFrameStorage permissions.
let thirdPartyStorageSites = new Set(
permissions
.map(function (permission) {
let [id, key] = permission.id.split(SitePermissions.PERM_KEY_DELIMITER);
if (id == '3rdPartyFrameStorage') {
return key;
}
return null;
})
.filter(function (key) {
return key != null;
})
);
permissions = permissions.filter(function (permission) {
let [id, key] = permission.id.split(SitePermissions.PERM_KEY_DELIMITER);
if (id != '3rdPartyStorage') {
return true;
}
try {
let origin = Services.io.newURI(key);
let site = Services.eTLD.getSite(origin);
return !thirdPartyStorageSites.has(site);
} catch {
return false;
}
});
this._sharingState = gBrowser.selectedTab._sharingState;
if (this._sharingState?.geo) {
let geoPermission = permissions.find((perm) => perm.id === 'geo');
if (geoPermission) {
geoPermission.sharingState = true;
} else {
permissions.push({
id: 'geo',
state: SitePermissions.ALLOW,
scope: SitePermissions.SCOPE_REQUEST,
sharingState: true,
});
}
}
if (this._sharingState?.xr) {
let xrPermission = permissions.find((perm) => perm.id === 'xr');
if (xrPermission) {
xrPermission.sharingState = true;
} else {
permissions.push({
id: 'xr',
state: SitePermissions.ALLOW,
scope: SitePermissions.SCOPE_REQUEST,
sharingState: true,
});
}
}
if (this._sharingState?.webRTC) {
let webrtcState = this._sharingState.webRTC;
// If WebRTC device or screen are in use, we need to find
// the associated ALLOW permission item to set the sharingState field.
for (let id of ['camera', 'microphone', 'screen']) {
if (webrtcState[id]) {
let found = false;
for (let permission of permissions) {
let [permId] = permission.id.split(SitePermissions.PERM_KEY_DELIMITER);
if (permId != id || permission.state != SitePermissions.ALLOW) {
continue;
}
found = true;
permission.sharingState = webrtcState[id];
}
if (!found) {
// If the ALLOW permission item we were looking for doesn't exist,
// the user has temporarily allowed sharing and we need to add
// an item in the permissions array to reflect this.
permissions.push({
id,
state: SitePermissions.ALLOW,
scope: SitePermissions.SCOPE_REQUEST,
sharingState: webrtcState[id],
});
}
}
}
}
list.innerHTML = '';
for (let permission of permissions) {
let [id, key] = permission.id.split(SitePermissions.PERM_KEY_DELIMITER);
if (id == 'storage-access') {
// Ignore storage access permissions here, they are made visible inside
// the Content Blocking UI.
continue;
}
if (permission.state == SitePermissions.PROMPT) {
// We don't display "ask" permissions in the site data panel.
continue;
}
let item = this.#createPermissionItem(id, key, permission);
if (item) {
list.appendChild(item);
}
}
section.hidden = list.childElementCount == 0;
}
#getPermissionStateLabelId(permission) {
const { SitePermissions } = this.window;
switch (permission.state) {
// There should only be these types being displayed in the panel.
case SitePermissions.ALLOW:
return 'zen-site-data-setting-allow';
case SitePermissions.BLOCK:
case SitePermissions.AUTOPLAY_BLOCKED_ALL:
return 'zen-site-data-setting-block';
default:
return null;
}
}
#createPermissionItem(id, key, permission) {
const { SitePermissions } = this.window;
// Create a permission item for the site data panel.
let container = this.document.createXULElement('hbox');
const idNoSuffix = permission.id;
container.classList.add(
'permission-popup-permission-item',
`permission-popup-permission-item-${idNoSuffix}`
);
container.setAttribute('align', 'center');
container.setAttribute('role', 'group');
container.setAttribute('state', permission.state == SitePermissions.ALLOW ? 'allow' : 'block');
let img = this.document.createXULElement('toolbarbutton');
img.classList.add('permission-popup-permission-icon', 'zen-site-data-permission-icon');
if (this.#iconMap[id]) {
img.classList.add(`zen-permission-${this.#iconMap[id]}-icon`);
}
let labelContainer = this.document.createXULElement('vbox');
labelContainer.setAttribute('flex', '1');
labelContainer.setAttribute('align', 'start');
labelContainer.classList.add('permission-popup-permission-label-container');
labelContainer._permission = permission;
labelContainer.addEventListener('click', this);
let nameLabel = this.document.createXULElement('label');
nameLabel.setAttribute('flex', '1');
nameLabel.setAttribute('class', 'permission-popup-permission-label');
let label = SitePermissions.getPermissionLabel(permission.id);
if (label === null) {
return null;
}
nameLabel.textContent = label;
labelContainer.appendChild(nameLabel);
let stateLabel = this.document.createXULElement('label');
stateLabel.setAttribute('class', 'zen-permission-popup-permission-state-label');
stateLabel.setAttribute('data-l10n-id', this.#getPermissionStateLabelId(permission));
labelContainer.appendChild(stateLabel);
container.appendChild(img);
container.appendChild(labelContainer);
return container;
}
#openGetAddons() {
const { switchToTabHavingURI } = this.window;
let amoUrl = Services.urlFormatter.formatURLPref('extensions.getAddons.link.url');
switchToTabHavingURI(amoUrl, true);
}
#onCommandEvent(event) {
const id = event.target.id;
switch (id) {
case 'zen-site-data-new-addon-button': {
this.#openGetAddons();
break;
}
case 'zen-site-data-security-info': {
this.window.displaySecurityInfo();
break;
}
case 'zen-site-data-actions': {
const button = this.document.getElementById('zen-site-data-actions');
const popup = this.document.getElementById('zenSiteDataActions');
popup.openPopup(
button,
'after_start',
0,
0,
/* context menu */ true,
false,
this.window.event
);
break;
}
}
}
#onPermissionClick(label) {
const { SitePermissions, gBrowser } = this.window;
const permission = label._permission;
let newState;
switch (permission.state) {
case SitePermissions.ALLOW:
newState = SitePermissions.BLOCK;
break;
case SitePermissions.BLOCK:
case SitePermissions.AUTOPLAY_BLOCKED_ALL:
newState = SitePermissions.ALLOW;
break;
default:
return;
}
SitePermissions.setForPrincipal(gBrowser.contentPrincipal, permission.id, newState);
label.parentNode.setAttribute('state', newState == SitePermissions.ALLOW ? 'allow' : 'block');
label
.querySelector('.zen-permission-popup-permission-state-label')
.setAttribute('data-l10n-id', this.#getPermissionStateLabelId({ state: newState }));
label._permission.state = newState;
}
#onClickEvent(event) {
const id = event.target.id;
switch (id) {
case 'zen-site-data-manage-addons': {
const { BrowserAddonUI } = this.window;
BrowserAddonUI.openAddonsMgr('addons://list/extension');
break;
}
case 'zen-site-data-settings-more': {
const { BrowserCommands } = this.window;
BrowserCommands.pageInfo(null, 'permTab');
break;
}
default: {
const label = event.target.closest('.permission-popup-permission-label-container');
if (label?._permission) {
this.#onPermissionClick(label);
}
break;
}
}
}
handleEvent(event) {
const type = event.type;
switch (type) {
case 'click':
this.#onClickEvent(event);
break;
case 'command':
this.#onCommandEvent(event);
break;
case 'popupshowing':
this.#preparePanel();
break;
}
}
}

View File

@@ -15,7 +15,7 @@ const DYNAMIC_TYPE_NAME = 'zen-actions';
const MAX_RECENT_ACTIONS = 5;
const MINIMUM_QUERY_SCORE = 92;
const MINIMUM_PREFIXED_QUERY_SCORE = 50;
const MINIMUM_PREFIXED_QUERY_SCORE = 30;
ChromeUtils.defineESModuleGetters(lazy, {
UrlbarResult: 'resource:///modules/UrlbarResult.sys.mjs',
@@ -242,15 +242,15 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider {
}
const ownerGlobal = lazy.BrowserWindowTracker.getTopWindow();
const finalResults = [];
let finalResults = [];
for (const action of actionsResults) {
const [payload, payloadHighlights] = lazy.UrlbarResult.payloadAndSimpleHighlights([], {
suggestion: action.label,
title: action.label,
query: queryContext.searchString,
zenCommand: action.command,
dynamicType: DYNAMIC_TYPE_NAME,
zenAction: true,
query: isPrefixed ? action.label.trimStart() : queryContext.searchString,
icon: action.icon,
shortcutContent: ownerGlobal.gZenKeyboardShortcutsManager.getShortcutDisplayFromCommand(
action.command
@@ -265,7 +265,7 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider {
payload,
payloadHighlights
);
if (zenUrlbarResultsLearner.shouldPrioritize(action.commandId)) {
if (zenUrlbarResultsLearner.shouldPrioritize(action.commandId) && !isPrefixed) {
result.heuristic = true;
} else {
result.suggestedIndex = zenUrlbarResultsLearner.getDeprioritizeIndex(action.commandId);
@@ -278,8 +278,14 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider {
}
finalResults.push(result);
}
let i = 0;
zenUrlbarResultsLearner.sortCommandsByPriority(finalResults).forEach((result) => {
if (isPrefixed && i === 0 && query.length > 1) {
result.heuristic = true;
delete result.suggestedIndex;
}
addCallback(this, result);
i++;
});
}

View File

@@ -37,16 +37,16 @@ const globalActionsTemplate = [
command: (window) => window.openPreferences(),
icon: 'chrome://browser/skin/zen-icons/settings.svg',
},
{
label: 'Open New Window',
command: 'cmd_newNavigator',
icon: 'chrome://browser/skin/zen-icons/window.svg',
},
{
label: 'Open Private Window',
command: 'Tools:PrivateBrowsing',
icon: 'chrome://browser/skin/zen-icons/private-window.svg',
},
{
label: 'Open New Window',
command: 'cmd_newNavigator',
icon: 'chrome://browser/skin/zen-icons/window.svg',
},
{
label: 'Pin Tab',
command: 'cmd_zenTogglePinTab',

View File

@@ -7,7 +7,7 @@ import { XPCOMUtils } from 'resource://gre/modules/XPCOMUtils.sys.mjs';
const lazy = {};
const DEFAULT_DB_DATA = '{}';
const DEPRIORITIZE_MAX = -4;
const DEPRIORITIZE_MAX = -5;
const PRIORITIZE_MAX = 5;
function addDataToLazy(data) {

View File

@@ -3,6 +3,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
EXTRA_JS_MODULES += [
"ZenSiteDataPanel.sys.mjs",
"ZenUBActionsProvider.sys.mjs",
"ZenUBGlobalActions.sys.mjs",
"ZenUBProvider.sys.mjs",

View File

@@ -1,308 +0,0 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
{
class nsZenWorkspaceWindowSync extends nsZenMultiWindowFeature {
#ignoreNextEvents = false;
#waitForPromise = null;
constructor() {
super();
if (!window.closed) {
this.init();
}
}
async init() {
await gZenWorkspaces.promiseInitialized;
this.#makeSureAllTabsHaveIds();
this.#setUpEventListeners();
}
#makeSureAllTabsHaveIds() {
const allTabs = gZenWorkspaces.allStoredTabs;
for (const tab of allTabs) {
if (!tab.hasAttribute('zen-sync-id') && !tab.hasAttribute('zen-empty-tab')) {
const tabId = gZenUIManager.generateUuidv4();
tab.setAttribute('zen-sync-id', tabId);
}
}
}
#setUpEventListeners() {
const kEvents = [
'TabClose',
'TabOpen',
'TabMove',
'TabPinned',
'TabUnpinned',
'TabAddedToEssentials',
'TabRemovedFromEssentials',
'TabHide',
'TabShow',
'ZenTabIconChanged',
'ZenTabLabelChanged',
'TabGroupCreate',
'TabGroupRemoved',
'TabGrouped',
'TabUngrouped',
'TabGroupMoved',
];
const eventListener = this.#handleEvent.bind(this);
for (const event of kEvents) {
window.addEventListener(event, eventListener);
}
window.addEventListener('unload', () => {
for (const event of kEvents) {
window.removeEventListener(event, eventListener);
}
});
}
#handleEvent(event) {
this.#propagateToOtherWindows(event);
}
async #propagateToOtherWindows(event) {
if (this.#ignoreNextEvents) {
return;
}
if (this.#waitForPromise) {
await this.#waitForPromise;
}
this.#waitForPromise = new Promise((resolve) => {
this.foreachWindowAsActive(async (browser) => {
if (browser.gZenWorkspaceWindowSync && !this.windowIsActive(browser)) {
await browser.gZenWorkspaceWindowSync.onExternalTabEvent(event);
}
}).then(() => {
resolve();
});
});
}
async onExternalTabEvent(event) {
this.#ignoreNextEvents = true;
switch (event.type) {
case 'TabClose':
this.#onTabClose(event);
break;
case 'TabOpen':
await this.#onTabOpen(event);
break;
case 'TabPinned':
this.#onTabPinned(event);
break;
case 'TabUnpinned':
this.#onTabUnpinned(event);
break;
case 'TabAddedToEssentials':
this.#onTabAddedToEssentials(event);
break;
case 'TabRemovedFromEssentials':
this.#onTabRemovedFromEssentials(event);
break;
case 'TabHide':
this.#onTabHide(event);
break;
case 'TabShow':
this.#onTabShow(event);
break;
case 'TabMove':
case 'TabGroupMoved':
this.#onTabMove(event);
break;
case 'ZenTabIconChanged':
this.#onTabIconChanged(event);
break;
case 'ZenTabLabelChanged':
this.#onTabLabelChanged(event);
break;
case 'TabGroupCreate':
this.#onTabGroupCreate(event);
break;
case 'TabGroupRemoved':
case 'TabGrouped':
case 'TabUngrouped':
// Tab grouping changes are automatically synced by Firefox
break;
default:
console.warn(`Unhandled event type: ${event.type}`);
break;
}
this.#ignoreNextEvents = false;
}
#getTabId(tab) {
return tab.getAttribute('zen-sync-id');
}
#getTabWithId(tabId) {
for (const tab of gZenWorkspaces.allStoredTabs) {
if (this.#getTabId(tab) === tabId) {
return tab;
}
}
return null;
}
#onTabClose(event) {
const targetTab = event.target;
const tabId = this.#getTabId(targetTab);
const tabToClose = this.#getTabWithId(tabId);
if (tabToClose) {
gBrowser.removeTab(tabToClose);
}
}
#onTabPinned(event) {
const targetTab = event.target;
if (targetTab.hasAttribute('zen-essential')) {
return this.#onTabAddedToEssentials(event);
}
const tabId = this.#getTabId(targetTab);
const elementIndex = targetTab.elementIndex;
const tabToPin = this.#getTabWithId(tabId);
if (tabToPin) {
gBrowser.pinTab(tabToPin);
gBrowser.moveTabTo(tabToPin, { elementIndex, forceUngrouped: !!targetTab.group });
}
}
#onTabUnpinned(event) {
const targetTab = event.target;
const tabId = this.#getTabId(targetTab);
const tabToUnpin = this.#getTabWithId(tabId);
if (tabToUnpin) {
gBrowser.unpinTab(tabToUnpin);
}
}
#onTabIconChanged(event) {
this.#updateTabIconAndLabel(event);
}
#onTabLabelChanged(event) {
this.#updateTabIconAndLabel(event);
}
#updateTabIconAndLabel(event) {
const targetTab = event.target;
const tabId = this.#getTabId(targetTab);
const tabToChange = this.#getTabWithId(tabId);
if (tabToChange && tabToChange.hasAttribute('pending')) {
gBrowser.setIcon(tabToChange, gBrowser.getIcon(targetTab));
gBrowser._setTabLabel(tabToChange, targetTab.label);
}
}
#onTabAddedToEssentials(event) {
const targetTab = event.target;
const tabId = this.#getTabId(targetTab);
const tabToAdd = this.#getTabWithId(tabId);
if (tabToAdd) {
gZenPinnedTabManager.addToEssentials(tabToAdd);
}
}
#onTabRemovedFromEssentials(event) {
const targetTab = event.target;
const tabId = this.#getTabId(targetTab);
const tabToRemove = this.#getTabWithId(tabId);
if (tabToRemove) {
gZenPinnedTabManager.removeFromEssentials(tabToRemove);
}
}
#onTabHide(event) {
const targetTab = event.target;
const tabId = this.#getTabId(targetTab);
const tabToHide = this.#getTabWithId(tabId);
if (tabToHide) {
gBrowser.hideTab(tabToHide);
}
}
#onTabShow(event) {
const targetTab = event.target;
const tabId = this.#getTabId(targetTab);
const tabToShow = this.#getTabWithId(tabId);
if (tabToShow) {
gBrowser.showTab(tabToShow);
}
}
#onTabMove(event) {
const targetTab = event.target;
const tabId = this.#getTabId(targetTab);
const tabToMove = this.#getTabWithId(tabId);
const workspaceId = targetTab.getAttribute('zen-workspace-id');
const isEssential = targetTab.hasAttribute('zen-essential');
if (tabToMove) {
let tabSibling = targetTab.previousElementSibling;
let isFirst = false;
if (!tabSibling?.hasAttribute('zen-sync-id')) {
isFirst = true;
}
gBrowser.zenHandleTabMove(tabToMove, () => {
if (isFirst) {
let container;
if (isEssential) {
container = gZenWorkspaces.getEssentialsSection(tabToMove);
} else {
const workspaceElement = gZenWorkspaces.workspaceElement(workspaceId);
container = tabToMove.pinned
? workspaceElement.pinnedTabsContainer
: workspaceElement.tabsContainer;
}
container.insertBefore(tabToMove, container.firstChild);
} else {
let relativeTab = gZenWorkspaces.allStoredTabs.find((tab) => {
return this.#getTabId(tab) === this.#getTabId(tabSibling);
});
if (relativeTab) {
relativeTab.after(tabToMove);
}
}
});
}
}
async #onTabOpen(event) {
const targetTab = event.target;
const isPinned = targetTab.pinned;
const isEssential = isPinned && targetTab.hasAttribute('zen-essential');
if (!this.#getTabId(targetTab) && !targetTab.hasAttribute('zen-empty-tab')) {
const tabId = gZenUIManager.generateUuidv4();
targetTab.setAttribute('zen-sync-id', tabId);
}
const duplicatedTab = gBrowser.addTrustedTab(targetTab.linkedBrowser.currentURI.spec, {
createLazyBrowser: true,
essential: isEssential,
pinned: isPinned,
});
if (!isEssential) {
gZenWorkspaces.moveTabToWorkspace(
duplicatedTab,
targetTab.getAttribute('zen-workspace-id')
);
}
duplicatedTab.setAttribute('zen-pin-id', targetTab.getAttribute('zen-pin-id'));
duplicatedTab.setAttribute('zen-sync-id', targetTab.getAttribute('zen-sync-id'));
}
#onTabGroupCreate(event) {
const targetGroup = event.target;
const isSplitView = targetGroup.classList.contains('zen-split-view');
const isFolder = targetGroup.isZenFolder;
}
}
window.gZenWorkspaceWindowSync = new nsZenWorkspaceWindowSync();
}

View File

@@ -3002,6 +3002,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature {
onWindowResize(event = undefined) {
if (!(!event || event.target === window)) return;
gZenUIManager.updateTabsToolbar();
// Check if workspace icons overflow the parent container
const parent = this.workspaceIcons;
if (!parent || this._processingResize) {

View File

@@ -47,7 +47,7 @@
line-height: 0;
&:is(img) {
padding: 6px;
width: 14px;
}
&[no-icon='true'] {
@@ -237,7 +237,10 @@
--toolbarbutton-inner-padding: 6px;
& image {
border-radius: calc(var(--border-radius-medium) - 4px);
border-radius: calc(var(--border-radius-medium) - 4px) !important;
width: 26px;
height: 26px;
margin-right: -1px;
}
:root[zen-renaming-tab='true'] & {

View File

@@ -7,6 +7,8 @@ export default [
'nsZenDOMOperatedFeature',
'nsZenPreloadedFeature',
'nsZenSiteDataPanel',
'ZenThemeModifier',
'ZenHasPolyfill',

View File

@@ -5,8 +5,8 @@
"binaryName": "zen",
"version": {
"product": "firefox",
"version": "143.0.1",
"candidate": "143.0.1"
"version": "143.0.3",
"candidate": "143.0.3"
},
"buildOptions": {
"generateBranding": true
@@ -19,7 +19,7 @@
"brandShortName": "Zen",
"brandFullName": "Zen Browser",
"release": {
"displayVersion": "1.16.2b",
"displayVersion": "1.16.3b",
"github": {
"repo": "zen-browser/desktop"
},