Compare commits

...

27 Commits
1.17.4b ... dev

Author SHA1 Message Date
mr. m
57e63a4456 chore: New Crowdin updates, p=#11127
* New translations zen-preferences.ftl (Polish)

* New translations zen-preferences.ftl (Portuguese)

* New translations zen-workspaces.ftl (Polish)

* New translations zen-workspaces.ftl (Portuguese)

* New translations zen-workspaces.ftl (Dutch)

* New translations zen-general.ftl (Dutch)

* New translations zen-vertical-tabs.ftl (Dutch)

* New translations zen-preferences.ftl (German)

* New translations zen-preferences.ftl (Dutch)

* New translations zen-workspaces.ftl (German)

* New translations zen-workspaces.ftl (Dutch)

* New translations zen-general.ftl (German)

* New translations zen-general.ftl (Dutch)

* New translations zen-split-view.ftl (Dutch)

* New translations zen-welcome.ftl (Dutch)

* New translations zen-folders.ftl (Dutch)

* New translations zen-preferences.ftl (Vietnamese)

* New translations zen-workspaces.ftl (Vietnamese)

* New translations zen-general.ftl (Vietnamese)

* New translations zen-vertical-tabs.ftl (Vietnamese)

* New translations zen-welcome.ftl (Vietnamese)

* New translations zen-folders.ftl (Vietnamese)

* New translations zen-preferences.ftl (Portuguese, Brazilian)

* New translations zen-workspaces.ftl (Portuguese, Brazilian)

* New translations zen-general.ftl (Portuguese, Brazilian)
2025-11-10 01:48:47 +01:00
mr. m
bc09603add Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-11-10 00:08:12 +01:00
mr. m
5ecfc745da fix: Fixed border radius regresion with ff 145.0, b=no-bug, c=tabs 2025-11-10 00:08:02 +01:00
Kyle Kincer
421adade52 feat: Close tab and switch to recent tab when going back with no history, p=#11190
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2025-11-09 18:32:13 +01:00
Mr. M
c382001253 fix: Fixed pins not saving proprely, b=closes #11217, c=tabs 2025-11-09 11:49:10 +01:00
Anodev-sudo
8b5325ba1c fix: Update incorrect element picker tooltip description, b=closes #8998, p=#11213 2025-11-09 11:26:03 +01:00
Ryosuke
eeb8a78741 feat: Add three command bar actions for switching the Light/Dark Mode, p=#11122 2025-11-08 16:39:17 +01:00
Mr. M
c5bc5c7f09 fix: Fixed tab border radius. Regression from ff 145.0, b=no-bug, c=tabs 2025-11-08 13:30:23 +01:00
Mr. M
879865e625 fix: Add a margin to the urlbar only when closed, b=no-bug, c=common 2025-11-08 12:36:48 +01:00
Mr. M
2ec4510850 feat: Show the correct possition for new panels, b=no-bug, c=common 2025-11-08 12:31:30 +01:00
mr. m
96c6ec658c chore: Update to Firefox 145.0, p=#11167 2025-11-08 11:40:06 +01:00
mr. m
a0f282a759 feat: Increase the duration for glance close animation, p=#11184, c=glance 2025-11-07 10:35:15 +01:00
mr. m
1cf50e863d chore: Increase the speed for glance background animation, b=no-bug, c=glance 2025-11-06 23:07:06 +01:00
mr. m
11e3397421 fix: Fixed addons menu being off-screen, b=closes #11177, c=common 2025-11-06 23:02:07 +01:00
Ivaon
5ca4553e70 fix: targeting new container tab context menu with a higher specificity and removing opacity rule, p=#11166 2025-11-05 23:36:48 +01:00
Ivaon
3a9e205730 fix: New container tab popup menu displayed incorrectly (#11160) 2025-11-05 12:59:52 +01:00
mr. m
37eb6f85eb chore: Fixed using the wrong location for wine, b=no-bug, c=configs 2025-11-05 00:08:18 +01:00
mr. m
87e249f2a4 feat: Disable omnibox PiP button by default, b=no-bug, c=no-component 2025-11-04 23:38:35 +01:00
mr. m
40af25998f chore: Handle use implicit event function calls for glance, b=no-bug, c=common, glance 2025-11-04 21:35:02 +01:00
mr. m
0d80532bf1 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-11-03 22:50:46 +01:00
mr. m
424de1bf91 fix: Fixed glance close animation replay, b=closes #11130, c=glance 2025-11-03 22:49:46 +01:00
mr. m
42752f8145 fix: Fixed pip button not appearing on the media manager, b=closes https://github.com/zen-browser/desktop/issues/11132, c=urlbar 2025-11-03 22:49:14 +01:00
Mr. M
82a7061849 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-11-02 01:37:59 +01:00
Mr. M
be561ec8dc chore: Several QA fixes and options added, b=closes #11105, closes https://github.com/zen-browser/desktop/issues/11020, closes https://github.com/zen-browser/desktop/issues/11105, https://github.com/zen-browser/desktop/issues/10752, c=common, compact-mode, workspaces 2025-11-02 01:35:54 +01:00
mr. m
8097b402aa chore: New Crowdin updates, p=#11102 2025-11-02 00:36:23 +01:00
mr-cheffy
b0f165a744 docs: Update monthly issue metrics, b=(no bug), c={docs} 2025-11-01 02:40:40 +00:00
Mr. M
d005b97042 chore: Refactor JS actors into their own modules, b=no-bug, c=common, glance, mods 2025-10-31 10:24:12 +01:00
176 changed files with 2502 additions and 1965 deletions

View File

@@ -35,7 +35,7 @@ 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 `144.0.2`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 144.0.2`!
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 145.0`!
### Contributing

View File

@@ -1 +1 @@
860c37a26622f61c74c7cbb93f7e0ae759fcbfe1
7bc0bd3b3f84dddd16bc84ddb01bc55782177f5e

View File

@@ -6,7 +6,7 @@ if test "$ZEN_CROSS_COMPILING"; then
export WINSYSROOT="$(echo ~)/win-cross/vs2022"
export WINE="$(echo ~)/win-cross/wine/bin/wine64"
export WINE="$(echo ~)/win-cross/wine/bin/wine"
export WINEDEBUG=-all
export MOZ_STUB_INSTALLER=1

View File

@@ -0,0 +1,276 @@
# Issue Metrics
| Metric | Average | Median | 90th percentile |
| --- | --- | --- | ---: |
| Time to first response | 15:19:48 | 2:42:07 | 1 day, 0:05:54 |
| Time to close | 22:10:13 | 4:42:08 | 2 days, 0:56:21 |
| Metric | Count |
| --- | ---: |
| Number of items that remain open | 108 |
| Number of items closed | 150 |
| Total number of items created | 258 |
| Title | URL | Time to first response | Time to close |
| --- | --- | --- | --- |
| The right click menu goes beyond the app border sometimes on arch hyprland | https://github.com/zen-browser/desktop/issues/11103 | None | None |
| Zen glance doesn't respect --margin-top-fix | https://github.com/zen-browser/desktop/issues/11098 | None | None |
| Security info button missing in url bar | https://github.com/zen-browser/desktop/issues/11093 | None | None |
| OS dark mode not detected by browser | https://github.com/zen-browser/desktop/issues/11092 | None | None |
| Zen menu is somehow showing on the "wrong" side of the app | https://github.com/zen-browser/desktop/issues/11091 | None | None |
| Volume is very low in YouTube videos. | https://github.com/zen-browser/desktop/issues/11089 | None | None |
| Opening Sidebar by Dragging URL in Compact Mode May Prevent Sidebar from Hiding | https://github.com/zen-browser/desktop/issues/11088 | None | None |
| Collapsed sidebar tab icons are misaligned when tabs are overflown | https://github.com/zen-browser/desktop/issues/11087 | 2:13:10 | None |
| Screensharing Teams over Zen instantly caused the system to hard crash | https://github.com/zen-browser/desktop/issues/11086 | None | None |
| Can't use KeePassXC-Browser in Zen (Flatpak) with KeePassXC (not FlatPak) | https://github.com/zen-browser/desktop/issues/11084 | None | None |
| PiP video reproduction makes the tab crash after a while | https://github.com/zen-browser/desktop/issues/11083 | None | None |
| Elements above the essentials tabs are in the toolbar instead of the sidebar in compact mode | https://github.com/zen-browser/desktop/issues/11082 | 1:11:28 | None |
| Select Tag missing background makes content not visible | https://github.com/zen-browser/desktop/issues/11081 | 15:01:49 | 19:55:32 |
| Hovering bookmarks toolbar causes vertical wiggle of website | https://github.com/zen-browser/desktop/issues/11080 | 0:32:11 | None |
| Custom Wallpaper on new tab does not loads in any Container | https://github.com/zen-browser/desktop/issues/11079 | 4:25:50 | 4:25:50 |
| Unable to activate the option to clear the history without the Zen interface being down. | https://github.com/zen-browser/desktop/issues/11078 | None | None |
| Zen sometimes hangs when a context menu or overlay is triggered | https://github.com/zen-browser/desktop/issues/11077 | None | None |
| Theme Editor fails to render the colour picker | https://github.com/zen-browser/desktop/issues/11076 | 1:55:40 | 19:38:53 |
| Tabs lost when closing main window before Library window | https://github.com/zen-browser/desktop/issues/11073 | None | None |
| The topbar doesn't hide in compact when the browser is closed and opening a link from outside | https://github.com/zen-browser/desktop/issues/11070 | None | None |
| Essentials tabs are no longer colored to icon accent (zen.theme.essentials-favicon-bg) | https://github.com/zen-browser/desktop/issues/11069 | None | None |
| Browser Gets Stuck in workspace. and upon restart deletes all current tabs & history. | https://github.com/zen-browser/desktop/issues/11068 | None | None |
| Unloaded tabs logos aren't dimmed | https://github.com/zen-browser/desktop/issues/11065 | None | None |
| url bar disappearing and stuttering after last update | https://github.com/zen-browser/desktop/issues/11063 | 1:01:34 | 5:21:04 |
| Unable to install any mods from the store / mods do not work anymore | https://github.com/zen-browser/desktop/issues/11062 | None | None |
| Page missing space without compact mode | https://github.com/zen-browser/desktop/issues/11060 | None | None |
| Unable to drop new tabs when using auto-hide menu | https://github.com/zen-browser/desktop/issues/11059 | None | 0:23:34 |
| Window top bar overlaps contents when expanded on hover | https://github.com/zen-browser/desktop/issues/11056 | 2:37:18 | 4:47:35 |
| SAVED WEBSITES NOT SHOWING FAVICONS ON STARTUP | https://github.com/zen-browser/desktop/issues/11050 | 5:08:35 | 6:19:52 |
| On single toolbar mode shortcut "toggle sidebar's width" doesnt change zen.view.use-single-toolbar, causing you to never be able to not hide sidebar in compact mode | https://github.com/zen-browser/desktop/issues/11049 | None | 2:09:48 |
| After every Zen Browser update, the browser automatically redirects all HTTP requests to HTTPS | https://github.com/zen-browser/desktop/issues/11048 | 1 day, 3:16:04 | None |
| Sidebar keeps moving when dragging a link to the sidebar in compact mode | https://github.com/zen-browser/desktop/issues/11045 | 1:26:22 | 1:26:22 |
| Browser auto force quits when sharing screen on Google meet | https://github.com/zen-browser/desktop/issues/11044 | 1 day, 0:37:45 | None |
| bookmark icon missing from address bar. Extenision cannot be pinned to toolbar | https://github.com/zen-browser/desktop/issues/11043 | 0:08:08 | 18:47:26 |
| Folder bug because of browser.tabs.groups.enabled was set to true when the first update about folders came out. | https://github.com/zen-browser/desktop/issues/11042 | 6:09:21 | 6:09:21 |
| Very confusing behaviour: Zen changes some keyboards keys | https://github.com/zen-browser/desktop/issues/11039 | None | None |
| Floating URL bar is off-center in Compact Mode | https://github.com/zen-browser/desktop/issues/11036 | 5:43:02 | 9:06:12 |
| severe lag when Compact Tabs mode is enabled | https://github.com/zen-browser/desktop/issues/11035 | None | None |
| Pinned/Essentials tabs are not individual for each window on restart | https://github.com/zen-browser/desktop/issues/11034 | 20:23:59 | None |
| Issue with toolbar after the update | https://github.com/zen-browser/desktop/issues/11033 | 0:30:05 | 0:30:05 |
| Url bar sometimes overlaps page | https://github.com/zen-browser/desktop/issues/11032 | 0:40:02 | None |
| Sluggish Scrolling With Winodws 11 Dynamic Refresh Rate | https://github.com/zen-browser/desktop/issues/11030 | 0:36:58 | 2:14:02 |
| [Bug] Picture-in-Picture (PiP) icon disappears from the URL bar | https://github.com/zen-browser/desktop/issues/11029 | 2:02:15 | 2 days, 1:05:37 |
| Splitter barely visible when Split View + Compact Mode are active | https://github.com/zen-browser/desktop/issues/11027 | 0:11:40 | None |
| The new unified panel has significantly affected the dragging link behavior (For example, drag and drop to save bookmarks. | https://github.com/zen-browser/desktop/issues/11026 | None | None |
| Nextcloud passwords plugin fails to keep connection to nextcloud | https://github.com/zen-browser/desktop/issues/11025 | None | None |
| Extension symbol in toolbar | https://github.com/zen-browser/desktop/issues/11024 | 1:04:53 | None |
| bookmark is bugged | https://github.com/zen-browser/desktop/issues/11023 | None | 2:09:24 |
| Essential tab background color not adapting to icon color | https://github.com/zen-browser/desktop/issues/11022 | None | None |
| Extensions button is missing if Removed from toolbar | https://github.com/zen-browser/desktop/issues/11021 | 0:12:48 | 0:12:48 |
| Zen icon not appearing in sidebar in "only sidebar" mode in macOS | https://github.com/zen-browser/desktop/issues/11020 | 1:19:03 | None |
| White background websites render as transparent | https://github.com/zen-browser/desktop/issues/11019 | 2:00:20 | 5 days, 10:00:50 |
| Extensions menu (and its "jigsaw" button) need to be an option | https://github.com/zen-browser/desktop/issues/11013 | 1:10:36 | 1:10:36 |
| sign in with google failing | https://github.com/zen-browser/desktop/issues/11010 | 0:15:42 | None |
| Stuttering when playing 4K videos on Bilibili | https://github.com/zen-browser/desktop/issues/11007 | 0:27:17 | 1 day, 17:54:57 |
| Cannot access extension icons on sites that have DRM content in version 1.17.2b | https://github.com/zen-browser/desktop/issues/11004 | 1:05:25 | None |
| URL bar in a wrong place | https://github.com/zen-browser/desktop/issues/11002 | 1:34:49 | 1:34:49 |
| Zen slow on Linux after v1.17b | https://github.com/zen-browser/desktop/issues/11001 | None | 20:41:15 |
| Extension flagged by Mozilla as risky display broken | https://github.com/zen-browser/desktop/issues/11000 | 1:46:25 | 1:46:25 |
| Title bar of zen browser | https://github.com/zen-browser/desktop/issues/10998 | 0:46:49 | 0:47:07 |
| Glance buttons not appearing on the left side | https://github.com/zen-browser/desktop/issues/10997 | 1:06:43 | 1:06:43 |
| Compact Mode Sidebar Obfuscats Favorites (Top) in New Window | https://github.com/zen-browser/desktop/issues/10994 | None | 0:10:54 |
| Video issues (constant stuttering) On Flatpack version of Zen browser | https://github.com/zen-browser/desktop/issues/10993 | 0:10:08 | 2 days, 8:24:55 |
| Update to 1.17.2b wiped the session data | https://github.com/zen-browser/desktop/issues/10992 | 2:11:53 | None |
| Zen freezes when an image is copied on Linux | https://github.com/zen-browser/desktop/issues/10991 | 4:55:17 | None |
| Toolbar items becomes overflow menu | https://github.com/zen-browser/desktop/issues/10990 | 6:38:06 | 8:17:57 |
| Compact mode double toolbar slide over webview not appearing correctly | https://github.com/zen-browser/desktop/issues/10987 | 0:23:29 | 10:55:15 |
| Middle clicking on a pinned tab no longer removes it | https://github.com/zen-browser/desktop/issues/10984 | 2:11:56 | 2:11:56 |
| Page Reload icon | https://github.com/zen-browser/desktop/issues/10983 | 2:35:26 | 2:35:26 |
| v1.17 broke CamelCamelCamel extension | https://github.com/zen-browser/desktop/issues/10982 | 2:42:07 | 2:42:07 |
| Closing last tab individually prevents restoring window/session | https://github.com/zen-browser/desktop/issues/10981 | None | None |
| Cannot drag image to the left panel when in compact mode | https://github.com/zen-browser/desktop/issues/10979 | 0:30:59 | 6:10:19 |
| Suddenly my tabs deleted | https://github.com/zen-browser/desktop/issues/10978 | None | None |
| Release Notes tab always opens at the top of the tabs' list | https://github.com/zen-browser/desktop/issues/10976 | 0:01:36 | None |
| I cannot use the "hide toolbar" option on compact mode | https://github.com/zen-browser/desktop/issues/10975 | None | 0:12:57 |
| Mouse events not firing correctly for items under control buttons when the bar is hidden | https://github.com/zen-browser/desktop/issues/10973 | 0:36:05 | 1 day, 9:12:42 |
| Container tab name removed from URL bar | https://github.com/zen-browser/desktop/issues/10972 | 0:16:56 | 1:13:15 |
| Extensions (Puzzle Piece) Icon Missing After Update | https://github.com/zen-browser/desktop/issues/10971 | 0:12:24 | 0:28:02 |
| Top toolbar in multi-toolbar mode is shown when it shouldnt | https://github.com/zen-browser/desktop/issues/10970 | None | 2:08:34 |
| Middle clicking on pending tab no longer closes it | https://github.com/zen-browser/desktop/issues/10969 | None | 0:01:44 |
| Reload button is hidden under menu when it is the only item in the menu | https://github.com/zen-browser/desktop/issues/10968 | None | 0:44:47 |
| Compact Mode sidebar is on the bottom of the screen rather than being in the middle. | https://github.com/zen-browser/desktop/issues/10965 | None | 0:08:13 |
| Youtube video player cropped in fullscreen | https://github.com/zen-browser/desktop/issues/10964 | None | 0:02:31 |
| New Site Control Center renders add-on warnings vertically on top of the rest of the UI | https://github.com/zen-browser/desktop/issues/10963 | None | 0:02:07 |
| Media keys (Previous, Pause, Next) don't work | https://github.com/zen-browser/desktop/issues/10962 | 0:01:20 | 6:30:56 |
| [UI] Container IDs removed from URL bar | https://github.com/zen-browser/desktop/issues/10961 | 0:09:33 | 0:12:33 |
| History | https://github.com/zen-browser/desktop/issues/10960 | 0:22:22 | 0:58:14 |
| The toolbar remains visible after following specific steps in compact mode | https://github.com/zen-browser/desktop/issues/10959 | 2:31:24 | None |
| New extensions' interface in address bar still broken for some extensions | https://github.com/zen-browser/desktop/issues/10958 | None | 8:26:44 |
| Copy current URL pop up doesn't disappear | https://github.com/zen-browser/desktop/issues/10956 | 8:56:54 | 10:51:44 |
| The icon for "Enable compact mode" is a duplicate in the sidebar. | https://github.com/zen-browser/desktop/issues/10955 | 10:48:59 | None |
| Wrong style on 4 buttons | https://github.com/zen-browser/desktop/issues/10954 | 0:27:06 | 0:27:06 |
| Poor formatting in extensions control panel | https://github.com/zen-browser/desktop/issues/10953 | 0:32:14 | 0:32:14 |
| New top border line at top of browser application window | https://github.com/zen-browser/desktop/issues/10952 | None | 0:58:56 |
| "Hide Top bar" compact mode is greyed out / impossible to select | https://github.com/zen-browser/desktop/issues/10951 | 0:07:47 | 14:26:57 |
| Cannot hide "forward" button from toolbar | https://github.com/zen-browser/desktop/issues/10949 | 0:28:05 | 0:28:05 |
| Top toolbar now covers up top of webpages | https://github.com/zen-browser/desktop/issues/10948 | 0:34:17 | 14:55:39 |
| Missing the Extensions "Jigsaw" icon next to the URL bar. | https://github.com/zen-browser/desktop/issues/10947 | 0:45:52 | 4:36:42 |
| Can't place Home button to left upper corner | https://github.com/zen-browser/desktop/issues/10946 | None | None |
| All tabs close and disappear when you open a private window | https://github.com/zen-browser/desktop/issues/10945 | None | 1:03:19 |
| Youtube Controls Only Partially Visible in Fullscreen Mode | https://github.com/zen-browser/desktop/issues/10944 | 1:21:37 | 1:21:37 |
| Sidebar Flickers/Flaps Rapidly When Dragging Text/URL to Window Edge in Compact Mode | https://github.com/zen-browser/desktop/issues/10942 | 2:43:13 | 6 days, 19:36:33 |
| Dragging tab out of window opens a new blank window instead of a new tabbed window | https://github.com/zen-browser/desktop/issues/10941 | 0:15:32 | 0:15:32 |
| Compact Mode "Hide toolbar" only works with tabs on right | https://github.com/zen-browser/desktop/issues/10940 | 0:25:59 | 0:25:58 |
| Floating URL bar not appearing on focus in compact mode | https://github.com/zen-browser/desktop/issues/10938 | 1:53:52 | None |
| Extension area layout breaks after switching between toolbar layouts | https://github.com/zen-browser/desktop/issues/10936 | 3:14:21 | 10:14:36 |
| No option to revert "new" extensions + site settings menu | https://github.com/zen-browser/desktop/issues/10935 | 3:14:19 | 3:14:19 |
| Search bar bug while compact mode on macos | https://github.com/zen-browser/desktop/issues/10934 | 1:01:13 | 1:17:41 |
| Tooltips missing for unified panel quick actions | https://github.com/zen-browser/desktop/issues/10933 | None | 4:13:23 |
| In collapsed sidebar mode you are no longer able to hide toolbar | https://github.com/zen-browser/desktop/issues/10932 | 1:51:58 | 3:53:59 |
| playerctl metadata shows firefox instead of zen browser | https://github.com/zen-browser/desktop/issues/10931 | 8:32:21 | None |
| Zen doesn't retrieve correct accent color from OS | https://github.com/zen-browser/desktop/issues/10930 | 4:19:46 | None |
| Compact Mode Issue on Windows | https://github.com/zen-browser/desktop/issues/10929 | 3:39:31 | 4:10:59 |
| Layout inconsistency between Look and Feel preview and the actual collapsed toolbar | https://github.com/zen-browser/desktop/issues/10928 | 0:30:59 | 5:17:10 |
| about:logo has wrong logo | https://github.com/zen-browser/desktop/issues/10926 | None | None |
| pinned split view tabs don't have "X" near them on hover | https://github.com/zen-browser/desktop/issues/10924 | None | 5:40:27 |
| New extention tab doesnt render right if one of the extentions violate mozilla policy | https://github.com/zen-browser/desktop/issues/10922 | None | 5:16:46 |
| Line above URL bar but not sidebar | https://github.com/zen-browser/desktop/issues/10921 | 5:57:13 | 5:57:13 |
| New menu for extensions, etc. overflows the window. | https://github.com/zen-browser/desktop/issues/10918 | 0:37:05 | 0:53:30 |
| [UI Bug?] Horizontal scrollbar appears in "Looks and Feel" settings on smaller window widths (e.g. 1280px) | https://github.com/zen-browser/desktop/issues/10915 | 3:43:21 | 1 day, 13:46:48 |
| 'New tab' button no longer at the top of unpinned tabs | https://github.com/zen-browser/desktop/issues/10914 | 3:19:00 | 11:13:57 |
| Top toolbar adopts Transparent Zen mod format in Compact Mode Double Toolbar | https://github.com/zen-browser/desktop/issues/10913 | 3:34:48 | 3:34:48 |
| Compact Mode formatting bugs when switching between Toolbar settings | https://github.com/zen-browser/desktop/issues/10912 | 3:58:57 | None |
| Compact Mode Collapsed Sidebar on hover endlessly expands | https://github.com/zen-browser/desktop/issues/10911 | None | 4:09:14 |
| Compact Mode Sidebar Only won't hide. | https://github.com/zen-browser/desktop/issues/10910 | 3:45:10 | None |
| Compact Mode Double Toolbar, Top Toolbar doesn't hide. | https://github.com/zen-browser/desktop/issues/10909 | None | 0:29:10 |
| Compact mode hide toolbar option Broken if 'Tabs on Right' | https://github.com/zen-browser/desktop/issues/10908 | 5:35:04 | 5:35:04 |
| New extensions' interface in address bar broken for some extensions | https://github.com/zen-browser/desktop/issues/10907 | 0:12:05 | 3 days, 15:02:25 |
| Missing tabs when closing and reopening Zen browser with multiple windows | https://github.com/zen-browser/desktop/issues/10906 | 0:09:30 | 0:09:30 |
| missing theme/accent settings (linux, flathub) (?) | https://github.com/zen-browser/desktop/issues/10905 | 1:06:10 | 1:06:10 |
| Battery consumption | https://github.com/zen-browser/desktop/issues/10903 | 0:29:10 | 0:29:10 |
| browser-init-js.patch error while building from zero on arch linux | https://github.com/zen-browser/desktop/issues/10902 | 3:53:18 | None |
| Addon popup window broken when no tabs opened | https://github.com/zen-browser/desktop/issues/10900 | None | 1:43:44 |
| Udemy Crash | https://github.com/zen-browser/desktop/issues/10898 | None | 0:04:29 |
| Text in sidebar becomes unreadable after switching system theme | https://github.com/zen-browser/desktop/issues/10893 | 12:10:14 | 12:11:00 |
| Extensions popup failing to render when zen is recently launched | https://github.com/zen-browser/desktop/issues/10892 | 0:06:10 | 0:33:28 |
| New tab URL popup doesnt appear when opening a new tab using Ctrl+T while watching videos in fullscreen | https://github.com/zen-browser/desktop/issues/10891 | 9:44:27 | 15:42:30 |
| Zen Browsers RAM usage on Arch Linux suddenly completely blew up after waking up from sleep (64GB of RAM + 32GB of Zram) | https://github.com/zen-browser/desktop/issues/10889 | 11:05:26 | 4 days, 0:26:42 |
| Holy GPU Usage (I have a 6750xt for reference {12GB VRAM} ) | https://github.com/zen-browser/desktop/issues/10888 | 13:36:41 | 5 days, 21:19:18 |
| Dragging tabs across multi-screens | https://github.com/zen-browser/desktop/issues/10875 | None | None |
| Sidbery Conflict in Zen Browser only | https://github.com/zen-browser/desktop/issues/10871 | None | 2 days, 5:59:58 |
| Bookmarks Bar Folders is incorrectly redundantly displayed | https://github.com/zen-browser/desktop/issues/10866 | 2 days, 17:12:01 | None |
| Source tarball should include zen locales | https://github.com/zen-browser/desktop/issues/10865 | None | 15:18:10 |
| Simplify extension login breaking | https://github.com/zen-browser/desktop/issues/10864 | 0:12:31 | 1:06:05 |
| Open site in container sites cannot be added to essentials | https://github.com/zen-browser/desktop/issues/10862 | 1:07:05 | None |
| 1password addon integration fails to show unlock window | https://github.com/zen-browser/desktop/issues/10859 | 0:39:20 | None |
| duplicated letters or conflict with Vietnamese keyboards | https://github.com/zen-browser/desktop/issues/10858 | 1:29:34 | 1:35:14 |
| Creating a space with multiple windows open freezes other windows | https://github.com/zen-browser/desktop/issues/10857 | 8:08:55 | None |
| Mozilla services miscredited in user menu | https://github.com/zen-browser/desktop/issues/10854 | None | 4 days, 2:52:29 |
| Website's icons not showing if not loaded | https://github.com/zen-browser/desktop/issues/10853 | 0:06:20 | 0:06:20 |
| Bookmarks Toolbar is completely blank (flatpak install) | https://github.com/zen-browser/desktop/issues/10852 | 0:58:24 | 2:24:04 |
| Closing a tab switches to a particular previously visited tab instead of the immediately previous | https://github.com/zen-browser/desktop/issues/10848 | None | None |
| A resize cursor appears. | https://github.com/zen-browser/desktop/issues/10846 | 10:28:06 | None |
| Bookmarks Toolbar can not "only show on new tab" | https://github.com/zen-browser/desktop/issues/10845 | 9:18:48 | None |
| Sound not working on browser | https://github.com/zen-browser/desktop/issues/10844 | 9:25:58 | None |
| Theme issue on the UI | https://github.com/zen-browser/desktop/issues/10835 | None | None |
| Zombie processes | https://github.com/zen-browser/desktop/issues/10834 | 0:22:17 | None |
| The URL bar flashes too often | https://github.com/zen-browser/desktop/issues/10832 | None | 0:04:01 |
| Fixed or anchored website in browser can't be removed | https://github.com/zen-browser/desktop/issues/10828 | 0:15:40 | 6:35:29 |
| The media controls at the bottom overlap important elements. | https://github.com/zen-browser/desktop/issues/10824 | 9:33:17 | 17:48:58 |
| [Twilight] Compact mode button causing top toolbar to not hide/to not appear when hovering | https://github.com/zen-browser/desktop/issues/10821 | None | 17:59:30 |
| the top bar is not functional as expexted. | https://github.com/zen-browser/desktop/issues/10820 | 0:22:50 | 14:40:32 |
| Browser Screen Goes Blank (Them color ) Randomly No UI Visible, Audio Still play . | https://github.com/zen-browser/desktop/issues/10817 | None | None |
| Sidebar Gets Stuck After Interacting With an Exntension in Compact Mode | https://github.com/zen-browser/desktop/issues/10812 | 2:15:35 | 10:54:25 |
| website setting lost | https://github.com/zen-browser/desktop/issues/10811 | None | None |
| Scrolling cause GPU spikes | https://github.com/zen-browser/desktop/issues/10810 | 0:02:36 | 3:39:42 |
| No such native application org.gnome.chrome_gnome_shell | https://github.com/zen-browser/desktop/issues/10806 | 2:20:05 | None |
| keep crashing | https://github.com/zen-browser/desktop/issues/10804 | 1 day, 0:05:54 | None |
| Workspace-aware restore closed tab behavior for reopening tabs | https://github.com/zen-browser/desktop/issues/10803 | 1 day, 20:48:51 | 1 day, 20:48:51 |
| After activation "Zen will never remember history" all toolbars are black and the font color is also black | https://github.com/zen-browser/desktop/issues/10802 | 9:08:32 | None |
| Fullscreen mode doesn't hide toolbar and sidebar | https://github.com/zen-browser/desktop/issues/10800 | 7:38:33 | 7:38:33 |
| DOH: Zen loose connectivity when network changes | https://github.com/zen-browser/desktop/issues/10799 | None | None |
| Large Memory Leak Issue (zen.exe not properly exiting) | https://github.com/zen-browser/desktop/issues/10797 | 10:46:25 | 10:46:25 |
| Absolutely broken compact mode 1.17t | https://github.com/zen-browser/desktop/issues/10796 | 10:56:37 | 1 day, 11:24:34 |
| I am being randomly logged out of websites | https://github.com/zen-browser/desktop/issues/10792 | None | None |
| 1Password desktop app integration not working in Zen Browser | https://github.com/zen-browser/desktop/issues/10788 | 0:44:13 | 0:44:13 |
| [Bug] WebRender content becomes blurry at 5120x1440 with NVIDIA eGPU on Linux (X11) - Upstream Firefox has this issue too but not as badly | https://github.com/zen-browser/desktop/issues/10787 | None | None |
| Tab Icons not rendering for certain tabs | https://github.com/zen-browser/desktop/issues/10782 | 0:09:03 | 0:09:03 |
| Dragging sidebar moves the window | https://github.com/zen-browser/desktop/issues/10781 | 1:56:10 | 1:56:10 |
| blinking caret bug | https://github.com/zen-browser/desktop/issues/10780 | 3:09:48 | 3:09:48 |
| Freezing youtube videos when i change screens | https://github.com/zen-browser/desktop/issues/10779 | None | None |
| Browser Icons Not Showing on Toolbar or Favorites in KDE Plasma on Fedora Linux | https://github.com/zen-browser/desktop/issues/10778 | None | None |
| AUR version of Zen Browser glitches/pauses continuously | https://github.com/zen-browser/desktop/issues/10777 | 12:31:55 | None |
| When tab changes while sub-folder is closing, does not fold the tab opened | https://github.com/zen-browser/desktop/issues/10772 | 9:29:58 | 9:29:58 |
| Green artifacts appear on the scrollbar while scrolling some webpages | https://github.com/zen-browser/desktop/issues/10766 | 6:41:23 | None |
| no newtab wallpaper apart from Default Workspace with no set profile container. | https://github.com/zen-browser/desktop/issues/10764 | 1:01:42 | 5:12:31 |
| Zen is slow to update and restart on macOS | https://github.com/zen-browser/desktop/issues/10763 | None | None |
| Layout issue: Preventing window from closing, minimizing, or resizing | https://github.com/zen-browser/desktop/issues/10762 | None | 18 days, 0:27:20 |
| Url bar overflow when click fullscreen | https://github.com/zen-browser/desktop/issues/10760 | None | None |
| Updates Failing | https://github.com/zen-browser/desktop/issues/10759 | 1 day, 9:15:55 | 1 day, 10:06:37 |
| Youtube video playback noticeably dropping frames | https://github.com/zen-browser/desktop/issues/10756 | 7:33:59 | None |
| Some websites' background is missing, uses Zen's theme color instead | https://github.com/zen-browser/desktop/issues/10755 | None | 0:02:35 |
| Toolbar History icon nonfunctional | https://github.com/zen-browser/desktop/issues/10752 | 20:34:15 | None |
| Video and audio playback error after recent pacman update | https://github.com/zen-browser/desktop/issues/10751 | None | 3:41:57 |
| Twitch.tv Login Issue on Zen Browser | https://github.com/zen-browser/desktop/issues/10750 | 5:49:14 | 1 day, 1:42:41 |
| Missing translations | https://github.com/zen-browser/desktop/issues/10749 | 3:28:20 | None |
| Passbolt Password Manager doesn't work properly | https://github.com/zen-browser/desktop/issues/10748 | 12:48:48 | 12:48:48 |
| Update are broken on macos since 1.16.4b | https://github.com/zen-browser/desktop/issues/10746 | 2 days, 16:23:56 | None |
| Blank Context Menu | https://github.com/zen-browser/desktop/issues/10745 | 10:19:37 | 11:46:43 |
| Cant load beehiv login page | https://github.com/zen-browser/desktop/issues/10744 | 14:48:10 | 14:48:10 |
| Ctrl+Shift+T after deleting a folder breaks Zen | https://github.com/zen-browser/desktop/issues/10743 | None | None |
| Settings: Search -> Address bar with browsing history negates open tabs selection | https://github.com/zen-browser/desktop/issues/10741 | None | None |
| NGINX 404 of some sites | https://github.com/zen-browser/desktop/issues/10740 | 3:51:13 | 18:34:43 |
| no pop up edit bookmark pages after triggered with 1) shortcut and 2) star icon after right click. setting "Sidebar only" of the 3 sidebar modes | https://github.com/zen-browser/desktop/issues/10738 | 4 days, 5:09:44 | 16 days, 22:20:24 |
| Sidebar resize issue when dragging the cursor beyond smallest size | https://github.com/zen-browser/desktop/issues/10737 | 1:03:24 | None |
| Can't access extensions menu from New Tab | https://github.com/zen-browser/desktop/issues/10733 | 1:46:53 | 2 days, 1:20:18 |
| Regular window tabs lost on closing if Incognito window is open | https://github.com/zen-browser/desktop/issues/10732 | 1:48:17 | 2:00:03 |
| Nested folders go back to root of workspace when opening Zen. | https://github.com/zen-browser/desktop/issues/10730 | 3:57:00 | None |
| Youtube videoplay laggy | https://github.com/zen-browser/desktop/issues/10729 | 6:03:54 | 2 days, 2:00:09 |
| Stay on page doesn't work in pinned/essential tabs | https://github.com/zen-browser/desktop/issues/10728 | None | None |
| Touch Keyboard Does Not Show | https://github.com/zen-browser/desktop/issues/10727 | 18 days, 12:51:30 | None |
| No page info in compact mode if clicked on URL | https://github.com/zen-browser/desktop/issues/10724 | None | 1:10:01 |
| Search Bar Problem | https://github.com/zen-browser/desktop/issues/10723 | 3:29:09 | 19:52:36 |
| Can't disable Hide Tab bar | https://github.com/zen-browser/desktop/issues/10722 | 0:12:09 | 2:23:39 |
| Compact Mode - Customize Toolbar - Sidebar cannot have Items | https://github.com/zen-browser/desktop/issues/10721 | 4:31:48 | 4:31:48 |
| [macOS] File upload dialog freezes Zen Browser for several seconds | https://github.com/zen-browser/desktop/issues/10719 | None | 1:29:55 |
| Mouse hover breaks Ctrl + Tab (tab switching) | https://github.com/zen-browser/desktop/issues/10715 | 4 days, 19:04:17 | 5 days, 4:09:28 |
| Spotify not working after updating to 1.16.3b | https://github.com/zen-browser/desktop/issues/10714 | 0:12:47 | 2:11:45 |
| Cursor dissapears in most online text editors | https://github.com/zen-browser/desktop/issues/10713 | 5:37:12 | None |
| Tabs dont close | https://github.com/zen-browser/desktop/issues/10710 | None | None |
| Address Bar opens on keypress right after starting zen | https://github.com/zen-browser/desktop/issues/10709 | None | None |
| Search bar wont fully disappear when trying to close it | https://github.com/zen-browser/desktop/issues/10708 | 9:51:49 | 9:51:49 |
| [Twilight] Tabs' area is reduced when enabling compact mode in collapsed toolbars layout | https://github.com/zen-browser/desktop/issues/10706 | 15:58:04 | 15:58:04 |
| Is not possible expand de tabs side bar | https://github.com/zen-browser/desktop/issues/10705 | 0:19:09 | 12:56:28 |
| Missing tab navigation keyboard shortcut | https://github.com/zen-browser/desktop/issues/10704 | 2:47:17 | 1 day, 1:48:51 |
| Switching workspace hotkey slow to repeat. | https://github.com/zen-browser/desktop/issues/10703 | 4:59:37 | None |
| DevTools warning: connected browser newer than Zen (unsupported setup message) | https://github.com/zen-browser/desktop/issues/10702 | None | 0:07:32 |
| - [Bug] High Memory & Disk Consumption on Snapdragon X Plus Device | https://github.com/zen-browser/desktop/issues/10701 | None | None |
| Youtube Live Streams Are Not Working After The Update | https://github.com/zen-browser/desktop/issues/10698 | 3:17:57 | 1 day, 3:35:02 |
| Very low performance | https://github.com/zen-browser/desktop/issues/10695 | 1:40:48 | 1:40:48 |
| Can you fucing fix the ctrashing???? | https://github.com/zen-browser/desktop/issues/10693 | 0:42:11 | 3:45:23 |
| Strange Behaviour with Context Menu Clicks | https://github.com/zen-browser/desktop/issues/10691 | 6:58:32 | None |
| Can't play DRM content on the latest release 1.16.3b | https://github.com/zen-browser/desktop/issues/10689 | 15:28:49 | None |
| On macOS, workspace swipe actions require "Swipe between pages" to be enabled in system settings | https://github.com/zen-browser/desktop/issues/10687 | None | None |
| macOS Altcodes / Modifier Keys Cause Keyboard Shortcut Issues | https://github.com/zen-browser/desktop/issues/10686 | 11 days, 13:05:50 | None |
| Mute button simply stopped functioning. | https://github.com/zen-browser/desktop/issues/10685 | None | None |
| Linux: 1Password desktop integration fails for Flatpak and Tarball installs | https://github.com/zen-browser/desktop/issues/10684 | None | None |
| Entire Program Constantly Crashes With No Discernible Reproduction Method, Making it Unusable | https://github.com/zen-browser/desktop/issues/10683 | 4:17:45 | 1 day, 10:38:49 |
| URL Bar appears cut off and onto the side (Floating URL Bar Issue) | https://github.com/zen-browser/desktop/issues/10682 | 1:31:06 | 0:02:30 |
| All tabs keep crashing on Windows | https://github.com/zen-browser/desktop/issues/10681 | 1 day, 7:25:22 | None |
| Failure to Update Zen Browser from Version 1.16.1b-1 to 1.16.2b-1 | https://github.com/zen-browser/desktop/issues/10678 | 2:02:51 | 5:04:58 |
| Cannot set hotkey for "Stop Loading" (Browser:Stop). | https://github.com/zen-browser/desktop/issues/10677 | 2 days, 0:55:20 | 2 days, 0:55:19 |
| Zen has suddenly overriden default Bitwarden keyboard shortcut and even when unbound it cannot be used for bitwarden | https://github.com/zen-browser/desktop/issues/10676 | None | None |
| Zen Browser blocks Macbook from sleep | https://github.com/zen-browser/desktop/issues/10673 | None | None |
| Cannot select text in URL bar by dragging mouse | https://github.com/zen-browser/desktop/issues/10671 | None | 1 day, 20:37:27 |
| Bookmarks bar partially obscured by sidebar | https://github.com/zen-browser/desktop/issues/10667 | 19 days, 23:45:50 | None |
| Browser freezes when tab is opened by external app with workspace switching enabled | https://github.com/zen-browser/desktop/issues/10666 | 1 day, 1:33:52 | None |
| The bookmarks bar disappears in full screen mode | https://github.com/zen-browser/desktop/issues/10665 | 18:54:47 | 20:41:21 |
| Websites rendering broken for me in 1.16 (fixed but reporting for clarity) | https://github.com/zen-browser/desktop/issues/10664 | None | None |
| cmd + option + M interferes with macOS cmd + option + H + M global command | https://github.com/zen-browser/desktop/issues/10663 | None | None |
| Zen freezes for ~3 seconds when downloading a file | https://github.com/zen-browser/desktop/issues/10657 | 18:33:18 | None |
| Twitch Video Stuttering | https://github.com/zen-browser/desktop/issues/10653 | 1 day, 0:24:44 | None |
| Recent Update Made Zen crash when using NVIDIA HW Acceleration (X11, Linux) | https://github.com/zen-browser/desktop/issues/10652 | 5 days, 18:32:13 | None |
| Search bar does not hide and stays stuck on screen | https://github.com/zen-browser/desktop/issues/10650 | 0:10:53 | 2:43:42 |
| browser stutter/halts/unresponsive | https://github.com/zen-browser/desktop/issues/10649 | 11:29:19 | None |
| Issue with `1.16.2b-1` | https://github.com/zen-browser/desktop/issues/10648 | 6:46:15 | 6:46:15 |
| Zen Sync not working | https://github.com/zen-browser/desktop/issues/10647 | 1 day, 7:52:54 | 12 days, 4:07:32 |
| Stability issue: random crashes after v1.16.2b update | https://github.com/zen-browser/desktop/issues/10646 | 3:44:53 | 10:49:23 |
_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-10-01..2025-10-31`

View File

@@ -304,4 +304,4 @@ zen-devtools-toggle-performance-shortcut = Performance umschalten
zen-devtools-toggle-storage-shortcut = Speicher umschalten
zen-devtools-toggle-dom-shortcut = DOM umschalten
zen-devtools-toggle-accessibility-shortcut = Barrierefreiheit umschalten
zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs
zen-close-all-unpinned-tabs-shortcut = Alle nicht angehefteten Tabs schließen

View File

@@ -63,8 +63,8 @@ zen-generic-next = Weiter
# These labels will be used for the site data panel settings
zen-site-data-setting-allow = Erlaubt
zen-site-data-setting-block = Blockiert
zen-site-data-protections-enabled = Enabled
zen-site-data-protections-disabled = Disabled
zen-site-data-protections-enabled = Aktiviert
zen-site-data-protections-disabled = Deaktiviert
zen-site-data-setting-cross-site = Cross-Site-Cookie
zen-site-data-security-info-extension =
.label = Erweiterung
@@ -79,13 +79,13 @@ zen-site-data-get-addons =
zen-site-data-site-settings =
.label = Alle Website-Einstellungen
zen-site-data-header-share =
.tooltiptext = Share This Page
.tooltiptext = Diese Seite teilen
zen-site-data-header-reader-mode =
.tooltiptext = Enter Reader Mode
.tooltiptext = Lesemodus aktivieren
zen-site-data-header-screenshot =
.tooltiptext = Take a Screenshot
.tooltiptext = Screenshot erstellen
zen-site-data-header-bookmark =
.tooltiptext = Bookmark This Page
.tooltiptext = Diese Seite als Lesezeichen hinzufügen
zen-urlbar-copy-url-button =
.tooltiptext = URL kopieren
zen-site-data-setting-site-protection = Tracking-Schutz

View File

@@ -59,7 +59,7 @@ zen-workspaces-delete-workspace-title = Arbeitsbereich löschen?
zen-workspaces-delete-workspace-body = Sind Sie sicher, dass Sie { $name } löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.
# Note that the html tag MUST not be changed or removed, as it is used to better
# display the shortcut in the toast notification.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcut }</span> to undo.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs geschlossen! Nutze <span>{ $shortcut }</span> , um rückgängig zu machen.
zen-workspaces-close-all-unpinned-tabs-title =
.label = Clear
.tooltiptext = Close all unpinned tabs
.label = Löschen
.tooltiptext = Alle nicht angehefteten Tabs schließen

View File

@@ -56,6 +56,9 @@ pane-settings-workspaces-title = Workspaces
zen-tabs-unloader-enabled =
.label = Enable Tab Unloader
zen-tabs-close-on-back-with-no-history =
.label = Close tab and switch to its owner tab (or most recently used tab) when going back with no history
zen-look-and-feel-compact-toolbar-themed =
.label = Use themed background for compact toolbar

View File

@@ -304,4 +304,4 @@ zen-devtools-toggle-performance-shortcut = 성능 탭 전환
zen-devtools-toggle-storage-shortcut = 저장소 탭 전환
zen-devtools-toggle-dom-shortcut = DOM 탭 전환
zen-devtools-toggle-accessibility-shortcut = 접근성 탭 전환
zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs
zen-close-all-unpinned-tabs-shortcut = 모든 고정되지 않은 탭 닫기

View File

@@ -63,8 +63,8 @@ zen-generic-next = 다음
# These labels will be used for the site data panel settings
zen-site-data-setting-allow = 허용됨
zen-site-data-setting-block = 금지됨
zen-site-data-protections-enabled = Enabled
zen-site-data-protections-disabled = Disabled
zen-site-data-protections-enabled = 활성화됨
zen-site-data-protections-disabled = 비활성화됨
zen-site-data-setting-cross-site = 사이트 간 공유 쿠키
zen-site-data-security-info-extension =
.label = 확장
@@ -79,13 +79,13 @@ zen-site-data-get-addons =
zen-site-data-site-settings =
.label = 모든 사이트 설정
zen-site-data-header-share =
.tooltiptext = Share This Page
.tooltiptext = 이 페이지 공유
zen-site-data-header-reader-mode =
.tooltiptext = Enter Reader Mode
.tooltiptext = 읽기 모드 켜기
zen-site-data-header-screenshot =
.tooltiptext = Take a Screenshot
.tooltiptext = 화면 캡쳐
zen-site-data-header-bookmark =
.tooltiptext = Bookmark This Page
.tooltiptext = 이 페이지 북마크
zen-urlbar-copy-url-button =
.tooltiptext = URL 복사
zen-site-data-setting-site-protection = 추적 보호

View File

@@ -59,7 +59,7 @@ zen-workspaces-delete-workspace-title = 워크스페이스를 삭제하시겠습
zen-workspaces-delete-workspace-body = 정말 { $name }을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.
# Note that the html tag MUST not be changed or removed, as it is used to better
# display the shortcut in the toast notification.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcut }</span> to undo.
zen-workspaces-close-all-unpinned-tabs-toast = 탭을 닫았습니다! 되돌리려면 <span>{ $shortcut }</span>을 사용하세요.
zen-workspaces-close-all-unpinned-tabs-title =
.label = Clear
.tooltiptext = Close all unpinned tabs
.label = 탭 정리
.tooltiptext = 고정되지 않은 모든 탭을 닫습니다

View File

@@ -16,12 +16,12 @@ sync-engine-workspaces =
.label = Darbo sritys
.tooltiptext = Sinchronizuokite savo darbo sritis tarp įrenginių
.accesskey = W
zen-glance-title = Greitasis pažiūrėjimas
zen-glance-header = Bendrieji greitojo pažiūrėjimo nustatymai
zen-glance-description = Gaukite greitą nuorodų apžvalgą neatidarydami jų naujoje kortelėje
zen-glance-title = Spartusis pažiūrėjimas
zen-glance-header = Bendrieji sparčiojo pažiūrėjimo nustatymai
zen-glance-description = Gaukite sparčią savo nuorodų apžvalgą neatverdami jų naujoje kortelėje.
zen-glance-trigger-label = Paleidimo būdas
zen-glance-enabled =
.label = Įjungti greitą pažiūrėjimą
.label = Įjungti spartų pažiūrėjimą
zen-glance-trigger-ctrl-click =
.label = Vald + spausti
zen-glance-trigger-alt-click =
@@ -29,15 +29,15 @@ zen-glance-trigger-alt-click =
zen-glance-trigger-shift-click =
.label = Lyg2 + spausti
zen-glance-trigger-meta-click =
.label = Meta (Komanda) + spausti
.label = Meta (komanda) + spausti
zen-look-and-feel-compact-view-header = Rodyti kompaktiniame rodinyje
zen-look-and-feel-compact-view-description = Rodyti tik tas įrankių juostas, kurias naudojate!
zen-look-and-feel-compact-view-description = Rodyti tik tas įrankių juostas, kurias naudojate.
zen-look-and-feel-compact-view-enabled =
.label = Įjungti „{ -brand-short-name }“ kompaktinį režimą
zen-look-and-feel-compact-view-top-toolbar =
.label = Slėpti viršutinę įrankių juostą ir kompaktiniu režimu
zen-look-and-feel-compact-toolbar-flash-popup =
.label = Trumpai padaryti, kad įrankių juosta iškyltų perjungiant arba atidarant naujas korteles kompaktiniu režimu
.label = Trumpai padaryti, kad įrankių juosta iškiltų perjungiant arba atidarant naujas korteles kompaktiniu režimu
pane-zen-tabs-title = Kortelių tvarkymas
category-zen-workspaces =
.tooltiptext = { pane-zen-tabs-title }
@@ -50,29 +50,29 @@ zen-workspace-continue-where-left-off =
.label = Tęskite, kur baigėte
pane-zen-pinned-tab-manager-title = Prisegtos kortelės
zen-pinned-tab-manager-header = Bendrieji prisegtų kortelių nustatymai
zen-pinned-tab-manager-description = Tvarkykite papildomą prisegtų kortelių elgseną
zen-pinned-tab-manager-description = Tvarkykite papildomą prisegtų kortelių elgseną.
zen-pinned-tab-manager-restore-pinned-tabs-to-pinned-url =
.label = Atkurti prisegtas korteles į jų originalų prisegtą URL paleidimo metu
zen-pinned-tab-manager-container-specific-essentials-enabled =
.label = Įjungti konkrečiam konteineriui būtinuosius
zen-pinned-tab-manager-close-shortcut-behavior-label = Užverti kortelę sparčiųjų klavišų elgsena
zen-pinned-tab-manager-close-shortcut-behavior-label = Užvėrimo kortelę sparčiųjų klavišų elgsena
zen-pinned-tab-manager-reset-unload-switch-close-shortcut-option =
.label = Atkurti URL, iškelti ir perjungti į kitą kortelę
.label = Atkurti URL, iškelti ir perjungti į sekančią kortelę
zen-pinned-tab-manager-unload-switch-close-shortcut-option =
.label = Iškelti ir perjungti į kitą kortelę
.label = Iškelti ir perjungti į sekančią kortelę
zen-pinned-tab-manager-reset-switch-close-shortcut-option =
.label = Atkurti URL ir perjungti į kitą kortelę
.label = Atkurti URL ir perjungti į sekančią kortelę
zen-pinned-tab-manager-switch-close-shortcut-option =
.label = Perjungti į kitą kortelę
.label = Perjungti į sekančią kortelę
zen-pinned-tab-manager-reset-close-shortcut-option =
.label = Atkurti URL
zen-pinned-tab-manager-close-close-shortcut-option =
.label = Užverti kortelę
pane-zen-workspaces-header = Darbo sritys
zen-settings-workspaces-header = Bendrieji darbo sričių nustatymai
zen-settings-workspaces-description = Su darbo sritimis galite vienu metu atlikti kelias naršymo seansus!
zen-settings-workspaces-description = Su darbo sritimis galite vienu metu atlikti kelias naršymo seansus.
zen-settings-workspaces-enabled =
.label = Įjungti darbo sritis (eksperimentinė)
.label = Įjungti darbo sritis
zen-settings-workspaces-hide-default-container-indicator =
.label = Slėpti numatytojo konteinerio indikatorių kortelių juostoje
zen-key-unsaved = Neįrašytas spartusis klavišas! Iš naujo jį įvedę, paspauskite grįžimo klavišą.
@@ -80,18 +80,18 @@ zen-key-conflict = Konfliktuoja su „{ $group }“ -> „{ $shortcut }“
pane-zen-theme-title = Temų nustatymai
zen-vertical-tabs-title = Šoninė juosta ir kortelių išdėstymas
zen-vertical-tabs-header = Vertikalios kortelės
zen-vertical-tabs-description = Tvarkykite korteles vertikaliame išdėstyme
zen-vertical-tabs-description = Tvarkykite korteles vertikaliame išdėstyme.
zen-vertical-tabs-show-expand-button =
.label = Rodyti išskleidimo mygtuką
zen-vertical-tabs-newtab-on-tab-list =
.label = Rodyti naujos kortelės mygtuką kortelių sąraše
zen-vertical-tabs-newtab-top-button-up =
.label = Perkelti naujos kortelės mygtuką į viršų
zen-vertical-tabs-expand-tabs-by-default = Išskleisti korteles pagal numatytąją nustatymą
zen-vertical-tabs-dont-expand-tabs-by-default = Neišskleisti kortelių pagal numatytąją nustatymą
zen-vertical-tabs-expand-tabs-by-default = Išskleisti korteles pagal numatytąją
zen-vertical-tabs-dont-expand-tabs-by-default = Neišskleisti kortelių pagal numatytąją
zen-vertical-tabs-expand-tabs-on-hover = Išskleisti korteles užvedus (neveikia kompaktiniame režime)
zen-vertical-tabs-expand-tabs-header = Kaip išskleisti korteles
zen-vertical-tabs-expand-tabs-description = Pasirinkite, kaip išskleisti kortelės šoninėje juostoje
zen-vertical-tabs-expand-tabs-description = Pasirinkite, kaip išskleisti kortelės šoninėje juostoje.
zen-theme-marketplace-header = „Zen“ modifikacijos
zen-theme-disable-all-enabled =
.title = Išjungti visus modifikacijas
@@ -128,10 +128,10 @@ pane-zen-marketplace-title = „Zen“ modifikacijos
zen-themes-auto-update =
.label = Automatiškai atnaujinti įdiegtas modifikacijas paleidimo metu
zen-settings-workspaces-force-container-tabs-to-workspace =
.label = Perjungti į darbo sritį, kurioje konteineris nustatytas kaip numatytasis, atidarant konteinerio korteles
.label = Perjungti į darbo sritį, kurioje konteineris nustatytas kaip numatytasis, atveriant konteinerio korteles
zen-theme-marketplace-link = Aplankyti parduotuvę
zen-dark-theme-styles-header = Tamsios temos stiliai
zen-dark-theme-styles-description = Tinkinkite tamsią temą pagal savo poreikius
zen-dark-theme-styles-description = Tinkinkite tamsią temą pagal savo poreikius.
zen-dark-theme-styles-amoled = Naktinė tema
zen-dark-theme-styles-default = Numatytoji tamsi tema
zen-dark-theme-styles-colorful = Spalvinga tamsi tema
@@ -153,13 +153,13 @@ category-zen-CKS =
.tooltiptext = { pane-zen-CKS-title }
pane-settings-CKS-title = „{ -brand-short-name }“ klaviatūros spartieji klavišai
zen-settings-CKS-header = Tinkinkite klaviatūros sparčiuosius klavišus
zen-settings-CKS-description = Keiskite numatytąsias klaviatūros sparčiąsias klavišus pagal savo pageidavimus ir patobulinkite naršymo potyrį
zen-settings-CKS-description = Keiskite numatytąsias klaviatūros sparčiąsias klavišus pagal savo pageidavimus ir patobulinkite naršymo patirtį.
zen-settings-CKS-disable-firefox =
.label = Išjungti „{ -brand-short-name }“ numatytuosius klaviatūros sparčiuosius klavišus
zen-settings-CKS-duplicate-shortcut =
.label = Dubliuoti spartųjį klavišą
zen-settings-CKS-reset-shortcuts =
.label = Atkurti į numatytuosius nustatymus
.label = Atkurti į numatytuosius
zenCKSOption-group-other = Kita
zenCKSOption-group-windowAndTabManagement = Langų ir kortelių tvarkymas
zenCKSOption-group-navigation = Naršymas
@@ -234,7 +234,7 @@ zen-find-shortcut = Rasti puslapyje
zen-search-find-again-shortcut = Rasti dar kartą
zen-search-find-again-shortcut-prev = Rasti ankstesnį
zen-search-find-again-shortcut-2 = Rasti dar kartą (Alt)
zen-bookmark-this-page-shortcut = Pridėti šį puslapį prie adresyno
zen-bookmark-this-page-shortcut = Įtraukti šį puslapį į adresyną
zen-bookmark-show-library-shortcut = Rodyti adresyno biblioteką
zen-key-stop = Stabdyti įkėlimą
zen-full-zoom-reduce-shortcut = Sumažinti
@@ -257,7 +257,7 @@ zen-close-tab-shortcut = Užverti kortelę
zen-compact-mode-shortcut-show-sidebar = Perjungti slankančią šoninę juostą
zen-compact-mode-shortcut-show-toolbar = Perjungti slankančią įrankių juostą
zen-compact-mode-shortcut-toggle = Perjungti kompaktinį režimą
zen-glance-expand = Išskleisti greitą pažiūrėjimą
zen-glance-expand = Išskleisti spartų pažiūrėjimą
zen-workspace-shortcut-switch-1 = Perjungti į 1 darbo sritį
zen-workspace-shortcut-switch-2 = Perjungti į 2 darbo sritį
zen-workspace-shortcut-switch-3 = Perjungti į 3 darbo sritį
@@ -304,4 +304,4 @@ zen-devtools-toggle-performance-shortcut = Perjungti našumą
zen-devtools-toggle-storage-shortcut = Perjungti saugyklą
zen-devtools-toggle-dom-shortcut = Perjungti DOM
zen-devtools-toggle-accessibility-shortcut = Perjungti prieinamumą
zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs
zen-close-all-unpinned-tabs-shortcut = Užverti visas neprisegtas korteles

View File

@@ -28,7 +28,7 @@ pictureinpicture-minimize-btn =
.tooltip = Sumažinti
zen-panel-ui-gradient-generator-custom-color = Pasirinktinė spalva
zen-panel-ui-gradient-generator-saved-message = Gradientas sėkmingai įrašytas.
zen-copy-current-url-confirmation = Copied current URL!
zen-copy-current-url-confirmation = Nukopijuotas dabartinis URL.
zen-general-cancel-label =
.label = Atšaukti
zen-general-confirm =
@@ -59,13 +59,13 @@ urlbar-search-mode-zen_actions = Veiksmai
zen-site-data-settings = Nustatymai
zen-generic-manage = Tvarkyti
zen-generic-more = Daugiau
zen-generic-next = Next
zen-generic-next = Sekantis
# These labels will be used for the site data panel settings
zen-site-data-setting-allow = Leidžiama
zen-site-data-setting-block = Užblokuota
zen-site-data-protections-enabled = Enabled
zen-site-data-protections-disabled = Disabled
zen-site-data-setting-cross-site = Cross-Site cookie
zen-site-data-protections-enabled = Įjungta
zen-site-data-protections-disabled = Išjungta
zen-site-data-setting-cross-site = Tarpusavio svetainės slapukas
zen-site-data-security-info-extension =
.label = Plėtinys
zen-site-data-security-info-secure =
@@ -79,16 +79,16 @@ zen-site-data-get-addons =
zen-site-data-site-settings =
.label = Visi svetainės nustatymai
zen-site-data-header-share =
.tooltiptext = Share This Page
.tooltiptext = Bendrinti šį puslapį
zen-site-data-header-reader-mode =
.tooltiptext = Enter Reader Mode
.tooltiptext = Įeiti į skaitytojo režimą
zen-site-data-header-screenshot =
.tooltiptext = Take a Screenshot
.tooltiptext = Daryti ekrano kopiją
zen-site-data-header-bookmark =
.tooltiptext = Bookmark This Page
.tooltiptext = Įtraukti šį puslapį į adresyną
zen-urlbar-copy-url-button =
.tooltiptext = Copy URL
zen-site-data-setting-site-protection = Tracking Protection
.tooltiptext = Kopijuoti URL
zen-site-data-setting-site-protection = Stebėjimo apsauga
# Section: Feature callouts

View File

@@ -19,5 +19,5 @@ zen-split-view-modifier-header = Skaidymo rodinys
zen-split-view-modifier-activate-reallocation =
.label = Aktyvuoti perskyrimą
zen-split-view-modifier-enabled-toast = Skaidymo rodinio pertvarkymas įjungtas.
zen-split-view-modifier-enabled-toast-description = Nutempkite rodinį, kad pertvarkytumėte. Paspauskite Gr, kad išeitumėte.
zen-split-view-modifier-enabled-toast-description = Nutempkite rodinį, kad pertvarkytumėte. Paspauskite Gr, kad išeitumėte.
zen-split-view-modifier-disabled-toast = Skaidymo rodinio pertvarkymas išjungtas.

View File

@@ -18,7 +18,7 @@ zen-welcome-workspace-colors-description = Suasmeninkite savo naršyklę, suteik
zen-welcome-start-browsing-title =
Viskas parengta?<br/>
Pradėkime veikti!
zen-welcome-start-browsing-description-1 = Viskas parengta ir gali veikti. Spustelėkite toliau esantį mygtuką, kad pradėtumėte naršyti su „{ -brand-short-name }“.
zen-welcome-start-browsing-description-1 = Viskas parengta ir gali veikti. Spustelėkite žemiau esantį mygtuką, kad pradėtumėte naršyti su „{ -brand-short-name }“.
zen-welcome-start-browsing = Pirmyn!
zen-welcome-default-search-title = Jūsų numatytasis paieškos variklis
zen-welcome-default-search-description = Pasirinkite numatytąjį paieškos variklį. Vėliau visada galite ją pakeisti!

View File

@@ -59,7 +59,7 @@ zen-workspaces-delete-workspace-title = Ištrinti erdvę?
zen-workspaces-delete-workspace-body = Ar tikrai norite ištrinti „{ $name }“? Šio veiksmo anuliuoti negalima.
# Note that the html tag MUST not be changed or removed, as it is used to better
# display the shortcut in the toast notification.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcut }</span> to undo.
zen-workspaces-close-all-unpinned-tabs-toast = Kortelės užvertos! Naudokite <span>{ $shortcut }</span>, kad atšauktumėte.
zen-workspaces-close-all-unpinned-tabs-title =
.label = Clear
.tooltiptext = Close all unpinned tabs
.label = Valyti
.tooltiptext = Užverti visas neprisegtas korteles

View File

@@ -30,8 +30,8 @@ zen-glance-trigger-shift-click =
.label = Shift + klik
zen-glance-trigger-meta-click =
.label = Windows (Command) + klik
zen-look-and-feel-compact-view-header = Toon in compacte weergave
zen-look-and-feel-compact-view-description = Toon alleen de werkbalken die je gebruikt!
zen-look-and-feel-compact-view-header = Weergeven in compacte weergave
zen-look-and-feel-compact-view-description = Alleen de werkbalken weergeven die je gebruikt!
zen-look-and-feel-compact-view-enabled =
.label = { -brand-short-name }'s compacte modus inschakelen
zen-look-and-feel-compact-view-top-toolbar =
@@ -45,7 +45,7 @@ pane-settings-workspaces-title = Werkruimtes
zen-tabs-unloader-enabled =
.label = Tabblad ontlader inschakelen
zen-look-and-feel-compact-toolbar-themed =
.label = Use themed background for compact toolbar
.label = Gebruik thema achtergrond voor compacte werkbalk
zen-workspace-continue-where-left-off =
.label = Verdergaan waar je was gebleven
pane-zen-pinned-tab-manager-title = Vastgezette tabbladen
@@ -76,7 +76,7 @@ zen-settings-workspaces-enabled =
zen-settings-workspaces-hide-default-container-indicator =
.label = Verberg de standaard container indicator in de tabbladbalk
zen-key-unsaved = Snelkoppeling is niet opgeslagen! Bewaar deze door op de "Escape" knop te drukken na het opnieuw typen.
zen-key-conflict = Conflicts with { $group } -> { $shortcut }
zen-key-conflict = Conflicten met { $group } -> { $shortcut }
pane-zen-theme-title = Thema instellingen
zen-vertical-tabs-title = Zijbalk en tabbladen lay-out
zen-vertical-tabs-header = Verticale tabbladen
@@ -84,9 +84,9 @@ zen-vertical-tabs-description = Beheer je tabbladen in een verticale lay-out
zen-vertical-tabs-show-expand-button =
.label = Uitbreiden knop weergeven
zen-vertical-tabs-newtab-on-tab-list =
.label = Laat nieuwe tabblad knop zien op de tabblad lijst
.label = Laat nieuwe tabblad knop zien op de tabbladlijst
zen-vertical-tabs-newtab-top-button-up =
.label = Verplaats de nieuwe tab knop naar boven
.label = Verplaats de nieuwe tabblad knop naar boven
zen-vertical-tabs-expand-tabs-by-default = Tabbladen standaard uitbreiden
zen-vertical-tabs-dont-expand-tabs-by-default = Tabbladen niet standaard uitbreiden
zen-vertical-tabs-expand-tabs-on-hover = Tabbladen uitbreiden bij hoveren (werkt niet in compacte modus)
@@ -130,7 +130,7 @@ zen-themes-auto-update =
zen-settings-workspaces-force-container-tabs-to-workspace =
.label = Schakel over naar de werkruimte waar container als standaard is ingesteld bij het openen van container tabbladen
zen-theme-marketplace-link = Winkel bezoeken
zen-dark-theme-styles-header = Donkere thema stijlen
zen-dark-theme-styles-header = Donker thema stijlen
zen-dark-theme-styles-description = Pas het donker thema aan naar jouw voorkeur
zen-dark-theme-styles-amoled = Nacht thema
zen-dark-theme-styles-default = Standaard donker thema
@@ -223,7 +223,7 @@ zen-key-exit-full-screen = Volledig scherm afsluiten
zen-ai-chatbot-sidebar-shortcut = AI-chatbot zijbalk togglen
zen-key-inspector-mac = Inspector (Mac) togglen
zen-toggle-sidebar-shortcut = Firefox zijbalk togglen
zen-toggle-pin-tab-shortcut = Toggle Pin Tab
zen-toggle-pin-tab-shortcut = Tabblad vastzetten togglen
zen-reader-mode-toggle-shortcut-other = Leesmodus togglen
zen-picture-in-picture-toggle-shortcut = Beeld-in-beeld togglen
zen-nav-reload-shortcut-2 = Pagina opnieuw laden
@@ -234,7 +234,7 @@ zen-find-shortcut = Vinden op pagina
zen-search-find-again-shortcut = Opnieuw zoeken
zen-search-find-again-shortcut-prev = Vorige vinden
zen-search-find-again-shortcut-2 = Opnieuw zoeken (alternatief)
zen-bookmark-this-page-shortcut = Bladwijzer deze pagina
zen-bookmark-this-page-shortcut = Bladwijzer toevoegen voor deze pagina
zen-bookmark-show-library-shortcut = Bladwijzerbibliotheek weergeven
zen-key-stop = Laden stoppen
zen-full-zoom-reduce-shortcut = Uitzoomen
@@ -248,8 +248,8 @@ zen-private-browsing-shortcut = Privé browsen
zen-screenshot-shortcut = Schermafbeelding maken
zen-key-sanitize = Browsergegevens wissen
zen-quit-app-shortcut = Applicatie afsluiten
zen-key-wr-capture-cmd = WR opname opdracht
zen-key-wr-toggle-capture-sequence-cmd = WR opnamereeks togglen
zen-key-wr-capture-cmd = WR-opname opdracht
zen-key-wr-toggle-capture-sequence-cmd = WR-opnamereeks togglen
zen-nav-reload-shortcut = Pagina opnieuw laden
zen-nav-reload-shortcut-skip-cache = Pagina opnieuw laden (Cache overslaan)
zen-close-shortcut = Venster sluiten
@@ -257,7 +257,7 @@ zen-close-tab-shortcut = Tabblad sluiten
zen-compact-mode-shortcut-show-sidebar = Zwevende zijbalk togglen
zen-compact-mode-shortcut-show-toolbar = Zwevende werkbalk togglen
zen-compact-mode-shortcut-toggle = Compacte modus togglen
zen-glance-expand = Expand Glance
zen-glance-expand = Snel bekijken uitbreiden
zen-workspace-shortcut-switch-1 = Schakelen naar werkruimte 1
zen-workspace-shortcut-switch-2 = Schakelen naar werkruimte 2
zen-workspace-shortcut-switch-3 = Schakelen naar werkruimte 3
@@ -276,7 +276,7 @@ zen-split-view-shortcut-grid = Gesplitste weergave raster togglen
zen-split-view-shortcut-vertical = Gesplitste weergave verticaal togglen
zen-split-view-shortcut-horizontal = Gesplitste weergave horizontaal togglen
zen-split-view-shortcut-unsplit = Gesplitste weergave sluiten
zen-new-empty-split-view-shortcut = New Empty Split View
zen-new-empty-split-view-shortcut = Nieuwe lege gesplitste weergave
zen-key-select-tab-1 = Selecteer tabblad #1
zen-key-select-tab-2 = Selecteer tabblad #2
zen-key-select-tab-3 = Selecteer tabblad #3
@@ -304,4 +304,4 @@ zen-devtools-toggle-performance-shortcut = Prestaties togglen
zen-devtools-toggle-storage-shortcut = Opslag togglen
zen-devtools-toggle-dom-shortcut = DOM togglen
zen-devtools-toggle-accessibility-shortcut = Toegankelijkheid togglen
zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs
zen-close-all-unpinned-tabs-shortcut = Alle niet-vastgezette tabbladen sluiten

View File

@@ -3,7 +3,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
zen-folders-search-placeholder =
.placeholder = Zoek { $folder-name }...
.placeholder = { $folder-name } zoeken...
zen-folders-panel-rename-folder =
.label = Map hernoemen
zen-folders-panel-unpack-folder =
@@ -19,7 +19,7 @@ zen-folders-panel-change-folder-space =
zen-folders-panel-change-icon-folder =
.label = Wijzig pictogram
zen-folders-unload-all-tooltip =
.tooltiptext = Unload active in this folder
.tooltiptext = Actieven ontladen in deze map
zen-folders-unload-folder =
.label = Unload All Tabs
zen-folders-search-no-results = No tabs matching that search 🤔
.label = Alle tabbladen ontladen
zen-folders-search-no-results = Geen tabbladen die overeenkomen met die zoekopdracht 🤔

View File

@@ -28,7 +28,7 @@ pictureinpicture-minimize-btn =
.tooltip = Minimaliseren
zen-panel-ui-gradient-generator-custom-color = Aangepaste kleur
zen-panel-ui-gradient-generator-saved-message = Verloop is succesvol opgeslagen!
zen-copy-current-url-confirmation = Copied current URL!
zen-copy-current-url-confirmation = Huidige URL gekopieerd!
zen-general-cancel-label =
.label = Annuleren
zen-general-confirm =
@@ -42,8 +42,8 @@ zen-library-sidebar-workspaces =
zen-library-sidebar-mods =
.label = Mods
zen-toggle-compact-mode-button =
.label = Compact Mode
.tooltiptext = Toggle Compact Mode
.label = Compacte modus
.tooltiptext = Compacte modus togglen
# note: Do not translate the "<br/>" tags in the following string
@@ -52,45 +52,45 @@ zen-close-label = Sluiten
zen-singletoolbar-urlbar-placeholder-with-name =
.placeholder = Zoeken…
zen-icons-picker-emoji =
.label = Emojis
.label = Emoji's
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
zen-generic-next = Next
.label = Iconen
urlbar-search-mode-zen_actions = Acties
zen-site-data-settings = Instellingen
zen-generic-manage = Beheren
zen-generic-more = Meer
zen-generic-next = Volgende
# 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-protections-enabled = Enabled
zen-site-data-protections-disabled = Disabled
zen-site-data-setting-cross-site = Cross-Site cookie
zen-site-data-setting-allow = Toegestaan
zen-site-data-setting-block = Geblokkeerd
zen-site-data-protections-enabled = Ingeschakeld
zen-site-data-protections-disabled = Uitgeschakeld
zen-site-data-setting-cross-site = Cross-site cookie
zen-site-data-security-info-extension =
.label = Extension
.label = Extensie
zen-site-data-security-info-secure =
.label = Secure
.label = Beveiligd
zen-site-data-security-info-not-secure =
.label = Not Secure
.label = Niet beveiligd
zen-site-data-manage-addons =
.label = Manage Extensions
.label = Extensies beheren
zen-site-data-get-addons =
.label = Add Extensions
.label = Extensies toevoegen
zen-site-data-site-settings =
.label = All Site Settings
.label = Alle site-instellingen
zen-site-data-header-share =
.tooltiptext = Share This Page
.tooltiptext = Deze pagina delen
zen-site-data-header-reader-mode =
.tooltiptext = Enter Reader Mode
.tooltiptext = Leesmodus openen
zen-site-data-header-screenshot =
.tooltiptext = Take a Screenshot
.tooltiptext = Maak een schermafbeelding
zen-site-data-header-bookmark =
.tooltiptext = Bookmark This Page
.tooltiptext = Bladwijzer toevoegen voor deze pagina
zen-urlbar-copy-url-button =
.tooltiptext = Copy URL
zen-site-data-setting-site-protection = Tracking Protection
.tooltiptext = URL kopiëren
zen-site-data-setting-site-protection = Tracking bescherming
# Section: Feature callouts
zen-site-data-panel-feature-callout-title = A new home for add-ons, permissions, and more
zen-site-data-panel-feature-callout-subtitle = Click the icon to manage site settings, view security info, access extensions, and perform common actions.
zen-site-data-panel-feature-callout-title = Een nieuw thuis voor add-ons, machtigingen en meer
zen-site-data-panel-feature-callout-subtitle = Klik op het icoon om de site-instellingen te beheren, beveiligingsinfo te bekijken, extensies te openen en gemeenschappelijke acties uit te voeren.

View File

@@ -15,6 +15,6 @@ zen-split-link =
zen-split-view-modifier-header = Gesplitste weergave
zen-split-view-modifier-activate-reallocation =
.label = Herverdeling activeren
zen-split-view-modifier-enabled-toast = Geplitste weergave herschikken staat AAN.
zen-split-view-modifier-enabled-toast = Gesplitste weergave herschikken staat AAN.
zen-split-view-modifier-enabled-toast-description = Sleep de tabbladen om de weergave te herschikken. Druk op Esc om af te sluiten.
zen-split-view-modifier-disabled-toast = Geplitste weergave herschikken staat UIT.

View File

@@ -18,7 +18,7 @@ zen-toolbar-context-compact-mode-hide-both =
.label = Beide verbergen
.accesskey = U
zen-toolbar-context-new-folder =
.label = New Folder
.label = Nieuwe map
.accesskey = N
sidebar-zen-expand =
.label = Zijbalk uitklappen

View File

@@ -6,7 +6,7 @@ zen-welcome-title-line1 = Welkom bij
zen-welcome-title-line2 = een rustiger internet
zen-welcome-import-title = Een frisse start, dezelfde bladwijzers
zen-welcome-import-description-1 = Je bladwijzers, geschiedenis en wachtwoorden zijn als een spoor van broodkruimels door het internet - laat ze niet achter!
zen-welcome-import-description-2 = Easily bring them over from another browser and pick up right where you left off..
zen-welcome-import-description-2 = Breng ze eenvoudig over vanuit een andere browser en ga verder waar je was gebleven.
zen-welcome-import-button = Nu importeren
zen-welcome-set-default-browser = { -brand-short-name } instellen als standaardbrowser
zen-welcome-dont-set-default-browser = { -brand-short-name } NIET instellen als standaardbrowser

View File

@@ -6,20 +6,20 @@ zen-panel-ui-workspaces-text = Ruimtes
zen-panel-ui-workspaces-create =
.label = Ruimte aanmaken
zen-panel-ui-folder-create =
.label = Create Folder
.label = Map aanmaken
zen-panel-ui-new-empty-split =
.label = New Split
.label = Nieuwe splitsing
zen-workspaces-panel-context-delete =
.label = Ruimte verwijderen
.accesskey = D
zen-workspaces-panel-change-name =
.label = Naam wijzigen
zen-workspaces-panel-change-icon =
.label = Icon wijzigen
.label = Icoon wijzigen
zen-workspaces-panel-context-default-profile =
.label = Profiel instellen
zen-workspaces-panel-unload =
.label = Unload Space
.label = Ruimte ontladen
zen-workspaces-how-to-reorder-title = Hoe ruimtes te herschikken
zen-workspaces-how-to-reorder-desc = Sleep het ruimte icoon onderaan de zijbalk om ze te herschikken
zen-workspaces-change-theme =
@@ -56,10 +56,10 @@ zen-workspace-creation-profile = Profiel
zen-workspace-creation-header = Maak een ruimte
zen-workspace-creation-label = Ruimtes worden gebruikt om je tabbladen en sessies te organiseren.
zen-workspaces-delete-workspace-title = Ruimte verwijderen?
zen-workspaces-delete-workspace-body = Are you sure you want to delete { $name }? This action cannot be undone.
zen-workspaces-delete-workspace-body = Weet je zeker dat je { $name } wilt verwijderen? Deze actie kan niet ongedaan gemaakt worden.
# Note that the html tag MUST not be changed or removed, as it is used to better
# display the shortcut in the toast notification.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcut }</span> to undo.
zen-workspaces-close-all-unpinned-tabs-toast = Tabbladen gesloten! Gebruik <span>{ $shortcut }</span> om ongedaan te maken.
zen-workspaces-close-all-unpinned-tabs-title =
.label = Clear
.tooltiptext = Close all unpinned tabs
.label = Wissen
.tooltiptext = Alle niet-vastgezette tabbladen sluiten

View File

@@ -304,4 +304,4 @@ zen-devtools-toggle-performance-shortcut = Włącz Wydajność
zen-devtools-toggle-storage-shortcut = Włącz Pamięć
zen-devtools-toggle-dom-shortcut = Włącz DOM
zen-devtools-toggle-accessibility-shortcut = Włącz Dostępność
zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs
zen-close-all-unpinned-tabs-shortcut = Zamknij wszystkie nieprzypięte karty

View File

@@ -59,7 +59,7 @@ zen-workspaces-delete-workspace-title = Usunąć Przestrzeń roboczą?
zen-workspaces-delete-workspace-body = Czy na pewno chcesz usunąć { $name }? Tej czynności nie można cofnąć.
# Note that the html tag MUST not be changed or removed, as it is used to better
# display the shortcut in the toast notification.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcut }</span> to undo.
zen-workspaces-close-all-unpinned-tabs-toast = Zamknięto karty! Użyj <span>{ $shortcut }</span> aby przywrócić.
zen-workspaces-close-all-unpinned-tabs-title =
.label = Clear
.tooltiptext = Close all unpinned tabs
.label = Wyczyść
.tooltiptext = Zamknij wszystkie nieprzypięte karty

View File

@@ -76,7 +76,7 @@ zen-settings-workspaces-enabled =
zen-settings-workspaces-hide-default-container-indicator =
.label = Ocultar o indicador padrão do contêiner na barra de guias
zen-key-unsaved = Atalho não salvo! Proteja-o clicando na tecla "Escape" após digitá-lo novamente.
zen-key-conflict = Conflicts with { $group } -> { $shortcut }
zen-key-conflict = Conflitos com { $group } -> { $shortcut }
pane-zen-theme-title = Opções de tema
zen-vertical-tabs-title = Layout de barra lateral e abas
zen-vertical-tabs-header = Abas verticais
@@ -304,4 +304,4 @@ zen-devtools-toggle-performance-shortcut = Ativar/Desativar Desempenho
zen-devtools-toggle-storage-shortcut = Ativar/Desativar Armazenamento
zen-devtools-toggle-dom-shortcut = Ativar/Desativar DOM
zen-devtools-toggle-accessibility-shortcut = Ativar/Desativar Acessibilidade
zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs
zen-close-all-unpinned-tabs-shortcut = Fechar Todas as Abas Não Fixadas

View File

@@ -26,7 +26,7 @@ pictureinpicture-minimize-btn =
.tooltip = Minimizar
zen-panel-ui-gradient-generator-custom-color = Cor Personalizada
zen-panel-ui-gradient-generator-saved-message = O gradiente foi salvo com sucesso!
zen-copy-current-url-confirmation = Copied current URL!
zen-copy-current-url-confirmation = URL atual copiada!
zen-general-cancel-label =
.label = Cancelar
zen-general-confirm =
@@ -57,13 +57,13 @@ urlbar-search-mode-zen_actions = Ações
zen-site-data-settings = Configurações
zen-generic-manage = Gerenciar
zen-generic-more = Mais
zen-generic-next = Next
zen-generic-next = Próximo
# These labels will be used for the site data panel settings
zen-site-data-setting-allow = Permitido
zen-site-data-setting-block = Bloqueado
zen-site-data-protections-enabled = Enabled
zen-site-data-protections-disabled = Disabled
zen-site-data-setting-cross-site = Cross-Site cookie
zen-site-data-protections-enabled = Habilitado
zen-site-data-protections-disabled = Desabilitado
zen-site-data-setting-cross-site = Cookie entre Sites
zen-site-data-security-info-extension =
.label = Extensão
zen-site-data-security-info-secure =
@@ -77,18 +77,18 @@ zen-site-data-get-addons =
zen-site-data-site-settings =
.label = Todas as Configurações do Site
zen-site-data-header-share =
.tooltiptext = Share This Page
.tooltiptext = Compartilhar Esta Página
zen-site-data-header-reader-mode =
.tooltiptext = Enter Reader Mode
.tooltiptext = Entrar no Modo Leitura
zen-site-data-header-screenshot =
.tooltiptext = Take a Screenshot
.tooltiptext = Tirar Captura de Tela
zen-site-data-header-bookmark =
.tooltiptext = Bookmark This Page
.tooltiptext = Marcar Esta Página
zen-urlbar-copy-url-button =
.tooltiptext = Copy URL
zen-site-data-setting-site-protection = Tracking Protection
.tooltiptext = Copiar URL
zen-site-data-setting-site-protection = Proteção contra Rastreamento
# Section: Feature callouts
zen-site-data-panel-feature-callout-title = A new home for add-ons, permissions, and more
zen-site-data-panel-feature-callout-subtitle = Click the icon to manage site settings, view security info, access extensions, and perform common actions.
zen-site-data-panel-feature-callout-title = Um novo lar para extensões, permissões e mais
zen-site-data-panel-feature-callout-subtitle = Clique no ícone para gerenciar configurações do site, visualizar informações de segurança, acessar extensões e realizar ações comuns.

View File

@@ -59,7 +59,7 @@ zen-workspaces-delete-workspace-title = Excluir Espaço?
zen-workspaces-delete-workspace-body = Tem certeza que deseja excluir { $name }? Esta ação não pode ser desfeita.
# Note that the html tag MUST not be changed or removed, as it is used to better
# display the shortcut in the toast notification.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcut }</span> to undo.
zen-workspaces-close-all-unpinned-tabs-toast = Abas Fechadas! Use <span>{ $shortcut }</span> para desfazer.
zen-workspaces-close-all-unpinned-tabs-title =
.label = Clear
.tooltiptext = Close all unpinned tabs
.label = Limpar
.tooltiptext = Fechar todas as abas não fixadas

View File

@@ -304,4 +304,4 @@ zen-devtools-toggle-performance-shortcut = Alternar Desempenho
zen-devtools-toggle-storage-shortcut = Alternar Armazenamento
zen-devtools-toggle-dom-shortcut = Alternar DOM
zen-devtools-toggle-accessibility-shortcut = Alternar Acessibilidade
zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs
zen-close-all-unpinned-tabs-shortcut = Fechar Todos os Separadores Não Fixados

View File

@@ -59,7 +59,7 @@ zen-workspaces-delete-workspace-title = Eliminar Espaço de Trabalho?
zen-workspaces-delete-workspace-body = Tem certeza que deseja eliminar { $name }? Esta ação não pode ser desfeita.
# Note that the html tag MUST not be changed or removed, as it is used to better
# display the shortcut in the toast notification.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcut }</span> to undo.
zen-workspaces-close-all-unpinned-tabs-toast = Separadores Fechados! Use <span>{ $shortcut }</span> para voltar atrás.
zen-workspaces-close-all-unpinned-tabs-title =
.label = Clear
.tooltiptext = Close all unpinned tabs
.label = Limpar
.tooltiptext = Fechar todos os separadores não fixados

View File

@@ -304,4 +304,4 @@ zen-devtools-toggle-performance-shortcut = Увімк. / Вимк. продук
zen-devtools-toggle-storage-shortcut = Увімк. / Вимк. сховище
zen-devtools-toggle-dom-shortcut = Увімк. / Вимк. DOM
zen-devtools-toggle-accessibility-shortcut = Увімк. / Вимк. доступ
zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs
zen-close-all-unpinned-tabs-shortcut = Закрити всі відкріплені вкладки

View File

@@ -59,7 +59,7 @@ zen-workspaces-delete-workspace-title = Видалити простір?
zen-workspaces-delete-workspace-body = Упевнені, що хочете видалити { $name }? Цю дію неможливо скасувати.
# Note that the html tag MUST not be changed or removed, as it is used to better
# display the shortcut in the toast notification.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcut }</span> to undo.
zen-workspaces-close-all-unpinned-tabs-toast = Вкладки закрито! Скористайтеся <span>{ $shortcut }</span>, аби повернути їх.
zen-workspaces-close-all-unpinned-tabs-title =
.label = Clear
.tooltiptext = Close all unpinned tabs
.label = Очистити
.tooltiptext = Закрити всі відкріплені вкладки

View File

@@ -74,7 +74,7 @@ zen-settings-workspaces-description = Với các không gian làm việc, bạn
zen-settings-workspaces-enabled =
.label = Bật không gian làm việc
zen-settings-workspaces-hide-default-container-indicator =
.label = Ẩn chỉ báo vùng chứa mặc định trên thanh thẻ
.label = Ẩn container mặc định trên thanh công cụ
zen-key-unsaved = Lối tắt không an toàn! Xin hãy làm an toàn nó bằng cách ấn nút "Escape/Esc" sau khi nhập lại nó.
zen-key-conflict = Conflicts with { $group } -> { $shortcut }
pane-zen-theme-title = Cài đặt chủ đề
@@ -145,7 +145,7 @@ zen-urlbar-behavior-label = Hành vi thanh đường dẫn
zen-urlbar-behavior-normal =
.label = Bình thường
zen-urlbar-behavior-floating-on-type =
.label = Tách ra khi nhập
.label = Tách ra khi nhập chữ
zen-urlbar-behavior-float =
.label = Luôn luôn tách
pane-zen-CKS-title = Phím tắt
@@ -174,7 +174,7 @@ zenCKSOption-group-zen-split-view = Chế độ xem chia đôi
zenCKSOption-group-devTools = Công cụ nhà phát triển
zen-key-quick-restart = Khởi động lại nhanh
zen-window-new-shortcut = Cửa sổ mới
zen-tab-new-shortcut = Tab mới
zen-tab-new-shortcut = Thẻ mới
zen-key-redo = Hoàn tác
zen-restore-last-closed-tab-shortcut = Khôi phục lại thẻ gần nhất đã đóng
zen-location-open-shortcut = Mở đường dẫn

View File

@@ -19,7 +19,7 @@ zen-folders-panel-change-folder-space =
zen-folders-panel-change-icon-folder =
.label = Đổi biểu tượng thư mục thẻ
zen-folders-unload-all-tooltip =
.tooltiptext = Unload active in this folder
.tooltiptext = Tắt các thẻ trong thư mục
zen-folders-unload-folder =
.label = Tải lại tất cả các thẻ
zen-folders-search-no-results = Không có thẻ nào trùng với tìm kiếm 🤔

View File

@@ -2,7 +2,7 @@
# 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-panel-ui-current-profile-text = hồ sơ hiện tại
zen-panel-ui-current-profile-text = Hồ sơ hiện tại
unified-extensions-description = Các tiện ích mở rộng được sử dụng để mang thêm tính năng vào { -brand-short-name }.
tab-context-zen-reset-pinned-tab =
.label = Đặt lại thẻ đã ghim
@@ -14,7 +14,7 @@ tab-context-zen-remove-essential =
.label = Loại ra khỏi thẻ thường trú
.accesskey = R
tab-context-zen-replace-pinned-url-with-current =
.label = Thay thế đường dường dẫn đã gim với hiện tại
.label = Thay thế đường dường dẫn đã ghim với hiện tại
.accesskey = C
zen-themes-corrupted = Thư mục chủ đề { -brand-short-name } của bạn đã bị hư, chúng đã được trả về thiết kế gốc.
zen-shortcuts-corrupted = Tệp phím tắt { -brand-short-name } của bạn đã bị hư. Chúng đã được trẻ về phím tắt gốc.
@@ -42,8 +42,8 @@ zen-library-sidebar-workspaces =
zen-library-sidebar-mods =
.label = Mods
zen-toggle-compact-mode-button =
.label = Compact Mode
.tooltiptext = Toggle Compact Mode
.label = Chế độ tối giản
.tooltiptext = Bật chế độ tối giản
# note: Do not translate the "<br/>" tags in the following string
@@ -55,42 +55,42 @@ zen-icons-picker-emoji =
.label = Biểu cảm
zen-icons-picker-svg =
.label = Biểu tượng
urlbar-search-mode-zen_actions = Actions
zen-site-data-settings = Settings
zen-generic-manage = Manage
zen-generic-more = More
zen-generic-next = Next
urlbar-search-mode-zen_actions = Hành động
zen-site-data-settings = Thiết lập
zen-generic-manage = Quản lý
zen-generic-more = Thêm
zen-generic-next = Tiếp
# 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-protections-enabled = Enabled
zen-site-data-protections-disabled = Disabled
zen-site-data-setting-cross-site = Cross-Site cookie
zen-site-data-setting-allow = Đã cho phép
zen-site-data-setting-block = Đã chặn
zen-site-data-protections-enabled = Đã tắt
zen-site-data-protections-disabled = Đã bật
zen-site-data-setting-cross-site = Cookie liên trang web
zen-site-data-security-info-extension =
.label = Extension
.label = Tiện ích mở rộng (Extensions)
zen-site-data-security-info-secure =
.label = Secure
.label = Đã bảo mật
zen-site-data-security-info-not-secure =
.label = Not Secure
.label = Chưa bảo mật
zen-site-data-manage-addons =
.label = Manage Extensions
.label = Quản lý tiện ích mở rộng (Extensions)
zen-site-data-get-addons =
.label = Add Extensions
.label = Thêm tiện ích mở rộng (Extensions)
zen-site-data-site-settings =
.label = All Site Settings
.label = Cài đặt tổng quan của trang web
zen-site-data-header-share =
.tooltiptext = Share This Page
.tooltiptext = Chia sẻ trang
zen-site-data-header-reader-mode =
.tooltiptext = Enter Reader Mode
.tooltiptext = Bật chế độ đọc
zen-site-data-header-screenshot =
.tooltiptext = Take a Screenshot
.tooltiptext = Chụp màn hình
zen-site-data-header-bookmark =
.tooltiptext = Bookmark This Page
.tooltiptext = Lưu (bookmark) trang này
zen-urlbar-copy-url-button =
.tooltiptext = Copy URL
zen-site-data-setting-site-protection = Tracking Protection
.tooltiptext = Sao chép đường dẫn (URL)
zen-site-data-setting-site-protection = Phòng chống theo dõi
# Section: Feature callouts
zen-site-data-panel-feature-callout-title = A new home for add-ons, permissions, and more
zen-site-data-panel-feature-callout-subtitle = Click the icon to manage site settings, view security info, access extensions, and perform common actions.
zen-site-data-panel-feature-callout-title = Diện mạo mới cho add-ons, quyền truy cập và nhiều hơn nữa
zen-site-data-panel-feature-callout-subtitle = Bấm vào biểu tượng để quản lý các thiết lập của trang web, kiểm tra thông tin bảo mật, quyền truy cập của các tiện ích và thực thiện các tác vụ cơ bản.

View File

@@ -18,7 +18,7 @@ zen-toolbar-context-compact-mode-hide-both =
.label = Ẩn cả hai
.accesskey = H
zen-toolbar-context-new-folder =
.label = New Folder
.label = Thư mục mới
.accesskey = N
sidebar-zen-expand =
.label = Mở rộng thanh bên
@@ -33,7 +33,7 @@ tabbrowser-unload-tab-button =
tabbrowser-reset-pin-button =
.tooltiptext =
{ $tabCount ->
[one] Tải lại và gim thẻ
*[other] Tải lại và gim { $tabCount } thẻ
[one] Tải lại và ghim thẻ
*[other] Tải lại và ghim { $tabCount } thẻ
}
tab-reset-pin-label = Quay trở lại đường dẫn đã ghim

View File

@@ -14,13 +14,13 @@ zen-welcome-initial-essentials-title = Những thẻ quan trọng của bạn, l
zen-welcome-initial-essentials-description-1 = Cho dù bạn có mở bao nhiêu, những thẻ quan trọng nhất của bạn luôn dễ dàng truy cập, luôn luôn trong tầm tay.
zen-welcome-initial-essentials-description-2 = Thẻ thường trú sẽ luôn luôn ở đó, trên tất cả không gian làm việc của bạn.
zen-welcome-workspace-colors-title = Không gian làm việc của bạn, màu sắc của bạn
zen-welcome-workspace-colors-description = Cá nhân của trình duyệt của bạn, cho mỗi không gian làm việc một màu sắc đặc.
zen-welcome-workspace-colors-description = Cá nhân a trình duyệt của bạn, cho mỗi không gian làm việc một màu sắc đặc trưng.
zen-welcome-start-browsing-title =
Sẵn sàng chưa?<br/>
Bắt đầu thôi nào!
zen-welcome-start-browsing-description-1 = Mọi thứ đã sẵn sàng. Nhấn nút bên dưới để bắt đầu lướt web với { -brand-short-name }.
zen-welcome-start-browsing = Bắt đầu nào!
zen-welcome-default-search-title = Your Default Search Engine
zen-welcome-default-search-title = Công cụ tìm kiếm mặc định của bạn là?
zen-welcome-default-search-description = Hãy chọn công cụ tìm kiếm mặc đinh. Bạn luôn có thể đổi nó sau này!
zen-welcome-skip-button = Bỏ qua
zen-welcome-finished = Trình duyệt của bạn đã được thiết lập thành công!

View File

@@ -8,7 +8,7 @@ zen-panel-ui-workspaces-create =
zen-panel-ui-folder-create =
.label = Tạo thư mục thẻ
zen-panel-ui-new-empty-split =
.label = New Split
.label = Chia không gian
zen-workspaces-panel-context-delete =
.label = Xóa không gian làm việc
.accesskey = D
@@ -19,7 +19,7 @@ zen-workspaces-panel-change-icon =
zen-workspaces-panel-context-default-profile =
.label = Cài đặt hồ sơ
zen-workspaces-panel-unload =
.label = Unload Space
.label = Tắt tất cả các trang web trong không gian làm việc
zen-workspaces-how-to-reorder-title = Cách sắp xếp thứ tự của các không gian làm việc
zen-workspaces-how-to-reorder-desc = Kéo và thả các biểu tượng của không gian làm việc ở dưới thanh bên để sắp xếp thứ tự của chúng
zen-workspaces-change-theme =
@@ -59,7 +59,7 @@ zen-workspaces-delete-workspace-title = Delete Workspace?
zen-workspaces-delete-workspace-body = Bạn có chắc là bạn muốn xóa { $name }? Thao tác này sẽ không được hoàn lại.
# Note that the html tag MUST not be changed or removed, as it is used to better
# display the shortcut in the toast notification.
zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcut }</span> to undo.
zen-workspaces-close-all-unpinned-tabs-toast = Thẻ đã đóng! Bấm <span>{ $shortcut }</span> để hoàn .
zen-workspaces-close-all-unpinned-tabs-title =
.label = Clear
.tooltiptext = Close all unpinned tabs
.label = Dọn sạch
.tooltiptext = Tắt tất cả các thẻ không ghim

View File

@@ -23,7 +23,8 @@
value: true
- name: media.videocontrols.picture-in-picture.urlbar-button.enabled
value: false
value: true
locked: true
# Enable private suggestions
- name: browser.search.suggest.enabled

View File

@@ -57,3 +57,6 @@
- name: zen.view.shift-down-site-on-hover
value: false
- name: zen.view.show-clear-tabs-button
value: true

View File

@@ -26,6 +26,12 @@
- name: zen.urlbar.enable-overrides
value: false
- name: zen.urlbar.single-toolbar-show-copy-url
value: true
- name: zen.urlbar.show-pip-button
value: false
# Mark: Zen suggestions controls
- name: zen.urlbar.suggestions.quick-actions

View File

@@ -34,3 +34,6 @@
- name: zen.tabs.open-pinned-in-new-tab
value: true
- name: zen.tabs.close-on-back-with-no-history
value: true

3
src/.hgignore Normal file
View File

@@ -0,0 +1,3 @@
# 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/.

View File

@@ -1,8 +1,8 @@
diff --git a/Cargo.lock b/Cargo.lock
index c079ef11880c5338c4498a0e5b3eb4cf4bfb6e02..ecd06b05381be740197c07c8cf0743dc882727f5 100644
index 4386724a82baa72678b7228ef3af9fabc2da318e..01f7ac42ff96f8f96984537f19bde4bbc8cd8d72 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4069,8 +4069,6 @@ dependencies = [
@@ -4167,8 +4167,6 @@ dependencies = [
[[package]]
name = "mime_guess"
version = "2.0.4"

View File

@@ -1,8 +1,8 @@
diff --git a/Cargo.toml b/Cargo.toml
index 2331ff5733d39e26c0a16301cb83d46ca970f632..777dbd5fb8546466e4a349772ccba254c7ffd691 100644
index 772a74e7439d87e9c5486abcf003617240190710..522b5459b30b943832369ff7a73755ad4c7d8140 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -224,6 +224,8 @@ moz_asserts = { path = "mozglue/static/rust/moz_asserts" }
@@ -227,6 +227,8 @@ moz_asserts = { path = "mozglue/static/rust/moz_asserts" }
# Workaround for https://github.com/rust-lang/cargo/issues/11232
rure = { path = "third_party/rust/rure" }

View File

@@ -0,0 +1,12 @@
diff --git a/browser/actors/EncryptedMediaParent.sys.mjs b/browser/actors/EncryptedMediaParent.sys.mjs
index 9d3d3db9761cf5b2fde1f70992e82b1733241863..3dc64dc395d5237bf2c290cb8588cf467fb8729a 100644
--- a/browser/actors/EncryptedMediaParent.sys.mjs
+++ b/browser/actors/EncryptedMediaParent.sys.mjs
@@ -200,6 +200,7 @@ export class EncryptedMediaParent extends JSWindowActorParent {
"drmContentPlaying",
aBrowser
)
+ || true // zen: We have some issues with this currently, so never show it
) {
return;
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
index 80fd2177c7112c958ff51bbf7a18ebea39e50fbf..24f62810901dc558e25ee874bd49736bd64fd358 100644
index 4ff6ae4d6f272936f0aa1c80a488df16159b42f2..85e4d7bf500603fcd5724658e96c7fd0a04432d3 100644
--- a/browser/actors/WebRTCParent.sys.mjs
+++ b/browser/actors/WebRTCParent.sys.mjs
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {

View File

@@ -1,26 +1,26 @@
diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js
index 754ce380ed233eb8764af07af3c8dc95d3f39d5c..29864ab59819271b7319b273c08bdc2736d40c93 100644
index f33a300eb0eed74e286da24919ad3e8505f632c3..9f400e887424693d0ecceb9db79fccf2bd5a757d 100644
--- a/browser/base/content/browser-addons.js
+++ b/browser/base/content/browser-addons.js
@@ -1071,7 +1071,7 @@ var gXPInstallObserver = {
@@ -1069,7 +1069,7 @@ var gXPInstallObserver = {
persistent: true,
hideClose: true,
popupOptions: {
- position: "bottomright topright",
+ position: gZenUIManager.panelUIPosition,
+ position: gZenUIManager.panelUIPosition(),
},
};
@@ -1280,7 +1280,7 @@ var gXPInstallObserver = {
@@ -1279,7 +1279,7 @@ var gXPInstallObserver = {
hideClose: true,
timeout: Date.now() + 30000,
popupOptions: {
- position: "bottomright topright",
+ position: gZenUIManager.panelUIPosition,
+ position: gZenUIManager.panelUIPosition(),
},
};
@@ -2212,7 +2212,7 @@ var gUnifiedExtensions = {
@@ -2211,7 +2211,7 @@ var gUnifiedExtensions = {
// If the new ID is not added in NOTIFICATION_IDS, consider handling the case
// in the "PopupNotificationsBeforeAnchor" handler elsewhere in this file.
getPopupAnchorID(aBrowser, aWindow) {
@@ -29,7 +29,7 @@ index 754ce380ed233eb8764af07af3c8dc95d3f39d5c..29864ab59819271b7319b273c08bdc27
const attr = anchorID + "popupnotificationanchor";
if (!aBrowser[attr]) {
@@ -2223,7 +2223,7 @@ var gUnifiedExtensions = {
@@ -2222,7 +2222,7 @@ var gUnifiedExtensions = {
anchorID
// Anchor on the toolbar icon to position the popup right below the
// button.
@@ -38,7 +38,7 @@ index 754ce380ed233eb8764af07af3c8dc95d3f39d5c..29864ab59819271b7319b273c08bdc27
}
return anchorID;
@@ -2516,11 +2516,7 @@ var gUnifiedExtensions = {
@@ -2646,11 +2646,7 @@ var gUnifiedExtensions = {
// Lazy load the unified-extensions-panel panel the first time we need to
// display it.
if (!this._panel) {
@@ -51,25 +51,24 @@ index 754ce380ed233eb8764af07af3c8dc95d3f39d5c..29864ab59819271b7319b273c08bdc27
let customizationArea = this._panel.querySelector(
"#unified-extensions-area"
);
@@ -2570,7 +2566,7 @@ var gUnifiedExtensions = {
// The button should directly open `about:addons` when the user does not
// have any active extensions listed in the unified extensions panel.
- if (!this.hasExtensionsInPanel()) {
+ if (!this.hasExtensionsInPanel() && false) {
let viewID;
if (
Services.prefs.getBoolPref("extensions.getAddons.showPane", true) &&
@@ -2615,7 +2611,7 @@ var gUnifiedExtensions = {
@@ -2703,6 +2699,7 @@ var gUnifiedExtensions = {
// and no alternative content is available for display in the panel.
const policies = this.getActivePolicies();
if (
+ false &&
policies.length &&
!this.hasExtensionsInPanel(policies) &&
!this.isPrivateWindowMissingExtensionsWithoutPBMAccess() &&
@@ -2743,7 +2740,7 @@ var gUnifiedExtensions = {
this.recordButtonTelemetry(reason || "extensions_panel_showing");
this.ensureButtonShownBeforeAttachingPanel(panel);
PanelMultiView.openPopup(panel, this._button, {
- position: "bottomright topright",
+ position: gZenUIManager.panelUIPosition,
+ position: gZenUIManager.panelUIPosition(panel, this._button),
triggerEvent: aEvent,
});
}
@@ -2802,18 +2798,20 @@ var gUnifiedExtensions = {
@@ -2930,18 +2927,20 @@ var gUnifiedExtensions = {
this._maybeMoveWidgetNodeBack(widgetId);
}

View File

@@ -1,8 +1,19 @@
diff --git a/browser/base/content/browser-commands.js b/browser/base/content/browser-commands.js
index 74aae01ddcdc4b6460ebbe174355ca129a89010b..52dd4e6aa49929394ed6afa6b25f4ee4954b8b94 100644
index 939ca497b882b3f4200141ba1b6764fb5c846f45..779cba5ff3df856a246321a36caa3725c054a314 100644
--- a/browser/base/content/browser-commands.js
+++ b/browser/base/content/browser-commands.js
@@ -317,6 +317,10 @@ var BrowserCommands = {
@@ -14,6 +14,10 @@ var BrowserCommands = {
const where = BrowserUtils.whereToOpenLink(aEvent, false, true);
if (where == "current") {
+ if (!gBrowser.webNavigation.canGoBack && gZenCommonActions.shouldCloseTabOnBack()) {
+ gBrowser.removeTab(gBrowser.selectedTab);
+ return;
+ }
try {
gBrowser.goBack();
} catch (ex) {}
@@ -315,6 +319,10 @@ var BrowserCommands = {
}
}
@@ -13,7 +24,7 @@ index 74aae01ddcdc4b6460ebbe174355ca129a89010b..52dd4e6aa49929394ed6afa6b25f4ee4
// A notification intended to be useful for modular peformance tracking
// starting as close as is reasonably possible to the time when the user
// expressed the intent to open a new tab. Since there are a lot of
@@ -401,6 +405,11 @@ var BrowserCommands = {
@@ -399,6 +407,11 @@ var BrowserCommands = {
return;
}
@@ -25,7 +36,7 @@ index 74aae01ddcdc4b6460ebbe174355ca129a89010b..52dd4e6aa49929394ed6afa6b25f4ee4
// Keyboard shortcuts that would close a tab that is pinned select the first
// unpinned tab instead.
if (
@@ -408,8 +417,8 @@ var BrowserCommands = {
@@ -406,8 +419,8 @@ var BrowserCommands = {
(event.ctrlKey || event.metaKey || event.altKey) &&
gBrowser.selectedTab.pinned
) {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-fullScreenAndPointerLock.js b/browser/base/content/browser-fullScreenAndPointerLock.js
index b41449d4c4bc373a4c9cf449c0bb370bfdbc20d6..f1166929397dd39b7f44bd9cb0d62a45d67f0e1d 100644
index bef746dc594ad974c91075cf3657c199f8f8830f..bb671341b6715c42df76f7298ba55e1fac73f33b 100644
--- a/browser/base/content/browser-fullScreenAndPointerLock.js
+++ b/browser/base/content/browser-fullScreenAndPointerLock.js
@@ -427,10 +427,10 @@ var FullScreen = {
@@ -424,10 +424,10 @@ var FullScreen = {
gNavToolbox.classList.toggle("fullscreen-with-menubar", shiftSize > 0);
let transform = shiftSize > 0 ? `translateY(${shiftSize}px)` : "";

View File

@@ -0,0 +1,13 @@
diff --git a/browser/base/content/browser-gestureSupport.js b/browser/base/content/browser-gestureSupport.js
index a28d54bf72c0e6495b9586f220d1859aac794936..66154668b9f85ffbaacea1e8351370659260227b 100644
--- a/browser/base/content/browser-gestureSupport.js
+++ b/browser/base/content/browser-gestureSupport.js
@@ -832,7 +832,7 @@ var gHistorySwipeAnimation = {
* @return true if there is a previous page in history, false otherwise.
*/
canGoBack: function HSA_canGoBack() {
- return gBrowser.webNavigation.canGoBack;
+ return gBrowser.webNavigation.canGoBack || gZenCommonActions.shouldCloseTabOnBack();
},
/**

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 32b67f846b9942ad3da4276bb8748fee915eb485..529ef8895d2ab01b4cbebd2992fd3b64225e42b0 100644
index b4b79e7fb3228ba91bd8afa08659be0d88883725..b4801e2a3076139622d58f81943e61cd61ee1828 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -31,6 +31,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -10,7 +10,21 @@ index 32b67f846b9942ad3da4276bb8748fee915eb485..529ef8895d2ab01b4cbebd2992fd3b64
DevToolsSocketStatus:
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
@@ -2293,6 +2294,8 @@ var XULBrowserWindow = {
@@ -822,7 +823,12 @@ function UpdateBackForwardCommands(aWebNavigation) {
var backDisabled = backCommand.hasAttribute("disabled");
var forwardDisabled = forwardCommand.hasAttribute("disabled");
- if (backDisabled == aWebNavigation.canGoBack) {
+ var canGoBack = aWebNavigation.canGoBack;
+ if (!canGoBack) {
+ canGoBack = gZenCommonActions.shouldCloseTabOnBack();
+ }
+
+ if (backDisabled == canGoBack) {
if (backDisabled) {
backCommand.removeAttribute("disabled");
} else {
@@ -2298,6 +2304,8 @@ var XULBrowserWindow = {
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
@@ -19,7 +33,7 @@ index 32b67f846b9942ad3da4276bb8748fee915eb485..529ef8895d2ab01b4cbebd2992fd3b64
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) {
@@ -3795,7 +3798,7 @@ function warnAboutClosingWindow() {
@@ -3809,7 +3817,7 @@ function warnAboutClosingWindow() {
if (!isPBWindow && !toolbar.visible) {
return gBrowser.warnAboutClosingTabs(
@@ -28,7 +42,7 @@ index 32b67f846b9942ad3da4276bb8748fee915eb485..529ef8895d2ab01b4cbebd2992fd3b64
gBrowser.closingTabsEnum.ALL
);
}
@@ -3835,7 +3838,7 @@ function warnAboutClosingWindow() {
@@ -3849,7 +3857,7 @@ function warnAboutClosingWindow() {
return (
isPBWindow ||
gBrowser.warnAboutClosingTabs(
@@ -37,7 +51,7 @@ index 32b67f846b9942ad3da4276bb8748fee915eb485..529ef8895d2ab01b4cbebd2992fd3b64
gBrowser.closingTabsEnum.ALL
)
);
@@ -3860,7 +3863,7 @@ function warnAboutClosingWindow() {
@@ -3874,7 +3882,7 @@ function warnAboutClosingWindow() {
AppConstants.platform != "macosx" ||
isPBWindow ||
gBrowser.warnAboutClosingTabs(
@@ -46,7 +60,7 @@ index 32b67f846b9942ad3da4276bb8748fee915eb485..529ef8895d2ab01b4cbebd2992fd3b64
gBrowser.closingTabsEnum.ALL
)
);
@@ -4782,6 +4785,9 @@ var ConfirmationHint = {
@@ -4796,6 +4804,9 @@ var ConfirmationHint = {
MozXULElement.insertFTLIfNeeded("toolkit/branding/brandings.ftl");
MozXULElement.insertFTLIfNeeded("browser/confirmationHints.ftl");
document.l10n.setAttributes(this._message, messageId, options.l10nArgs);

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js
index 79b4f6f8fb2f7dd8784920038784e6bb0c967e2d..1f3f4991b3ba7c00516e9708e89e8f95db25a36a 100644
index 3bd7b8f6025a7df4ce5cfb66916125bce9ef3991..c408ef829b7540aec72b2307e5d4bfa34109d6cd 100644
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -252,6 +252,8 @@ var StarUI = {
@@ -249,6 +249,8 @@ var StarUI = {
});
}
@@ -11,7 +11,7 @@ index 79b4f6f8fb2f7dd8784920038784e6bb0c967e2d..1f3f4991b3ba7c00516e9708e89e8f95
let onPanelReady = fn => {
let target = this.panel;
if (target.parentNode) {
@@ -303,6 +305,21 @@ var StarUI = {
@@ -300,6 +302,21 @@ var StarUI = {
}
},
@@ -33,3 +33,11 @@ index 79b4f6f8fb2f7dd8784920038784e6bb0c967e2d..1f3f4991b3ba7c00516e9708e89e8f95
removeBookmarkButtonCommand: function SU_removeBookmarkButtonCommand() {
this._removeBookmarksOnPopupHidden = true;
this.panel.hidePopup();
@@ -1797,6 +1814,7 @@ var BookmarkingUI = {
document.getElementById("context-bookmarkpage"),
PanelMultiView.getViewNode(document, "panelMenuBookmarkThisPage"),
document.getElementById("pageAction-panel-bookmark"),
+ document.getElementById("zen-site-data-icon-button"),
]) {
if (!element) {
// The page action panel element may not have been created yet.

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js
index 65354e0ad3097e10de72f36e257c94472524baf7..866cf5672f30f81a1d8e061c9af0c1af5fbb5fb2 100644
index 8369e546866aa313e62f808acb8d51afa8da4f9b..7a4b20dd5922425cebfac542893a52cd68a26449 100644
--- a/browser/base/content/browser-siteIdentity.js
+++ b/browser/base/content/browser-siteIdentity.js
@@ -453,11 +453,6 @@ var gIdentityHandler = {
@@ -451,11 +451,6 @@ var gIdentityHandler = {
// avoid a pretty ugly transition. Also hide it even
// if the update resulted in no site data, to keep the
// illusion that clicking the button had an effect.
@@ -14,7 +14,7 @@ index 65354e0ad3097e10de72f36e257c94472524baf7..866cf5672f30f81a1d8e061c9af0c1af
let baseDomain = SiteDataManager.getBaseDomainFromHost(this._uri.host);
if (SiteDataManager.promptSiteDataRemoval(window, [baseDomain])) {
@@ -834,7 +829,7 @@ var gIdentityHandler = {
@@ -832,7 +827,7 @@ var gIdentityHandler = {
// This is a secure internal Firefox page.
this._identityBox.className = "chromeUI";
let brandBundle = document.getElementById("bundle_brand");
@@ -23,7 +23,7 @@ index 65354e0ad3097e10de72f36e257c94472524baf7..866cf5672f30f81a1d8e061c9af0c1af
} else if (this._pageExtensionPolicy) {
// This is a WebExtension page.
this._identityBox.className = "extensionPage";
@@ -1163,6 +1158,12 @@ var gIdentityHandler = {
@@ -1161,6 +1156,12 @@ var gIdentityHandler = {
}
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index ffddea280e2edffa2531b4b129489c2be0e2c3d2..f03db9e2db0dec06f997740337f28e76a08a3bdb 100644
index 246d23a77960d25f78b163429a3ed28c7180ccd7..1c26485d8464413689767c8a38aadbcadcecae4d 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -19,6 +19,7 @@

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
index 69b83857f40bab6a7298c1416989df2d929d78c1..4ac9f02eb31f58a72d4c58c239ebeadcb66d1e16 100644
index 78030413c4125362e056a8ec249b597292be050b..90fc935e105d594cd4cc925c70c29b18b8dffccd 100644
--- a/browser/base/content/main-popupset.inc.xhtml
+++ b/browser/base/content/main-popupset.inc.xhtml
@@ -208,6 +208,10 @@
@@ -21,7 +21,7 @@ index 69b83857f40bab6a7298c1416989df2d929d78c1..4ac9f02eb31f58a72d4c58c239ebeadc
</panel>
</html:template>
@@ -615,6 +620,8 @@
@@ -628,6 +633,8 @@
#include popup-notifications.inc.xhtml

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/navigator-toolbox.js b/browser/base/content/navigator-toolbox.js
index 413bad2a62058a1c434d6a44e927e44eb397289d..472eab5d3bca2bc665920707a71105167cbe75ec 100644
index 7b776b15d52367a008ce6bf53dcfcbbe007b7453..d9a3404905b73db7c8f202ab166d5f3c625351f6 100644
--- a/browser/base/content/navigator-toolbox.js
+++ b/browser/base/content/navigator-toolbox.js
@@ -8,7 +8,7 @@
@@ -6,7 +6,7 @@
document.addEventListener(
"DOMContentLoaded",
() => {
@@ -11,25 +11,7 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..472eab5d3bca2bc665920707a7110516
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(
@@ -185,6 +185,7 @@ document.addEventListener(
#reload-button ,
#urlbar-go-button,
#reader-mode-button,
@@ -37,7 +19,7 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..472eab5d3bca2bc665920707a7110516
#picture-in-picture-button,
#urlbar-zoom-button,
#star-button-box,
@@ -208,6 +209,7 @@ document.addEventListener(
@@ -206,6 +207,7 @@ document.addEventListener(
case "vertical-tabs-newtab-button":
case "tabs-newtab-button":
case "new-tab-button":
@@ -45,7 +27,7 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..472eab5d3bca2bc665920707a7110516
gBrowser.handleNewTabMiddleClick(element, event);
break;
@@ -317,7 +319,7 @@ document.addEventListener(
@@ -315,7 +317,7 @@ document.addEventListener(
#pageActionButton,
#downloads-button,
#fxa-toolbar-menu-button,
@@ -54,7 +36,7 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..472eab5d3bca2bc665920707a7110516
#library-button
`);
if (!element) {
@@ -396,7 +398,7 @@ document.addEventListener(
@@ -394,7 +396,7 @@ document.addEventListener(
gSync.toggleAccountPanel(element, event);
break;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
index b4fe996f9685a085c14324a35a1d51e2fed569b7..c83d5e9bf92f8f2e3d96b121ba3b758dd124393b 100644
index 259b440375c7e84d373a134fea20cdbc1c1bae4b..a9ce22a2391b4ec0bf82ceedd35f4c9d9626bb28 100644
--- a/browser/base/content/nsContextMenu.sys.mjs
+++ b/browser/base/content/nsContextMenu.sys.mjs
@@ -1105,6 +1105,8 @@ export class nsContextMenu {
@@ -1104,6 +1104,8 @@ export class nsContextMenu {
!this.isSecureAboutPage()
);

View File

@@ -7,7 +7,6 @@
content/browser/ZenPreloadedScripts.js (../../zen/common/ZenPreloadedScripts.js)
content/browser/zen-sets.js (../../zen/common/zen-sets.js)
content/browser/ZenUIManager.mjs (../../zen/common/ZenUIManager.mjs)
content/browser/zen-components/ZenActorsManager.mjs (../../zen/common/ZenActorsManager.mjs)
content/browser/zen-components/ZenCommonUtils.mjs (../../zen/common/ZenCommonUtils.mjs)
content/browser/zen-components/ZenSessionStore.mjs (../../zen/common/ZenSessionStore.mjs)
content/browser/zen-components/ZenEmojisData.min.mjs (../../zen/common/emojis/ZenEmojisData.min.mjs)

View File

@@ -5,11 +5,10 @@
<panel id="zen-unified-site-data-panel"
role="group"
type="arrow"
noautofocus="true"
position="bottomright topright">
noautofocus="true">
<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
# 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"
@@ -55,6 +54,17 @@
<toolbarbutton id="zen-site-data-new-addon-button"
class="subviewbutton toolbarbutton-1" />
</vbox>
# We don't really use this, but again, to keep firefox happy
# in case they decide to change something for this specific
# empty state, we keep it on the DOM
# https://searchfox.org/firefox-main/rev/e613f4df351a21871cfeadf7d5b4043ffad157b1/browser/components/customizableui/content/panelUI.inc.xhtml#101-106
<vbox id="unified-extensions-empty-state" context="">
<!-- Shown when no extensions are listed. -->
<html:img src="chrome://browser/skin/addons/extensions-panel-empty-illustration.svg" loading="lazy" />
<html:h2 class="subview-subheader" />
<description />
</vbox>
</hbox>
# Keep this button on the DOM even though we hide it for ever,

View File

@@ -13,5 +13,4 @@
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspace.mjs"></script>
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspaces.mjs"></script>
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspacesSync.mjs"></script>
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenActorsManager.mjs"></script>
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenSessionStore.mjs"></script>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index 67b2806835baba3070f295d6b96f97077639995a..5f28e0073c893c57c1d6c37deaacf7b097351d60 100644
index f1cabb13ca4f86a2bafc1d93b7f882218a108eb2..2389b1addf24d17bd41fca65cfeb6f944479076d 100644
--- a/browser/components/BrowserGlue.sys.mjs
+++ b/browser/components/BrowserGlue.sys.mjs
@@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
@@ -10,7 +10,7 @@ index 67b2806835baba3070f295d6b96f97077639995a..5f28e0073c893c57c1d6c37deaacf7b0
AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs",
AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
ASRouter: "resource:///modules/asrouter/ASRouter.sys.mjs",
@@ -1458,7 +1459,7 @@ BrowserGlue.prototype = {
@@ -1452,7 +1453,7 @@ BrowserGlue.prototype = {
windowcount++;
let tabbrowser = win.gBrowser;
if (tabbrowser) {
@@ -19,7 +19,7 @@ index 67b2806835baba3070f295d6b96f97077639995a..5f28e0073c893c57c1d6c37deaacf7b0
}
}
@@ -1623,6 +1624,8 @@ BrowserGlue.prototype = {
@@ -1617,6 +1618,8 @@ BrowserGlue.prototype = {
} else if (profileDataVersion < APP_DATA_VERSION) {
lazy.ProfileDataUpgrader.upgrade(profileDataVersion, APP_DATA_VERSION);
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/asrouter/modules/FeatureCallout.sys.mjs b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
index 2a2c5a6fe903694abbac0be86c7b3c8adc1d0275..5571b827198474a2635a9bd968adbc8c96dbc353 100644
index 4ea9c9e88a1831dad7e42ebd8d0dd507102e8280..316aa626e525f05caac7f315e0ea7ae9d822b6af 100644
--- a/browser/components/asrouter/modules/FeatureCallout.sys.mjs
+++ b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
@@ -776,6 +776,7 @@ export class FeatureCallout {
@@ -777,6 +777,7 @@ export class FeatureCallout {
) {
return false;
}

View File

@@ -1,15 +1,13 @@
diff --git a/browser/components/customizableui/ToolbarContextMenu.sys.mjs b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
index 852cf2eee9113753fa0797be6dec80dcb9207703..93bb093e679320033a37b2af14e8e0e3c7621f94 100644
index 95621ae202378fb1ebceca5623a98b790b9eb5ff..fe6901f53f863bca20a514df0490499402d669ae 100644
--- a/browser/components/customizableui/ToolbarContextMenu.sys.mjs
+++ b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
@@ -242,8 +242,8 @@ export var ToolbarContextMenu = {
// Show/hide sidebar and vertical tabs menu items
let sidebarRevampEnabled = Services.prefs.getBoolPref("sidebar.revamp");
@@ -244,7 +244,7 @@ export var ToolbarContextMenu = {
let showSidebarActions =
- ["tabbrowser-tabs", "sidebar-button"].includes(toolbarItem?.id) ||
- toolbarItem?.localName == "toolbarspring";
+ (["tabbrowser-tabs", "sidebar-button"].includes(toolbarItem?.id) ||
+ toolbarItem?.localName == "toolbarspring") && false;
["tabbrowser-tabs", "sidebar-button"].includes(toolbarItem?.id) ||
toolbarItem?.localName == "toolbarspring" ||
- isTitlebarSpacer;
+ isTitlebarSpacer && false;
let toggleVerticalTabsItem = document.getElementById(
"toolbar-context-toggle-vertical-tabs"
);

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/customizableui/content/panelUI.inc.xhtml b/browser/components/customizableui/content/panelUI.inc.xhtml
index 85acb96a3deefed708ea768b2f163e7fd6480b97..bb3aed53758da7dafcfed4492acb0cbf2b80cd2f 100644
index 6cb22be6526b17d952a90fd414c49a31e9afde7a..84f8156e88027a79a40f14c77c83d6a2d19c8a72 100644
--- a/browser/components/customizableui/content/panelUI.inc.xhtml
+++ b/browser/components/customizableui/content/panelUI.inc.xhtml
@@ -132,7 +132,7 @@
@@ -139,7 +139,7 @@
<panel id="appMenu-notification-popup"
class="popup-notification-panel panel-no-padding"
type="arrow"

View File

@@ -1,18 +1,8 @@
diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js
index 7156397d597579f745ea20ae2b9327433a31c8ec..13b844a63e79e227c96faf153ee5908759306407 100644
index d6393080aa8aff6c0f7b2043fd408b6f6249d0c4..bf37b46c4743b7619393c730720204380635666a 100644
--- a/browser/components/customizableui/content/panelUI.js
+++ b/browser/components/customizableui/content/panelUI.js
@@ -518,8 +518,7 @@ const PanelUI = {
tempPanel.setAttribute("animate", "false");
}
tempPanel.setAttribute("context", "");
- document
- .getElementById(CustomizableUI.AREA_NAVBAR)
+ aAnchor.closest("toolbar")
.appendChild(tempPanel);
let multiView = document.createXULElement("panelmultiview");
@@ -610,10 +609,12 @@ const PanelUI = {
@@ -608,10 +608,12 @@ const PanelUI = {
if (hasKids && !this.navbar.hasAttribute("nonemptyoverflow")) {
this.navbar.setAttribute("nonemptyoverflow", "true");
this.overflowPanel.setAttribute("hasfixeditems", "true");
@@ -25,12 +15,12 @@ index 7156397d597579f745ea20ae2b9327433a31c8ec..13b844a63e79e227c96faf153ee59087
}
},
@@ -961,7 +962,7 @@ const PanelUI = {
@@ -959,7 +961,7 @@ const PanelUI = {
el.removeAttribute("data-lazy-l10n-id");
});
- this.notificationPanel.openPopup(anchor, "bottomright topright");
+ this.notificationPanel.openPopup(anchor, gZenUIManager.panelUIPosition);
+ this.notificationPanel.openPopup(anchor, gZenUIManager.panelUIPosition(this.notificationPanel, anchor));
},
_clearNotificationPanel() {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/extensions/parent/ext-browser.js b/browser/components/extensions/parent/ext-browser.js
index 89b0bb3b92c15b89499ffc6cf35dcee7ebb89e48..327afaea3821cdca8d7f58bfaa65c7ce3dbfa7a3 100644
index 2488267f4be5142bcacf984635d9e9ecdb5f02e9..03127808b3cae28850cc276fac0f1acbca85d326 100644
--- a/browser/components/extensions/parent/ext-browser.js
+++ b/browser/components/extensions/parent/ext-browser.js
@@ -354,6 +354,7 @@ class TabTracker extends TabTrackerBase {
@@ -18,7 +18,7 @@ index 89b0bb3b92c15b89499ffc6cf35dcee7ebb89e48..327afaea3821cdca8d7f58bfaa65c7ce
this._tabs.set(nativeTab, id);
if (nativeTab.linkedBrowser) {
@@ -1271,6 +1273,10 @@ class TabManager extends TabManagerBase {
@@ -1273,6 +1275,10 @@ class TabManager extends TabManagerBase {
}
canAccessTab(nativeTab) {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/places/content/browserPlacesViews.js b/browser/components/places/content/browserPlacesViews.js
index ee6050d411df009d8b61e49d7fdaba79f1bc5db1..0149528329dad3d48449175a35d96d3ed3a3058e 100644
index bbfbe9c703dff25bf939369f5b99cdaa76a5ae24..c28688d488960c1de73baf4c0e69b9f8401e4226 100644
--- a/browser/components/places/content/browserPlacesViews.js
+++ b/browser/components/places/content/browserPlacesViews.js
@@ -330,12 +330,23 @@ class PlacesViewBase {
@@ -328,12 +328,23 @@ class PlacesViewBase {
this._cleanPopup(aPopup);
@@ -29,7 +29,7 @@ index ee6050d411df009d8b61e49d7fdaba79f1bc5db1..0149528329dad3d48449175a35d96d3e
this._insertNewItemToPopup(child, fragment);
}
aPopup.insertBefore(fragment, aPopup._endMarker);
@@ -393,6 +404,7 @@ class PlacesViewBase {
@@ -391,6 +402,7 @@ class PlacesViewBase {
"scheme",
PlacesUIUtils.guessUrlSchemeForUI(aPlacesNode.uri)
);
@@ -37,7 +37,7 @@ index ee6050d411df009d8b61e49d7fdaba79f1bc5db1..0149528329dad3d48449175a35d96d3e
} else if (PlacesUtils.containerTypes.includes(type)) {
element = document.createXULElement("menu");
element.setAttribute("container", "true");
@@ -980,25 +992,33 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1014,25 +1026,33 @@ class PlacesToolbar extends PlacesViewBase {
this._rootElt.firstChild.remove();
}
@@ -82,7 +82,7 @@ index ee6050d411df009d8b61e49d7fdaba79f1bc5db1..0149528329dad3d48449175a35d96d3e
);
++startIndex;
if (elt.localName != "toolbarseparator") {
@@ -1006,15 +1026,12 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1040,15 +1060,12 @@ class PlacesToolbar extends PlacesViewBase {
}
}
if (!elt) {
@@ -101,7 +101,7 @@ index ee6050d411df009d8b61e49d7fdaba79f1bc5db1..0149528329dad3d48449175a35d96d3e
});
});
@@ -1024,7 +1041,7 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1058,7 +1075,7 @@ class PlacesToolbar extends PlacesViewBase {
let fragment = document.createDocumentFragment();
for (let i = startIndex; i < limit; ++i) {
@@ -110,7 +110,7 @@ index ee6050d411df009d8b61e49d7fdaba79f1bc5db1..0149528329dad3d48449175a35d96d3e
}
await new Promise(resolve => window.requestAnimationFrame(resolve));
if (!this._isAlive) {
@@ -1086,6 +1103,8 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1120,6 +1137,8 @@ class PlacesToolbar extends PlacesViewBase {
"scheme",
PlacesUIUtils.guessUrlSchemeForUI(aChild.uri)
);
@@ -119,7 +119,7 @@ index ee6050d411df009d8b61e49d7fdaba79f1bc5db1..0149528329dad3d48449175a35d96d3e
}
}
@@ -2234,7 +2253,7 @@ this.PlacesPanelview = class PlacesPanelview extends PlacesViewBase {
@@ -2268,7 +2287,7 @@ this.PlacesPanelview = class PlacesPanelview extends PlacesViewBase {
PlacesUIUtils.guessUrlSchemeForUI(placesNode.uri)
);
element.setAttribute("label", PlacesUIUtils.getBestTitle(placesNode));

View File

@@ -1,10 +1,11 @@
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
index a786155d80a9f1f09d209f2da11437ee2d662739..2e422b48b452698275118d336d1b16af6a221577 100644
index 65efb0666785cc79e58015e19ec55216bf4ec9c4..95941c52ffd4c9ee36f584413fb96d59721113db 100644
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -30,3 +30,5 @@ browser.jar:
content/browser/preferences/widgets/setting-control.mjs (widgets/setting-control/setting-control.mjs)
content/browser/preferences/widgets/setting-group.mjs (widgets/setting-group/setting-group.mjs)
content/browser/preferences/widgets/setting-group.css (widgets/setting-group/setting-group.css)
@@ -33,3 +33,5 @@ browser.jar:
content/browser/preferences/widgets/setting-pane.mjs (widgets/setting-pane/setting-pane.mjs)
content/browser/preferences/widgets/security-privacy-card.mjs (widgets/security-privacy/security-privacy-card/security-privacy-card.mjs)
content/browser/preferences/widgets/security-privacy-card.css (widgets/security-privacy/security-privacy-card/security-privacy-card.css)
+
+ content/browser/preferences/zen-settings.js
\ No newline at end of file

View File

@@ -1,20 +1,8 @@
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
index 891cf7108cf4606c99a902afa420e744b9690b87..2bdbc1f0b6ac2c883dcbd706aed0615fad5e0760 100644
index ff577c035ff6128f7ae948bc810082c92b3a624c..40f94fff53c63bdff28eaa68f9b0736d53c5b4f8 100644
--- a/browser/components/preferences/main.inc.xhtml
+++ b/browser/components/preferences/main.inc.xhtml
@@ -29,6 +29,11 @@
<vbox id="startupPageBox">
<checkbox id="browserRestoreSession"
data-l10n-id="startup-restore-windows-and-tabs"/>
+ <vbox class="indent">
+ <checkbox id="zenWorkspaceContinueWhereLeftOff"
+ data-l10n-id="zen-workspace-continue-where-left-off"
+ preference="zen.workspaces.continue-where-left-off"/>
+ </vbox>
#ifdef XP_WIN
<hbox id="windowsLaunchOnLoginBox" align="center" hidden="true">
<checkbox id="windowsLaunchOnLogin"
@@ -189,7 +194,8 @@
@@ -141,7 +141,8 @@
<!-- Browser layout -->
<groupbox data-category="paneGeneral"
data-subcategory="layout"
@@ -24,7 +12,7 @@ index 891cf7108cf4606c99a902afa420e744b9690b87..2bdbc1f0b6ac2c883dcbd706aed0615f
<label><html:h2 data-l10n-id="browser-layout-header"/></label>
<radiogroup id="browserLayoutRadioGroup" preference="sidebar.verticalTabs">
<radio id="browserLayoutHorizontalTabs" data-l10n-id="browser-layout-horizontal-tabs" value="false"/>
@@ -420,6 +426,7 @@
@@ -346,6 +347,7 @@
languages-customize-add.label,
" />
</hbox>

View File

@@ -1,8 +1,20 @@
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index 259bc260328af1b1f2b95866e7cf92dec341a4b0..3cebff51774b2542a8d4d888aa99dc10929c80be 100644
index 46283d3eacfea0f419afa3bdfd2a51e411502a20..4fe229706eb0145a21042b8b3cca323682e89e76 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -443,7 +443,7 @@ function getBundleForLocales(newLocales) {
@@ -1117,6 +1117,11 @@ let SETTINGS_CONFIG = {
id: "browserRestoreSession",
l10nId: "startup-restore-windows-and-tabs",
},
+ {
+ id: "zenWorkspaceContinueWhereLeftOff",
+ l10nId: "zen-workspace-continue-where-left-off",
+ control: "moz-checkbox",
+ },
{
id: "windowsLaunchOnLogin",
l10nId: "windows-launch-on-login",
@@ -1611,7 +1616,7 @@ function getBundleForLocales(newLocales) {
])
);
return new Localization(

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 1fb8a954f61e89736b369f5fa01bb4f89fff16ad..3030c32cb66529f14e575428654778abd312dfd8 100644
index c949c1800cb4c200c273c4019a61553b0e236994..0846ab1a348d3c5904e967aeb36eb846ba3cffa9 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -117,6 +117,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {
@@ -10,7 +10,7 @@ index 1fb8a954f61e89736b369f5fa01bb4f89fff16ad..3030c32cb66529f14e575428654778ab
],
resizeCallback: async ({ title, frame }) => {
// Search within main document and highlight matched keyword.
@@ -196,6 +197,10 @@ function init_all() {
@@ -224,6 +225,10 @@ function init_all() {
register_module("paneSearch", gSearchPane);
register_module("panePrivacy", gPrivacyPane);
register_module("paneContainers", gContainersPane);
@@ -19,5 +19,5 @@ index 1fb8a954f61e89736b369f5fa01bb4f89fff16ad..3030c32cb66529f14e575428654778ab
+ register_module("paneZenCKS", gZenCKSSettings);
+ register_module("paneZenMarketplace", gZenMarketplaceManager);
if (Services.prefs.getBoolPref("browser.translations.newSettingsUI.enable")) {
register_module("paneTranslations", gTranslationsPane);
for (let [subPane, config] of Object.entries(CONFIG_PANES)) {
subPane = friendlyPrefCategoryNameToInternalName(subPane);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 0081bb470c9b15b39441ff844680e5e91b05fb86..3e4e7c43cf0e4feffb80623491de6222bb88a64b 100644
index 4500e3a3a7d54bd7647cd09ab0e11df782fb7a69..9506e860966e974b377b3e2e71c91f9d2c4a0c92 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -45,6 +45,8 @@
@@ -11,7 +11,7 @@ index 0081bb470c9b15b39441ff844680e5e91b05fb86..3e4e7c43cf0e4feffb80623491de6222
<link rel="localization" href="branding/brand.ftl"/>
<link rel="localization" href="browser/browser.ftl"/>
<!-- Used by fontbuilder.js -->
@@ -106,6 +108,11 @@
@@ -109,6 +111,11 @@
<hbox flex="1">
<vbox class="navigation">
@@ -23,7 +23,7 @@ index 0081bb470c9b15b39441ff844680e5e91b05fb86..3e4e7c43cf0e4feffb80623491de6222
<!-- category list -->
<richlistbox id="categories" data-l10n-id="category-list" data-l10n-attrs="aria-label">
<richlistitem id="category-general"
@@ -118,6 +125,50 @@
@@ -121,6 +128,50 @@
<label class="category-name" flex="1" data-l10n-id="pane-general-title"></label>
</richlistitem>
@@ -74,7 +74,7 @@ index 0081bb470c9b15b39441ff844680e5e91b05fb86..3e4e7c43cf0e4feffb80623491de6222
<richlistitem id="category-home"
class="category"
value="paneHome"
@@ -229,11 +280,6 @@
@@ -232,11 +283,6 @@
<html:a href="about:policies" target="_blank" data-l10n-id="managed-notice"/>
</hbox>
</hbox>
@@ -86,7 +86,7 @@ index 0081bb470c9b15b39441ff844680e5e91b05fb86..3e4e7c43cf0e4feffb80623491de6222
</hbox>
</hbox>
<vbox id="mainPrefPane">
@@ -247,6 +293,10 @@
@@ -250,6 +296,10 @@
#include sync.inc.xhtml
#include experimental.inc.xhtml
#include moreFromMozilla.inc.xhtml

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/sync.inc.xhtml b/browser/components/preferences/sync.inc.xhtml
index e59c536fc2fa06b11be9378a28285ac16fd16958..cf17ee3b6347b950fcf5bf260cd0631c77ffd1d3 100644
index 31b95644f820eda3267d3b52913ed0845abc1c80..1c8869418f7c88ed33601860dafd2c4eb0d5731f 100644
--- a/browser/components/preferences/sync.inc.xhtml
+++ b/browser/components/preferences/sync.inc.xhtml
@@ -223,6 +223,10 @@

View File

@@ -1136,3 +1136,8 @@ Preferences.addAll([
default: true,
},
]);
Preferences.addSetting({
id: 'zenWorkspaceContinueWhereLeftOff',
pref: 'zen.workspaces.continue-where-left-off',
});

View File

@@ -26,6 +26,9 @@
<checkbox id="zenWorkspacesForceContainerTabsToWorkspace"
data-l10n-id="zen-settings-workspaces-force-container-tabs-to-workspace"
preference="zen.workspaces.force-container-workspace"/>
<checkbox id="zenTabsCloseOnBackWithNoHistory"
data-l10n-id="zen-tabs-close-on-back-with-no-history"
preference="zen.tabs.close-on-back-with-no-history"/>
</groupbox>
<hbox id="zenTabsUnloadCategory"

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/search/SearchUIUtils.sys.mjs b/browser/components/search/SearchUIUtils.sys.mjs
index 55f90f4e802480728bbd5ef962b507183e017997..2a83f861fe6edee2b127c8d7946abcdcdbf677f5 100644
index 15fdb0cd7664c2b49977902d7f4c7a117d82cf15..6aedbc18de6604b63b2586e7d9745a4c4e7e38ae 100644
--- a/browser/components/search/SearchUIUtils.sys.mjs
+++ b/browser/components/search/SearchUIUtils.sys.mjs
@@ -430,7 +430,7 @@ export var SearchUIUtils = {
@@ -434,7 +434,7 @@ export var SearchUIUtils = {
triggeringSearchEngine: engine.name,
},
});

View File

@@ -1,17 +1,17 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d89fb95494 100644
index 1cdbc0f41bf5b55dfbbd850cb618c6d870f7a261..f13ed1412bb7ae6623aa2605d7691d10540eb659 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -126,6 +126,8 @@ const TAB_EVENTS = [
"TabUngrouped",
@@ -127,6 +127,8 @@ const TAB_EVENTS = [
"TabGroupCollapse",
"TabGroupExpand",
"TabSplitViewActivate",
+ "TabAddedToEssentials",
+ "TabRemovedFromEssentials",
];
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
@@ -1904,6 +1906,8 @@ var SessionStoreInternal = {
@@ -1911,6 +1913,8 @@ var SessionStoreInternal = {
case "TabPinned":
case "TabUnpinned":
case "SwapDocShells":
@@ -20,7 +20,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
this.saveStateDelayed(win);
break;
case "TabGroupCreate":
@@ -2139,7 +2143,6 @@ var SessionStoreInternal = {
@@ -2151,7 +2155,6 @@ var SessionStoreInternal = {
if (closedWindowState) {
let newWindowState;
if (
@@ -28,7 +28,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
!lazy.SessionStartup.willRestore()
) {
// We want to split the window up into pinned tabs and unpinned tabs.
@@ -2372,11 +2375,9 @@ var SessionStoreInternal = {
@@ -2384,11 +2387,9 @@ var SessionStoreInternal = {
tabbrowser.selectedTab.label;
}
@@ -40,7 +40,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
// Store the window's close date to figure out when each individual tab
// was closed. This timestamp should allow re-arranging data based on how
@@ -3361,7 +3362,7 @@ var SessionStoreInternal = {
@@ -3373,7 +3374,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) {
return;
}
@@ -49,7 +49,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
return;
}
@@ -4073,6 +4074,11 @@ var SessionStoreInternal = {
@@ -4089,6 +4090,11 @@ var SessionStoreInternal = {
Math.min(tabState.index, tabState.entries.length)
);
tabState.pinned = false;
@@ -61,7 +61,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
if (inBackground === false) {
aWindow.gBrowser.selectedTab = newTab;
@@ -4509,6 +4515,7 @@ var SessionStoreInternal = {
@@ -4525,6 +4531,7 @@ var SessionStoreInternal = {
// Append the tab if we're opening into a different window,
tabIndex: aSource == aTargetWindow ? pos : Infinity,
pinned: state.pinned,
@@ -69,7 +69,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
userContextId: state.userContextId,
skipLoad: true,
preferredRemoteType,
@@ -5358,7 +5365,7 @@ var SessionStoreInternal = {
@@ -5374,7 +5381,7 @@ var SessionStoreInternal = {
for (let i = tabbrowser.pinnedTabCount; i < tabbrowser.tabs.length; i++) {
let tab = tabbrowser.tabs[i];
@@ -78,7 +78,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
removableTabs.push(tab);
}
}
@@ -5418,7 +5425,7 @@ var SessionStoreInternal = {
@@ -5434,7 +5441,7 @@ var SessionStoreInternal = {
}
let workspaceID = aWindow.getWorkspaceID();
@@ -87,7 +87,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
winData.workspaceID = workspaceID;
}
},
@@ -5609,11 +5616,12 @@ var SessionStoreInternal = {
@@ -5625,11 +5632,12 @@ var SessionStoreInternal = {
}
let tabbrowser = aWindow.gBrowser;
@@ -101,7 +101,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
// update the internal state data for this window
for (let tab of tabs) {
if (tab == aWindow.FirefoxViewHandler.tab) {
@@ -5624,6 +5632,7 @@ var SessionStoreInternal = {
@@ -5640,6 +5648,7 @@ var SessionStoreInternal = {
tabsData.push(tabData);
}
@@ -109,7 +109,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
// update tab group state for this window
winData.groups = [];
for (let tabGroup of aWindow.gBrowser.tabGroups) {
@@ -5636,7 +5645,7 @@ var SessionStoreInternal = {
@@ -5652,7 +5661,7 @@ var SessionStoreInternal = {
// a window is closed, point to the first item in the tab strip instead (it will never be the Firefox View tab,
// since it's only inserted into the tab strip after it's selected).
if (aWindow.FirefoxViewHandler.tab?.selected) {
@@ -118,7 +118,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
winData.title = tabbrowser.tabs[0].label;
}
winData.selected = selectedIndex;
@@ -5748,8 +5757,8 @@ var SessionStoreInternal = {
@@ -5764,8 +5773,8 @@ var SessionStoreInternal = {
// selectTab represents.
let selectTab = 0;
if (overwriteTabs) {
@@ -129,7 +129,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
selectTab = Math.min(selectTab, winData.tabs.length);
}
@@ -5792,6 +5801,8 @@ var SessionStoreInternal = {
@@ -5808,6 +5817,8 @@ var SessionStoreInternal = {
winData.tabs,
winData.groups ?? []
);
@@ -138,7 +138,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
this._log.debug(
`restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs`
);
@@ -6348,6 +6359,25 @@ var SessionStoreInternal = {
@@ -6371,6 +6382,25 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.
@@ -164,7 +164,7 @@ index eb62ff3e733e43fdaa299babddea3ba0125abb06..8f20ba50b06f5b75d7de08eb4d1b27d8
if (tabData.pinned) {
tabbrowser.pinTab(tab);
@@ -7263,7 +7293,7 @@ var SessionStoreInternal = {
@@ -7289,7 +7319,7 @@ var SessionStoreInternal = {
let groupsToSave = new Map();
for (let tIndex = 0; tIndex < window.tabs.length; ) {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js
index c4edb5442e5243b7d9fe35e1774b2fc651903601..d58076fedafe07d3401ab1723eaa837fabbae09f 100644
index 220c3c83fa09daaec433803a4655a20114a137a6..1ef8adc3ecfa61839bb993f7fc090133bffe77db 100644
--- a/browser/components/sidebar/browser-sidebar.js
+++ b/browser/components/sidebar/browser-sidebar.js
@@ -779,7 +779,7 @@ var SidebarController = {
@@ -793,7 +793,7 @@ var SidebarController = {
setPosition() {
// First reset all ordinals to match DOM ordering.
let contentArea = document.getElementById("tabbrowser-tabbox");

View File

@@ -1,12 +1,12 @@
diff --git a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
index 773f595e89e268578ba153907babec95b58a155a..abe86fc3d243a85c4a8dbee854a2d0130f7270fd 100644
index bcd7689e9d68ef8b171c327188174334c4271e21..f69180acb87644f109aa91b871e347f1b1835f53 100644
--- a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
+++ b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
@@ -937,6 +937,7 @@ export class AsyncTabSwitcher {
return !(
@@ -938,6 +938,7 @@ export class AsyncTabSwitcher {
this.tabbrowser._printPreviewBrowsers.has(browser) ||
this.tabbrowser.splitViewBrowsers.includes(browser) ||
lazy.PictureInPicture.isOriginatingBrowser(browser)
+ || browser?.hasAttribute('zen-glance-background')
+ || browser?.parentNode?.parentNode?.parentNode?.classList?.contains("zen-glance-background")
);
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/TabsList.sys.mjs b/browser/components/tabbrowser/TabsList.sys.mjs
index 20a543dede6bf4428c8af19c5d0589788ddd8eaa..27a378e70f5b280b720c95ba8dac2cc4e88985be 100644
index b394a980869d5e5df01b6afdd81e0f41c090e6ec..236c99db0dfa5ebcba50d55c1e4eb6ab7b8110b2 100644
--- a/browser/components/tabbrowser/TabsList.sys.mjs
+++ b/browser/components/tabbrowser/TabsList.sys.mjs
@@ -87,7 +87,7 @@ class TabsListBase {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/browser-ctrlTab.js b/browser/components/tabbrowser/content/browser-ctrlTab.js
index 22db482e62e754135d8a6cf824914a3e3e06c45c..bdc18d575b33e788f9628b4cb648d5c3e8781666 100644
index 958728cde19dd7cc24692baa89e11fcab816ab82..32e2b6af2536133f170bd5e14c47392ded8440eb 100644
--- a/browser/components/tabbrowser/content/browser-ctrlTab.js
+++ b/browser/components/tabbrowser/content/browser-ctrlTab.js
@@ -252,7 +252,8 @@ var ctrlTab = {
@@ -249,7 +249,8 @@ var ctrlTab = {
},
get tabList() {
@@ -12,7 +12,7 @@ index 22db482e62e754135d8a6cf824914a3e3e06c45c..bdc18d575b33e788f9628b4cb648d5c3
},
init: function ctrlTab_init() {
@@ -463,7 +464,7 @@ var ctrlTab = {
@@ -460,7 +461,7 @@ var ctrlTab = {
// If the tab is hidden, don't add it to the list unless it's selected
// (Normally hidden tabs would be unhidden when selected, but that doesn't
// happen for Firefox View).
@@ -21,7 +21,7 @@ index 22db482e62e754135d8a6cf824914a3e3e06c45c..bdc18d575b33e788f9628b4cb648d5c3
return;
}
@@ -487,7 +488,7 @@ var ctrlTab = {
@@ -484,7 +485,7 @@ var ctrlTab = {
},
open: function ctrlTab_open() {
@@ -30,7 +30,7 @@ index 22db482e62e754135d8a6cf824914a3e3e06c45c..bdc18d575b33e788f9628b4cb648d5c3
return;
}
@@ -765,7 +766,7 @@ var ctrlTab = {
@@ -763,7 +764,7 @@ var ctrlTab = {
_initRecentlyUsedTabs() {
this._recentlyUsedTabs = Array.prototype.filter.call(
gBrowser.tabs,

View File

@@ -0,0 +1,439 @@
diff --git a/browser/components/tabbrowser/content/drag-and-drop.js b/browser/components/tabbrowser/content/drag-and-drop.js
index c97c661656868bc7faaf7c66c9702eea056aafe1..aa9f0ed071e4898cac2b98a4d81e95df6a41b8dd 100644
--- a/browser/components/tabbrowser/content/drag-and-drop.js
+++ b/browser/components/tabbrowser/content/drag-and-drop.js
@@ -32,6 +32,9 @@
* @returns {MozTabbrowserTab|vbox}
*/
const elementToMove = element => {
+ if (element.group?.hasAttribute("split-view-group")) {
+ return element.group;
+ }
if (isTab(element)) {
return element;
}
@@ -118,6 +121,10 @@
}
let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
+ if (draggedTab && dropEffect === "move") {
+ gZenPinnedTabManager.applyDragoverClass(event, draggedTab);
+ gZenViewSplitter.onBrowserDragEndToSplit(event);
+ }
if (
(dropEffect == "move" || dropEffect == "copy") &&
document == draggedTab.ownerDocument &&
@@ -272,6 +279,18 @@
this.#tabDropIndicator.hidden = true;
event.stopPropagation();
+ if (draggedTab?.hasAttribute("zen-has-splitted")) {
+ draggedTab.removeAttribute("zen-has-splitted");
+ draggedTab._visuallySelected = false;
+ }
+ if (draggedTab && dropEffect == "move") {
+ let moved = gZenPinnedTabManager.moveToAnotherTabContainerIfNecessary(event, movingTabs);
+
+ if (moved) {
+ this.finishMoveTogetherSelectedTabs(draggedTab);
+ return;
+ }
+ }
if (draggedTab && dropEffect == "copy") {
let duplicatedDraggedTab;
let duplicatedTabs = [];
@@ -297,8 +316,9 @@
let translateOffsetY = oldTranslateY % tabHeight;
let newTranslateX = oldTranslateX - translateOffsetX;
let newTranslateY = oldTranslateY - translateOffsetY;
- let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned;
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
if (this.#isContainerVerticalPinnedGrid(draggedTab)) {
// Update both translate axis for pinned vertical expanded tabs
@@ -314,8 +334,8 @@
}
} else {
let tabs = this.#tabbrowserTabs.ariaFocusableItems.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ isPinned ? (essential ? 0 : gBrowser._numZenEssentials) : numPinned,
+ isPinned ? (essential ? gBrowser._numZenEssentials : numPinned) : undefined
);
let size = this.#tabbrowserTabs.verticalMode ? "height" : "width";
let screenAxis = this.#tabbrowserTabs.verticalMode
@@ -368,11 +388,13 @@
this.#dragToPinPromoCard,
];
let shouldPin =
+ false &&
isTab(draggedTab) &&
!draggedTab.pinned &&
(overPinnedDropIndicator ||
dragToPinTargets.some(el => el.contains(event.target)));
let shouldUnpin =
+ false &&
isTab(draggedTab) &&
draggedTab.pinned &&
this.#tabbrowserTabs.arrowScrollbox.contains(event.target);
@@ -390,6 +412,7 @@
(oldTranslateY && oldTranslateY != newTranslateY);
} else if (this.#tabbrowserTabs.verticalMode) {
shouldTranslate &&= oldTranslateY && oldTranslateY != newTranslateY;
+ shouldTranslate = false;
} else {
shouldTranslate &&= oldTranslateX && oldTranslateX != newTranslateX;
}
@@ -446,7 +469,7 @@
item.removeAttribute("tabdrop-samewindow");
resolve();
};
- if (gReduceMotion) {
+ if (true || gReduceMotion) {
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -586,6 +609,7 @@
let nextItem = this.#tabbrowserTabs.ariaFocusableItems[newIndex];
let tabGroup = isTab(nextItem) && nextItem.group;
+ if (gZenViewSplitter.handleTabDrop(event, urls, replace, inBackground)) return;
gBrowser.loadTabs(urls, {
inBackground,
replace,
@@ -623,7 +647,16 @@
this.#expandGroupOnDrop(draggedTab);
}
this.#resetTabsAfterDrop(draggedTab.ownerDocument);
-
+ if (!dt.mozUserCancelled && dt.dropEffect == "none" && !this._isCustomizing) {
+ const moved = gZenViewSplitter.moveTabToSplitView(event, draggedTab);
+ if (moved) {
+ delete draggedTab._dragData;
+ return;
+ }
+ } else if (dt.mozUserCancelled) {
+ gZenViewSplitter.onBrowserDragEndToSplit(event, true);
+ if (gZenViewSplitter._lastOpenedTab) gZenViewSplitter._lastOpenedTab._visuallySelected = false;
+ }
if (
dt.mozUserCancelled ||
dt.dropEffect != "none" ||
@@ -827,7 +860,10 @@
#getDragTarget(event, { ignoreSides = false } = {}) {
let { target } = event;
while (target) {
- if (isTab(target) || isTabGroupLabel(target)) {
+ if (isTab(target) || isTabGroupLabel(target) || target?.classList?.contains("tab-group-label-container")) {
+ if (target.classList?.contains("tab-group-label-container")) {
+ target = target.querySelector(".tab-group-label");
+ }
break;
}
target = target.parentNode;
@@ -844,14 +880,17 @@
return null;
}
}
+ if (target?.group?.hasAttribute("split-view-group")) {
+ target = target.group.labelElement;
+ }
return target;
}
#isContainerVerticalPinnedGrid(tab) {
return (
this.#tabbrowserTabs.verticalMode &&
- tab.pinned &&
- this.#tabbrowserTabs.hasAttribute("expanded") &&
+ (tab.hasAttribute("zen-essential")) &&
+ (this.hasAttribute("expanded") || document.documentElement.hasAttribute("zen-sidebar-expanded")) &&
!this.#tabbrowserTabs.expandOnHover
);
}
@@ -882,7 +921,8 @@
isTabGroupLabel(draggedTab) &&
draggedTab._dragData?.expandGroupOnDrop
) {
- draggedTab.group.collapsed = false;
+ draggedTab.group.collapsed = draggedTab.group.hasAttribute("has-active");
+ gZenFolders.animateGroupMove(draggedTab.group, true);
}
}
@@ -947,10 +987,7 @@
if (this.#isContainerVerticalPinnedGrid(tab)) {
// In expanded vertical mode, the max number of pinned tabs per row is dynamic
// Set this before adjusting dragged tab's position
- let pinnedTabs = this.#tabbrowserTabs.visibleTabs.slice(
- 0,
- gBrowser.pinnedTabCount
- );
+ let pinnedTabs = this.#tabbrowserTabs.ariaFocusableItems.slice(0, gBrowser._numZenEssentials);
let tabsPerRow = 0;
let position = RTL_UI
? window.windowUtils.getBoundsWithoutFlushing(
@@ -1117,7 +1154,7 @@
let dropEffect = this.getDropEffectForTabDrag(event);
let isMovingInTabStrip = !fromTabList && dropEffect == "move";
let collapseTabGroupDuringDrag =
- isMovingInTabStrip && isTabGroupLabel(tab) && !tab.group.collapsed;
+ isMovingInTabStrip && isTabGroupLabel(tab) && (!tab.group.collapsed || tab.group.hasAttribute("has-active"));
tab._dragData = {
offsetX: this.#tabbrowserTabs.verticalMode
@@ -1127,7 +1164,7 @@
? event.screenY - window.screenY - tabOffset
: event.screenY - window.screenY,
scrollPos:
- this.#tabbrowserTabs.verticalMode && tab.pinned
+ this.#tabbrowserTabs.verticalMode && tab.pinned && false
? this.#tabbrowserTabs.pinnedTabsContainer.scrollPosition
: this.#tabbrowserTabs.arrowScrollbox.scrollPosition,
screenX: event.screenX,
@@ -1156,6 +1193,7 @@
if (collapseTabGroupDuringDrag) {
tab.group.collapsed = true;
+ gZenFolders.animateGroupMove(tab.group);
}
}
}
@@ -1174,6 +1212,16 @@
when the tab is first selected to be dragged.
*/
#updateTabStylesOnDrag(tab) {
+ let { movingTabs: zenMovingTabs } = tab._dragData;
+ for (let movingTab of zenMovingTabs.slice(zenMovingTabs.findIndex(t => t._tPos == tab._tPos))) {
+ if (isTabGroupLabel(tab)) {
+ movingTab = movingTab.parentElement;
+ }
+ // "dragtarget" contains the following rules which must only be set AFTER the above
+ // elements have been adjusted. {z-index: 3 !important, position: absolute !important}
+ movingTab.setAttribute("zen-dragtarget", "");
+ }
+ return;
let isPinned = tab.pinned;
let numPinned = gBrowser.pinnedTabCount;
let allTabs = this.#tabbrowserTabs.ariaFocusableItems;
@@ -1624,10 +1672,7 @@
return;
}
- let tabs = this.#tabbrowserTabs.visibleTabs.slice(
- 0,
- gBrowser.pinnedTabCount
- );
+ let tabs = this.#tabbrowserTabs.ariaFocusableItems.slice(0, gBrowser._numZenEssentials);
let directionX = screenX > dragData.animLastScreenX;
let directionY = screenY > dragData.animLastScreenY;
@@ -1636,6 +1681,8 @@
let { width: tabWidth, height: tabHeight } =
draggedTab.getBoundingClientRect();
+ tabWidth += 4; // Add 4px to account for the gap
+ tabHeight += 4;
let shiftSizeX = tabWidth * movingTabs.length;
let shiftSizeY = tabHeight;
dragData.tabWidth = tabWidth;
@@ -1672,8 +1719,8 @@
let lastBoundX =
lastTabInRow.screenX +
lastTabInRow.getBoundingClientRect().width -
- (lastMovingTabScreenX + tabWidth);
- let lastBoundY = periphery.screenY - (lastMovingTabScreenY + tabHeight);
+ (lastMovingTabScreenX + tabWidth) + 4;
+ let lastBoundY = lastTab.screenY - lastMovingTabScreenY;
translateX = Math.min(Math.max(translateX, firstBoundX), lastBoundX);
translateY = Math.min(Math.max(translateY, firstBoundY), lastBoundY);
@@ -1833,13 +1880,18 @@
this.#clearDragOverGroupingTimer();
this.#clearPinnedDropIndicatorTimer();
- let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned;
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
+ const isDraggingFolder = isTabGroupLabel(draggedTab) && draggedTab.group?.isZenFolder;
let allTabs = this.#tabbrowserTabs.ariaFocusableItems;
let tabs = allTabs.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ (isPinned && essential) ? 0 : gBrowser._numZenEssentials,
+ isPinned ? (essential ? gBrowser._numZenEssentials : (isDraggingFolder ? numPinned : undefined)) : undefined
);
+ if (draggedTab.group?.hasAttribute("split-view-group")) {
+ draggedTab = draggedTab.group.labelElement;
+ }
if (this.#rtlMode) {
tabs.reverse();
@@ -1854,7 +1906,7 @@
let translateAxis = this.#tabbrowserTabs.verticalMode
? "translateY"
: "translateX";
- let { width: tabWidth, height: tabHeight } = bounds(draggedTab);
+ let { width: tabWidth, height: tabHeight } = bounds(draggedTab.group?.hasAttribute("split-view-group") ? draggedTab.group : draggedTab);
let tabSize = this.#tabbrowserTabs.verticalMode ? tabHeight : tabWidth;
let translateX = event.screenX - dragData.screenX;
let translateY = event.screenY - dragData.screenY;
@@ -1870,6 +1922,12 @@
);
let lastMovingTab = movingTabs.at(-1);
let firstMovingTab = movingTabs[0];
+ if (lastMovingTab.group?.hasAttribute("split-view-group")) {
+ lastMovingTab = lastMovingTab.group;
+ }
+ if (firstMovingTab.group?.hasAttribute("split-view-group")) {
+ firstMovingTab = firstMovingTab.group;
+ }
let endEdge = ele => ele[screenAxis] + bounds(ele)[size];
let lastMovingTabScreen = endEdge(lastMovingTab);
let firstMovingTabScreen = firstMovingTab[screenAxis];
@@ -1884,6 +1942,13 @@
let endBound = this.#rtlMode
? endEdge(this.#tabbrowserTabs) - lastMovingTabScreen
: periphery[screenAxis] - 1 - lastMovingTabScreen;
+ {
+ let firstTab = tabs.at(this.#rtlMode ? -1 : 0);
+ let lastTab = tabs.at(this.#rtlMode ? 0 : -1);
+ startBound = firstTab[screenAxis] - firstMovingTabScreen;
+ endBound = endEdge(lastTab) - lastMovingTabScreen;
+ endBound = gZenPinnedTabManager.getLastTabBound(endBound, lastTab, isDraggingFolder);
+ }
translate = Math.min(Math.max(translate, startBound), endBound);
// Center the tab under the cursor if the tab is not under the cursor while dragging
@@ -2075,6 +2140,8 @@
};
let dropElement = getOverlappedElement();
+ if (dropElement?.hasAttribute("split-view-group")) dropElement = dropElement.labelElement;
+ gZenPinnedTabManager.animateSeparatorMove(movingTabs, dropElement, isPinned, event);
let newDropElementIndex;
if (dropElement) {
@@ -2157,7 +2224,7 @@
? Services.prefs.getIntPref(
"browser.tabs.dragDrop.moveOverThresholdPercent"
) / 100
- : 0.5;
+ : Services.prefs.getIntPref('zen.view.drag-and-drop.move-over-threshold') / 100;
moveOverThreshold = Math.min(1, Math.max(0, moveOverThreshold));
let shouldMoveOver = overlapPercent > moveOverThreshold;
if (logicalForward && shouldMoveOver) {
@@ -2190,6 +2257,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 (
+ false &&
isTabGroupLabel(draggedTab) &&
dropElement?.group &&
(!dropElement.group.collapsed ||
@@ -2216,20 +2284,13 @@
let isOutOfBounds = isPinned
? dropElement.elementIndex >= numPinned
: dropElement.elementIndex < numPinned;
- if (isOutOfBounds) {
- // Drop after last pinned tab
- dropElement = this.#tabbrowserTabs.ariaFocusableItems[numPinned - 1];
- dropBefore = false;
- }
}
- if (
- gBrowser._tabGroupsEnabled &&
- isTab(draggedTab) &&
- !isPinned &&
- (!numPinned || newDropElementIndex > numPinned)
- ) {
+ if (isTab(draggedTab) || isTabGroupLabel(draggedTab)) {
let dragOverGroupingThreshold = 1 - moveOverThreshold;
+ if (draggedTab && !dropElement?.group) {
+ gZenFolders.highlightGroupOnDragOver(null);
+ }
let groupingDelay = Services.prefs.getIntPref(
"browser.tabs.dragDrop.createGroup.delayMS"
);
@@ -2237,6 +2298,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 =
+ false &&
!movingTabsSet.has(dropElement) &&
isTab(dropElement) &&
!dropElement?.group &&
@@ -2245,6 +2307,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 =
+ false &&
isTabGroupLabel(dropElement) &&
dropElement.group.collapsed &&
overlapPercent > dragOverGroupingThreshold;
@@ -2302,6 +2365,14 @@
dropElement = dropElementGroup.tabs[0];
dropBefore = true;
}
+ ({ dropElement, colorCode, dropBefore } = gZenFolders.handleDragOverTabGroupLabel(
+ dropElement,
+ draggedTab,
+ overlapPercent,
+ movingTabs,
+ dropBefore,
+ colorCode
+ ));
}
this.#setDragOverGroupColor(colorCode);
this.#tabbrowserTabs.toggleAttribute(
@@ -2324,10 +2395,11 @@
dragData.dropBefore = dropBefore;
dragData.animDropElementIndex = newDropElementIndex;
+ gZenFolders.setFolderIndentation(movingTabs, dropElement);
// Shift background tabs to leave a gap where the dragged tab
// would currently be dropped.
for (let item of tabs) {
- if (item == draggedTab) {
+ if (item == draggedTab || (item.group?.hasAttribute("split-view-group") && item.group == draggedTab.group)) {
continue;
}
@@ -2417,11 +2489,13 @@
}
finishAnimateTabMove() {
+ gZenPinnedTabManager.onDragFinish();
if (!this.#isMovingTab()) {
return;
}
this.#setMovingTabMode(false);
+ gZenFolders.highlightGroupOnDragOver(null);
for (let item of this.#tabbrowserTabs.ariaFocusableItems) {
this.#resetGroupTarget(item);
@@ -2457,7 +2531,7 @@
tab.style.left = "";
tab.style.top = "";
tab.style.maxWidth = "";
- tab.removeAttribute("dragtarget");
+ tab.removeAttribute("zen-dragtarget");
}
for (let label of draggedTabDocument.getElementsByClassName(
"tab-group-label-container"
@@ -2467,7 +2541,7 @@
label.style.left = "";
label.style.top = "";
label.style.maxWidth = "";
- label.removeAttribute("dragtarget");
+ label.removeAttribute("zen-dragtarget");
}
let periphery = draggedTabDocument.getElementById(
"tabbrowser-arrowscrollbox-periphery"

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362efc001afdd 100644
index 4c1a48424316b29d27ae2bc8b64004df41c87bb6..f1ff9bf0947127a8e9115357cedac577b5fad08c 100644
--- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js
@@ -21,6 +21,7 @@
@@ -42,7 +42,7 @@ index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362ef
".tab-label-container":
"pinned,selected=visuallyselected,labeldirection",
".tab-label":
@@ -184,7 +187,7 @@
@@ -186,7 +189,7 @@
}
set _visuallySelected(val) {
@@ -51,7 +51,7 @@ index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362ef
return;
}
@@ -220,11 +223,21 @@
@@ -222,11 +225,21 @@
}
get visible() {
@@ -78,7 +78,7 @@ index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362ef
}
get hidden() {
@@ -295,7 +308,7 @@
@@ -297,7 +310,7 @@
return false;
}
@@ -87,7 +87,7 @@ index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362ef
}
get lastAccessed() {
@@ -372,8 +385,11 @@
@@ -374,8 +387,11 @@
}
get group() {
@@ -101,7 +101,7 @@ index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362ef
}
return null;
}
@@ -468,6 +484,8 @@
@@ -470,6 +486,8 @@
this.style.MozUserFocus = "ignore";
} else if (
event.target.classList.contains("tab-close-button") ||
@@ -110,7 +110,7 @@ index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362ef
event.target.classList.contains("tab-icon-overlay") ||
event.target.classList.contains("tab-audio-button")
) {
@@ -522,6 +540,10 @@
@@ -524,6 +542,10 @@
this.style.MozUserFocus = "";
}
@@ -121,7 +121,7 @@ index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362ef
on_click(event) {
if (event.button != 0) {
return;
@@ -570,6 +592,7 @@
@@ -572,6 +594,7 @@
)
);
} else {
@@ -129,7 +129,7 @@ index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362ef
gBrowser.removeTab(this, {
animate: true,
triggeringEvent: event,
@@ -582,6 +605,14 @@
@@ -584,6 +607,14 @@
// (see tabbrowser-tabs 'click' handler).
gBrowser.tabContainer._blockDblClick = true;
}
@@ -144,7 +144,7 @@ index 425aaf8c8e4adf1507eb0d8ded671f8295544b04..12988986c4cf00990c1d1b2e4be362ef
}
on_dblclick(event) {
@@ -605,6 +636,8 @@
@@ -607,6 +638,8 @@
animate: true,
triggeringEvent: event,
});

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394b7dbc6a7 100644
index c0eafd4faf8d57b8486c5bf8917375850ec8147e..326bf96d9346aba7096d518fbf63cc349868d0d0 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -432,15 +432,64 @@
@@ -450,15 +450,64 @@
return this.tabContainer.visibleTabs;
}
@@ -69,7 +69,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
set selectedTab(val) {
if (
gSharedTabWarning.willShowSharedTabWarning(val) ||
@@ -588,6 +637,7 @@
@@ -613,6 +662,7 @@
this.tabpanels.appendChild(panel);
let tab = this.tabs[0];
@@ -77,7 +77,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
tab.linkedPanel = uniqueId;
this._selectedTab = tab;
this._selectedBrowser = browser;
@@ -873,13 +923,17 @@
@@ -898,13 +948,17 @@
}
this.showTab(aTab);
@@ -96,7 +96,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
aTab.setAttribute("pinned", "true");
this._updateTabBarForPinnedTabs();
@@ -892,11 +946,15 @@
@@ -917,11 +971,15 @@
}
this.#handleTabMove(aTab, () => {
@@ -113,7 +113,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
});
aTab.style.marginInlineStart = "";
@@ -1073,6 +1131,8 @@
@@ -1098,6 +1156,8 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
@@ -122,7 +122,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (
aIconURL &&
!LOCAL_PROTOCOLS.some(protocol => aIconURL.startsWith(protocol))
@@ -1082,6 +1142,9 @@
@@ -1107,6 +1167,9 @@
);
return;
}
@@ -132,7 +132,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL;
@@ -1445,6 +1508,7 @@
@@ -1470,6 +1533,7 @@
if (!this._previewMode) {
newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed();
@@ -140,7 +140,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -1597,6 +1661,9 @@
@@ -1622,6 +1686,9 @@
}
let activeEl = document.activeElement;
@@ -150,7 +150,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
// If focus is on the old tab, move it to the new tab.
if (activeEl == oldTab) {
newTab.focus();
@@ -1920,7 +1987,8 @@
@@ -1945,7 +2012,8 @@
}
_setTabLabel(aTab, aLabel, { beforeTabOpen, isContentTitle, isURL } = {}) {
@@ -160,7 +160,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
return false;
}
@@ -2028,7 +2096,7 @@
@@ -2053,7 +2121,7 @@
newIndex = this.selectedTab._tPos + 1;
}
@@ -169,7 +169,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (this.isTabGroupLabel(targetTab)) {
throw new Error(
"Replacing a tab group label with a tab is not supported"
@@ -2303,6 +2371,7 @@
@@ -2328,6 +2396,7 @@
uriIsAboutBlank,
userContextId,
skipLoad,
@@ -177,7 +177,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
} = {}) {
let b = document.createXULElement("browser");
// Use the JSM global to create the permanentKey, so that if the
@@ -2376,8 +2445,7 @@
@@ -2401,8 +2470,7 @@
// we use a different attribute name for this?
b.setAttribute("name", name);
}
@@ -187,7 +187,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
b.setAttribute("transparent", "true");
}
@@ -2542,7 +2610,7 @@
@@ -2567,7 +2635,7 @@
let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID();
@@ -196,7 +196,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary.
@@ -2601,8 +2669,8 @@
@@ -2626,8 +2694,8 @@
// If we transitioned from one browser to two browsers, we need to set
// hasSiblings=false on both the existing browser and the new browser.
if (this.tabs.length == 2) {
@@ -207,7 +207,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
} else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
}
@@ -2779,7 +2847,6 @@
@@ -2814,7 +2882,6 @@
this.selectedTab = this.addTrustedTab(BROWSER_NEW_TAB_URL, {
tabIndex: tab._tPos + 1,
userContextId: tab.userContextId,
@@ -215,7 +215,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
focusUrlBar: true,
});
resolve(this.selectedBrowser);
@@ -2859,6 +2926,8 @@
@@ -2923,6 +2990,8 @@
schemelessInput,
hasValidUserGestureActivation = false,
textDirectiveUserActivation = false,
@@ -224,7 +224,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
} = {}
) {
// all callers of addTab that pass a params object need to pass
@@ -2869,6 +2938,12 @@
@@ -2933,6 +3002,12 @@
);
}
@@ -237,7 +237,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (!UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.start("browser.tabs.opening", "initting", window);
}
@@ -2932,6 +3007,19 @@
@@ -2996,6 +3071,19 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -257,7 +257,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (insertTab) {
// Insert the tab into the tab container in the correct position.
this.#insertTabAtIndex(t, {
@@ -2940,6 +3028,7 @@
@@ -3004,6 +3092,7 @@
ownerTab,
openerTab,
pinned,
@@ -265,7 +265,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
bulkOrderedOpen,
tabGroup: tabGroup ?? openerTab?.group,
});
@@ -2958,6 +3047,7 @@
@@ -3022,6 +3111,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
@@ -273,7 +273,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
}));
if (focusUrlBar) {
@@ -3078,6 +3168,12 @@
@@ -3146,6 +3236,12 @@
}
}
@@ -286,7 +286,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
// Additionally send pinned tab events
if (pinned) {
this.#notifyPinnedStatus(t);
@@ -3248,10 +3344,10 @@
@@ -3330,10 +3426,10 @@
isAdoptingGroup = false,
isUserTriggered = false,
telemetryUserCreateSource = "unknown",
@@ -298,7 +298,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
}
if (!color) {
@@ -3272,9 +3368,14 @@
@@ -3354,9 +3450,14 @@
label,
isAdoptingGroup
);
@@ -315,7 +315,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
);
group.addTabs(tabs);
@@ -3395,7 +3496,7 @@
@@ -3477,7 +3578,7 @@
}
this.#handleTabMove(tab, () =>
@@ -324,7 +324,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
);
}
@@ -3597,6 +3698,7 @@
@@ -3679,6 +3780,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
@@ -332,7 +332,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
}
) {
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
@@ -3666,6 +3768,7 @@
@@ -3748,6 +3850,7 @@
openWindowInfo,
name,
skipLoad,
@@ -340,7 +340,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
});
}
@@ -3853,7 +3956,7 @@
@@ -3935,7 +4038,7 @@
// Add a new tab if needed.
if (!tab) {
let createLazyBrowser =
@@ -349,7 +349,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
let url = "about:blank";
if (tabData.entries?.length) {
@@ -3890,8 +3993,10 @@
@@ -3972,8 +4075,10 @@
insertTab: false,
skipLoad: true,
preferredRemoteType,
@@ -361,7 +361,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (select) {
tabToSelect = tab;
}
@@ -3903,7 +4008,8 @@
@@ -3985,7 +4090,8 @@
this.pinTab(tab);
// Then ensure all the tab open/pinning information is sent.
this._fireTabOpen(tab, {});
@@ -371,7 +371,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
let { groupId } = tabData;
const tabGroup = tabGroupWorkingData.get(groupId);
// if a tab refers to a tab group we don't know, skip any group
@@ -3917,7 +4023,10 @@
@@ -3999,7 +4105,10 @@
tabGroup.stateData.id,
tabGroup.stateData.color,
tabGroup.stateData.collapsed,
@@ -383,7 +383,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
);
tabsFragment.appendChild(tabGroup.node);
}
@@ -3962,9 +4071,23 @@
@@ -4044,9 +4153,23 @@
// to remove the old selected tab.
if (tabToSelect) {
let leftoverTab = this.selectedTab;
@@ -407,7 +407,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (tabs.length > 1 || !tabs[0].selected) {
this._updateTabsAfterInsert();
@@ -4155,11 +4278,14 @@
@@ -4237,11 +4360,14 @@
if (ownerTab) {
tab.owner = ownerTab;
}
@@ -423,7 +423,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (
!bulkOrderedOpen &&
((openerTab &&
@@ -4171,7 +4297,7 @@
@@ -4253,7 +4379,7 @@
let lastRelatedTab =
openerTab && this._lastRelatedTabMap.get(openerTab);
let previousTab = lastRelatedTab || openerTab || this.selectedTab;
@@ -432,7 +432,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
tabGroup = previousTab.group;
}
if (
@@ -4182,7 +4308,7 @@
@@ -4264,7 +4390,7 @@
) {
elementIndex = Infinity;
} else if (previousTab.visible) {
@@ -441,7 +441,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
} else if (previousTab == FirefoxViewHandler.tab) {
elementIndex = 0;
}
@@ -4210,14 +4336,14 @@
@@ -4292,14 +4418,14 @@
}
// Ensure index is within bounds.
if (tab.pinned) {
@@ -460,7 +460,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (pinned && !itemAfter?.pinned) {
itemAfter = null;
@@ -4228,7 +4354,7 @@
@@ -4310,7 +4436,7 @@
this.tabContainer._invalidateCachedTabs();
@@ -469,7 +469,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (this.isTab(itemAfter) && itemAfter.group == tabGroup) {
// Place at the front of, or between tabs in, the same tab group
this.tabContainer.insertBefore(tab, itemAfter);
@@ -4264,6 +4390,7 @@
@@ -4346,6 +4472,7 @@
if (pinned) {
this._updateTabBarForPinnedTabs();
}
@@ -477,7 +477,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
TabBarVisibility.update();
}
@@ -4553,6 +4680,9 @@
@@ -4635,6 +4762,9 @@
return;
}
@@ -487,7 +487,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
this.removeTabs(selectedTabs, { isUserTriggered, telemetrySource });
}
@@ -4814,6 +4944,7 @@
@@ -4896,6 +5026,7 @@
telemetrySource,
} = {}
) {
@@ -495,7 +495,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs
// can be considered equivalent to closing the window.
if (
@@ -4903,6 +5034,7 @@
@@ -4985,6 +5116,7 @@
if (lastToClose) {
this.removeTab(lastToClose, aParams);
}
@@ -503,7 +503,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
} catch (e) {
console.error(e);
}
@@ -4941,6 +5073,12 @@
@@ -5023,6 +5155,12 @@
aTab._closeTimeNoAnimTimerId = Glean.browserTabclose.timeNoAnim.start();
}
@@ -516,7 +516,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
// Handle requests for synchronously removing an already
// asynchronously closing tab.
if (!animate && aTab.closing) {
@@ -4955,6 +5093,9 @@
@@ -5037,6 +5175,9 @@
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
let isLastTab = this.#isLastTabInWindow(aTab);
@@ -526,7 +526,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -5003,7 +5144,13 @@
@@ -5085,7 +5226,13 @@
// We're not animating, so we can cancel the animation stopwatch.
Glean.browserTabclose.timeAnim.cancel(aTab._closeTimeAnimTimerId);
aTab._closeTimeAnimTimerId = null;
@@ -541,7 +541,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
return;
}
@@ -5137,7 +5284,7 @@
@@ -5219,7 +5366,7 @@
closeWindowWithLastTab != null
? closeWindowWithLastTab
: !window.toolbar.visible ||
@@ -550,7 +550,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -5161,6 +5308,7 @@
@@ -5243,6 +5390,7 @@
newTab = true;
}
@@ -558,7 +558,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -5201,13 +5349,7 @@
@@ -5283,13 +5431,7 @@
aTab._mouseleave();
if (newTab) {
@@ -573,7 +573,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
} else {
TabBarVisibility.update();
}
@@ -5340,6 +5482,7 @@
@@ -5422,6 +5564,7 @@
this.tabs[i]._tPos = i;
}
@@ -581,7 +581,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (!this._windowIsClosing) {
// update tab close buttons state
this.tabContainer._updateCloseButtons();
@@ -5552,6 +5695,7 @@
@@ -5643,6 +5786,7 @@
}
let excludeTabs = new Set(aExcludeTabs);
@@ -589,7 +589,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
// If this tab has a successor, it should be selectable, since
// hiding or closing a tab removes that tab as a successor.
@@ -5564,13 +5708,13 @@
@@ -5655,13 +5799,13 @@
!excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) {
@@ -605,7 +605,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
);
let tab = this.tabContainer.findNextTab(aTab, {
@@ -5586,7 +5730,7 @@
@@ -5677,7 +5821,7 @@
}
if (tab) {
@@ -614,7 +614,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
}
// If no qualifying visible tab was found, see if there is a tab in
@@ -5607,7 +5751,7 @@
@@ -5698,7 +5842,7 @@
});
}
@@ -623,7 +623,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
}
_blurTab(aTab) {
@@ -6013,10 +6157,10 @@
@@ -6104,10 +6248,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -636,7 +636,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -6075,6 +6219,7 @@
@@ -6166,6 +6310,7 @@
* @param {MozTabbrowserTab|MozTabbrowserTabGroup|MozTabbrowserTabGroup.labelElement} aTab
*/
replaceTabWithWindow(aTab, aOptions) {
@@ -644,7 +644,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (this.tabs.length == 1) {
return null;
}
@@ -6208,7 +6353,7 @@
@@ -6299,7 +6444,7 @@
* `true` if element is a `<tab-group>`
*/
isTabGroup(element) {
@@ -653,7 +653,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
}
/**
@@ -6284,8 +6429,8 @@
@@ -6375,8 +6520,8 @@
}
// Don't allow mixing pinned and unpinned tabs.
@@ -664,7 +664,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
} else {
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
}
@@ -6311,10 +6456,16 @@
@@ -6402,10 +6547,16 @@
this.#handleTabMove(
element,
() => {
@@ -683,7 +683,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
if (neighbor && this.isTab(element) && tabIndex > element._tPos) {
neighbor.after(element);
} else {
@@ -6372,23 +6523,28 @@
@@ -6463,23 +6614,28 @@
#moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) {
if (this.isTabGroupLabel(targetElement)) {
targetElement = targetElement.group;
@@ -718,7 +718,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
} else if (!element.pinned && targetElement && targetElement.pinned) {
// If the caller asks to move an unpinned element next to a pinned
// tab, move the unpinned element to be the first unpinned element
@@ -6401,14 +6557,34 @@
@@ -6492,14 +6648,34 @@
// move the tab group right before the first unpinned tab.
// 4. Moving a tab group and the first unpinned tab is grouped:
// move the tab group right before the first unpinned tab's tab group.
@@ -754,7 +754,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
element.pinned
? this.tabContainer.pinnedTabsContainer
: this.tabContainer;
@@ -6417,7 +6593,7 @@
@@ -6508,7 +6684,7 @@
element,
() => {
if (moveBefore) {
@@ -763,7 +763,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
} else if (targetElement) {
targetElement.after(element);
} else {
@@ -6489,10 +6665,10 @@
@@ -6580,10 +6756,10 @@
* @param {TabMetricsContext} [metricsContext]
*/
moveTabToGroup(aTab, aGroup, metricsContext) {
@@ -776,7 +776,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
return;
}
if (aTab.group && aTab.group.id === aGroup.id) {
@@ -6522,6 +6698,7 @@
@@ -6613,6 +6789,7 @@
let state = {
tabIndex: tab._tPos,
@@ -784,7 +784,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
};
if (tab.visible) {
state.elementIndex = tab.elementIndex;
@@ -6548,7 +6725,7 @@
@@ -6639,7 +6816,7 @@
let changedTabGroup =
previousTabState.tabGroupId != currentTabState.tabGroupId;
@@ -793,7 +793,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
tab.dispatchEvent(
new CustomEvent("TabMove", {
bubbles: true,
@@ -6585,6 +6762,10 @@
@@ -6676,6 +6853,10 @@
moveActionCallback();
@@ -804,7 +804,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
// Clear tabs cache after moving nodes because the order of tabs may have
// changed.
this.tabContainer._invalidateCachedTabs();
@@ -7486,7 +7667,7 @@
@@ -7576,7 +7757,7 @@
// preventDefault(). It will still raise the window if appropriate.
break;
}
@@ -813,7 +813,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
window.focus();
aEvent.preventDefault();
break;
@@ -7501,7 +7682,6 @@
@@ -7593,7 +7774,6 @@
}
case "TabGroupCollapse":
aEvent.target.tabs.forEach(tab => {
@@ -821,7 +821,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
});
break;
case "TabGroupCreateByUser":
@@ -8442,6 +8622,7 @@
@@ -8542,6 +8722,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
@@ -829,7 +829,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
}
@@ -9443,7 +9624,7 @@ var TabContextMenu = {
@@ -9543,7 +9724,7 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !this.multiselected;
@@ -838,7 +838,7 @@ index c099e8646b9341a3ff55bf394037c8fc2769969b..0d524a0519bbbdf304a594d1fb56c394
// Build Ask Chat items
TabContextMenu.GenAI.buildTabMenu(
document.getElementById("context_askChat"),
@@ -9763,6 +9944,7 @@ var TabContextMenu = {
@@ -9863,6 +10044,7 @@ var TabContextMenu = {
)
);
} else {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js
index 1b4f6bf4ed6556492f84476d33e9103fbb1c74e9..77bd8738db6f2e65c2bfcae8347b424098ba3e7b 100644
index aa8b22c558f9dbc0b0b1e63993477b9126fb6821..feb90bb75b78e2513362679a5b5da41fbf97ac20 100644
--- a/browser/components/tabbrowser/content/tabgroup.js
+++ b/browser/components/tabbrowser/content/tabgroup.js
@@ -14,11 +14,11 @@
@@ -77,8 +77,8 @@ index 1b4f6bf4ed6556492f84476d33e9103fbb1c74e9..77bd8738db6f2e65c2bfcae8347b4240
+ };
this.#updateLabelAriaAttributes();
this.#updateCollapsedAriaAttributes();
@@ -144,6 +163,8 @@
@@ -143,6 +162,8 @@
// mounts after getting created by `Tabbrowser.adoptTabGroup`.
this.#wasCreatedByAdoption = false;
}
@@ -87,7 +87,7 @@ index 1b4f6bf4ed6556492f84476d33e9103fbb1c74e9..77bd8738db6f2e65c2bfcae8347b4240
resetDefaultGroupName = () => {
this.#defaultGroupName = "";
@@ -228,7 +249,10 @@
@@ -227,7 +248,10 @@
}
});
}
@@ -99,7 +99,7 @@ index 1b4f6bf4ed6556492f84476d33e9103fbb1c74e9..77bd8738db6f2e65c2bfcae8347b4240
}
get color() {
@@ -322,6 +346,9 @@
@@ -321,6 +345,9 @@
}
set collapsed(val) {
@@ -109,7 +109,7 @@ index 1b4f6bf4ed6556492f84476d33e9103fbb1c74e9..77bd8738db6f2e65c2bfcae8347b4240
if (!!val == this.collapsed) {
return;
}
@@ -399,7 +426,6 @@
@@ -406,7 +433,6 @@
tabGroupName,
})
.then(result => {
@@ -117,7 +117,7 @@ index 1b4f6bf4ed6556492f84476d33e9103fbb1c74e9..77bd8738db6f2e65c2bfcae8347b4240
});
}
@@ -418,7 +444,57 @@
@@ -425,7 +451,57 @@
* @returns {MozTabbrowserTab[]}
*/
get tabs() {
@@ -176,7 +176,7 @@ index 1b4f6bf4ed6556492f84476d33e9103fbb1c74e9..77bd8738db6f2e65c2bfcae8347b4240
}
/**
@@ -498,7 +574,6 @@
@@ -506,7 +582,6 @@
addTabs(tabs, metricsContext) {
for (let tab of tabs) {
if (tab.pinned) {
@@ -184,7 +184,7 @@ index 1b4f6bf4ed6556492f84476d33e9103fbb1c74e9..77bd8738db6f2e65c2bfcae8347b4240
}
let tabToMove =
this.ownerGlobal === tab.ownerGlobal
@@ -561,7 +636,7 @@
@@ -569,7 +644,7 @@
*/
on_click(event) {
let isToggleElement =
@@ -193,7 +193,7 @@ index 1b4f6bf4ed6556492f84476d33e9103fbb1c74e9..77bd8738db6f2e65c2bfcae8347b4240
event.target === this.#overflowCountLabel;
if (isToggleElement && event.button === 0) {
event.preventDefault();
@@ -630,5 +705,6 @@
@@ -638,5 +713,6 @@
}
}

View File

@@ -1,18 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78bec02d253a 100644
index 258b9627aaa8a1d26e8aeb987a0b4c67bc1b7abc..6d334761033a0654f28fd417193d2ac2a736d9f8 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -44,6 +44,9 @@
* @returns {MozTabbrowserTab|vbox}
*/
const elementToMove = element => {
+ if (element.group?.hasAttribute("split-view-group")) {
+ return element.group;
+ }
if (isTab(element)) {
return element;
}
@@ -423,7 +426,7 @@
@@ -411,7 +411,7 @@
// and we're not hitting the scroll buttons.
if (
event.button != 0 ||
@@ -21,7 +11,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
event.composedTarget.localName == "toolbarbutton"
) {
return;
@@ -504,7 +507,6 @@
@@ -492,7 +492,6 @@
});
}
} else if (isTabGroupLabel(event.target)) {
@@ -29,7 +19,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
} else if (
event.originalTarget.closest("scrollbox") &&
!Services.prefs.getBoolPref(
@@ -540,6 +542,9 @@
@@ -528,6 +527,9 @@
}
on_keydown(event) {
@@ -39,153 +29,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
let { altKey, shiftKey } = event;
let [accel, nonAccel] =
AppConstants.platform == "macosx"
@@ -777,7 +782,7 @@
if (this.#isContainerVerticalPinnedGrid(tab)) {
// In expanded vertical mode, the max number of pinned tabs per row is dynamic
// Set this before adjusting dragged tab's position
- let pinnedTabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount);
+ let pinnedTabs = this.ariaFocusableItems.slice(0, gBrowser._numZenEssentials);
let tabsPerRow = 0;
let position = RTL_UI
? window.windowUtils.getBoundsWithoutFlushing(
@@ -942,7 +947,7 @@
let dropEffect = this.getDropEffectForTabDrag(event);
let isMovingInTabStrip = !fromTabList && dropEffect == "move";
let collapseTabGroupDuringDrag =
- isMovingInTabStrip && isTabGroupLabel(tab) && !tab.group.collapsed;
+ isMovingInTabStrip && isTabGroupLabel(tab) && (!tab.group.collapsed || tab.group.hasAttribute("has-active"));
tab._dragData = {
offsetX: this.verticalMode
@@ -952,7 +957,7 @@
? event.screenY - window.screenY - tabOffset
: event.screenY - window.screenY,
scrollPos:
- this.verticalMode && tab.pinned
+ this.verticalMode && tab.pinned && false
? this.pinnedTabsContainer.scrollPosition
: this.arrowScrollbox.scrollPosition,
screenX: event.screenX,
@@ -981,6 +986,7 @@
if (collapseTabGroupDuringDrag) {
tab.group.collapsed = true;
+ gZenFolders.animateGroupMove(tab.group);
}
}
}
@@ -1027,6 +1033,10 @@
}
let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
+ if (draggedTab && dropEffect === "move") {
+ gZenPinnedTabManager.applyDragoverClass(event, draggedTab);
+ gZenViewSplitter.onBrowserDragEndToSplit(event);
+ }
if (
(dropEffect == "move" || dropEffect == "copy") &&
document == draggedTab.ownerDocument &&
@@ -1154,7 +1164,8 @@
isTabGroupLabel(draggedTab) &&
draggedTab._dragData?.expandGroupOnDrop
) {
- draggedTab.group.collapsed = false;
+ draggedTab.group.collapsed = draggedTab.group.hasAttribute("has-active");
+ gZenFolders.animateGroupMove(draggedTab.group, true);
}
}
@@ -1208,6 +1219,18 @@
this._tabDropIndicator.hidden = true;
event.stopPropagation();
+ if (draggedTab?.hasAttribute("zen-has-splitted")) {
+ draggedTab.removeAttribute("zen-has-splitted");
+ draggedTab._visuallySelected = false;
+ }
+ if (draggedTab && dropEffect == "move") {
+ let moved = gZenPinnedTabManager.moveToAnotherTabContainerIfNecessary(event, movingTabs);
+
+ if (moved) {
+ this.finishMoveTogetherSelectedTabs(draggedTab);
+ return;
+ }
+ }
if (draggedTab && dropEffect == "copy") {
let duplicatedDraggedTab;
let duplicatedTabs = [];
@@ -1232,8 +1255,9 @@
let translateOffsetY = oldTranslateY % tabHeight;
let newTranslateX = oldTranslateX - translateOffsetX;
let newTranslateY = oldTranslateY - translateOffsetY;
- let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned;
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
if (this.#isContainerVerticalPinnedGrid(draggedTab)) {
// Update both translate axis for pinned vertical expanded tabs
@@ -1249,8 +1273,8 @@
}
} else {
let tabs = this.ariaFocusableItems.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ isPinned ? (essential ? 0 : gBrowser._numZenEssentials) : numPinned,
+ isPinned ? (essential ? gBrowser._numZenEssentials : numPinned) : undefined
);
let size = this.verticalMode ? "height" : "width";
let screenAxis = this.verticalMode ? "screenY" : "screenX";
@@ -1299,11 +1323,13 @@
this.dragToPinPromoCard,
];
let shouldPin =
+ false &&
isTab(draggedTab) &&
!draggedTab.pinned &&
(overPinnedDropIndicator ||
dragToPinTargets.some(el => el.contains(event.target)));
let shouldUnpin =
+ false &&
isTab(draggedTab) &&
draggedTab.pinned &&
this.arrowScrollbox.contains(event.target);
@@ -1321,6 +1347,7 @@
(oldTranslateY && oldTranslateY != newTranslateY);
} else if (this.verticalMode) {
shouldTranslate &&= oldTranslateY && oldTranslateY != newTranslateY;
+ shouldTranslate = false;
} else {
shouldTranslate &&= oldTranslateX && oldTranslateX != newTranslateX;
}
@@ -1515,6 +1542,7 @@
let nextItem = this.ariaFocusableItems[newIndex];
let tabGroup = isTab(nextItem) && nextItem.group;
+ if (gZenViewSplitter.handleTabDrop(event, urls, replace, inBackground)) return;
gBrowser.loadTabs(urls, {
inBackground,
replace,
@@ -1553,6 +1581,17 @@
}
this.#resetTabsAfterDrop(draggedTab.ownerDocument);
+ if (!dt.mozUserCancelled && dt.dropEffect == "none" && !this._isCustomizing) {
+ const moved = gZenViewSplitter.moveTabToSplitView(event, draggedTab);
+ if (moved) {
+ delete draggedTab._dragData;
+ return;
+ }
+ } else if (dt.mozUserCancelled) {
+ gZenViewSplitter.onBrowserDragEndToSplit(event, true);
+ if (gZenViewSplitter._lastOpenedTab) gZenViewSplitter._lastOpenedTab._visuallySelected = false;
+ }
+
if (
dt.mozUserCancelled ||
dt.dropEffect != "none" ||
@@ -1719,7 +1758,6 @@
@@ -720,7 +722,6 @@
this.toggleAttribute("overflow", true);
this._updateCloseButtons();
@@ -193,7 +37,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
document
.getElementById("tab-preview-panel")
@@ -1777,7 +1815,7 @@
@@ -780,7 +781,7 @@
}
get newTabButton() {
@@ -202,7 +46,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
}
get verticalMode() {
@@ -1793,6 +1831,7 @@
@@ -796,6 +797,7 @@
}
get overflowing() {
@@ -210,7 +54,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
return this.hasAttribute("overflow");
}
@@ -1806,29 +1845,54 @@
@@ -809,29 +811,54 @@
if (pinnedChildren?.at(-1)?.id == "pinned-tabs-container-periphery") {
pinnedChildren.pop();
}
@@ -275,7 +119,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
}
/**
@@ -1895,29 +1959,23 @@
@@ -898,17 +925,10 @@
let elementIndex = 0;
@@ -295,26 +139,22 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
if (isTab(child) && child.visible) {
child.elementIndex = elementIndex++;
focusableItems.push(child);
} else if (isTabGroup(child)) {
@@ -916,11 +936,13 @@
child.labelElement.elementIndex = elementIndex++;
focusableItems.push(child.labelElement);
-
- let visibleTabsInGroup = child.tabs.filter(tab => tab.visible);
- visibleTabsInGroup.forEach(tab => {
- tab.elementIndex = elementIndex++;
- });
- focusableItems.push(...visibleTabsInGroup);
+ if (!child.hasAttribute("split-view-group")) {
+ let visibleTabsInGroup = child.childGroupsAndTabs.filter(tab => tab.visible);
+ visibleTabsInGroup.forEach(tab => {
+ tab.elementIndex = elementIndex++;
+ });
+ focusableItems.push(...visibleTabsInGroup);
+ }
}
}
@@ -1929,6 +1987,7 @@
- let visibleTabsInGroup = child.tabs.filter(tab => tab.visible);
+ if (!child.hasAttribute("split-view-group")) {
+ let visibleTabsInGroup = child.childGroupsAndTabs.filter(tab => tab.visible);
visibleTabsInGroup.forEach(tab => {
tab.elementIndex = elementIndex++;
});
focusableItems.push(...visibleTabsInGroup);
+ }
} else if (child.tagName == "tab-split-view-wrapper") {
let visibleTabsInSplitView = child.tabs.filter(tab => tab.visible);
visibleTabsInSplitView.forEach(tab => {
@@ -964,6 +986,7 @@
_invalidateCachedTabs() {
this.#allTabs = null;
this._invalidateCachedVisibleTabs();
@@ -322,18 +162,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
}
_invalidateCachedVisibleTabs() {
@@ -1944,8 +2003,8 @@
#isContainerVerticalPinnedGrid(tab) {
return (
this.verticalMode &&
- tab.pinned &&
- this.hasAttribute("expanded") &&
+ (tab.hasAttribute("zen-essential")) &&
+ (this.hasAttribute("expanded") || document.documentElement.hasAttribute("zen-sidebar-expanded")) &&
!this.expandOnHover
);
}
@@ -1961,7 +2020,7 @@
@@ -1067,7 +1090,7 @@
if (node == null) {
// We have a container for non-tab elements at the end of the scrollbox.
@@ -342,7 +171,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
}
node.before(tab);
@@ -2056,7 +2115,7 @@
@@ -1162,7 +1185,7 @@
// There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and
// for when the tab strip is overflowed (which is shared by vertical and horizontal tabs);
// Attach the long click popup to all of them.
@@ -351,7 +180,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
const newTab2 = this.newTabButton;
const newTabVertical = document.getElementById(
"vertical-tabs-newtab-button"
@@ -2156,8 +2215,10 @@
@@ -1263,8 +1286,10 @@
*/
_handleTabSelect(aInstant) {
let selectedTab = this.selectedItem;
@@ -362,7 +191,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
selectedTab._notselectedsinceload = false;
}
@@ -2166,7 +2227,7 @@
@@ -1273,7 +1298,7 @@
* @param {boolean} [shouldScrollInstantly=false]
*/
#ensureTabIsVisible(tab, shouldScrollInstantly = false) {
@@ -371,265 +200,7 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
if (arrowScrollbox?.overflowing) {
arrowScrollbox.ensureElementIsVisible(tab, shouldScrollInstantly);
}
@@ -2305,6 +2366,16 @@
when the tab is first selected to be dragged.
*/
#updateTabStylesOnDrag(tab) {
+ let { movingTabs: zenMovingTabs } = tab._dragData;
+ for (let movingTab of zenMovingTabs.slice(zenMovingTabs.findIndex(t => t._tPos == tab._tPos))) {
+ if (isTabGroupLabel(tab)) {
+ movingTab = movingTab.parentElement;
+ }
+ // "dragtarget" contains the following rules which must only be set AFTER the above
+ // elements have been adjusted. {z-index: 3 !important, position: absolute !important}
+ movingTab.setAttribute("zen-dragtarget", "");
+ }
+ return;
let isPinned = tab.pinned;
let numPinned = gBrowser.pinnedTabCount;
let allTabs = this.ariaFocusableItems;
@@ -2578,7 +2649,7 @@
return;
}
- let tabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount);
+ let tabs = this.ariaFocusableItems.slice(0, gBrowser._numZenEssentials);
let directionX = screenX > dragData.animLastScreenX;
let directionY = screenY > dragData.animLastScreenY;
@@ -2587,6 +2658,8 @@
let { width: tabWidth, height: tabHeight } =
draggedTab.getBoundingClientRect();
+ tabWidth += 4; // Add 4px to account for the gap
+ tabHeight += 4;
let shiftSizeX = tabWidth * movingTabs.length;
let shiftSizeY = tabHeight;
dragData.tabWidth = tabWidth;
@@ -2623,8 +2696,8 @@
let lastBoundX =
lastTabInRow.screenX +
lastTabInRow.getBoundingClientRect().width -
- (lastMovingTabScreenX + tabWidth);
- let lastBoundY = periphery.screenY - (lastMovingTabScreenY + tabHeight);
+ (lastMovingTabScreenX + tabWidth) + 4;
+ let lastBoundY = lastTab.screenY - lastMovingTabScreenY;
translateX = Math.min(Math.max(translateX, firstBoundX), lastBoundX);
translateY = Math.min(Math.max(translateY, firstBoundY), lastBoundY);
@@ -2782,13 +2855,18 @@
this.#clearDragOverGroupingTimer();
this.#clearPinnedDropIndicatorTimer();
- let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned;
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
+ const isDraggingFolder = isTabGroupLabel(draggedTab) && draggedTab.group?.isZenFolder;
let allTabs = this.ariaFocusableItems;
let tabs = allTabs.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ (isPinned && essential) ? 0 : gBrowser._numZenEssentials,
+ isPinned ? (essential ? gBrowser._numZenEssentials : (isDraggingFolder ? numPinned : undefined)) : undefined
);
+ if (draggedTab.group?.hasAttribute("split-view-group")) {
+ draggedTab = draggedTab.group.labelElement;
+ }
if (this.#rtlMode) {
tabs.reverse();
@@ -2799,7 +2877,7 @@
let screenAxis = this.verticalMode ? "screenY" : "screenX";
let size = this.verticalMode ? "height" : "width";
let translateAxis = this.verticalMode ? "translateY" : "translateX";
- let { width: tabWidth, height: tabHeight } = bounds(draggedTab);
+ let { width: tabWidth, height: tabHeight } = bounds(draggedTab.group?.hasAttribute("split-view-group") ? draggedTab.group : draggedTab);
let tabSize = this.verticalMode ? tabHeight : tabWidth;
let translateX = event.screenX - dragData.screenX;
let translateY = event.screenY - dragData.screenY;
@@ -2815,6 +2893,12 @@
);
let lastMovingTab = movingTabs.at(-1);
let firstMovingTab = movingTabs[0];
+ if (lastMovingTab.group?.hasAttribute("split-view-group")) {
+ lastMovingTab = lastMovingTab.group;
+ }
+ if (firstMovingTab.group?.hasAttribute("split-view-group")) {
+ firstMovingTab = firstMovingTab.group;
+ }
let endEdge = ele => ele[screenAxis] + bounds(ele)[size];
let lastMovingTabScreen = endEdge(lastMovingTab);
let firstMovingTabScreen = firstMovingTab[screenAxis];
@@ -2829,6 +2913,11 @@
let endBound = this.#rtlMode
? endEdge(this) - lastMovingTabScreen
: periphery[screenAxis] - 1 - lastMovingTabScreen;
+ let firstTab = tabs.at(this.#rtlMode ? -1 : 0);
+ let lastTab = tabs.at(this.#rtlMode ? 0 : -1);
+ startBound = firstTab[screenAxis] - firstMovingTabScreen;
+ endBound = endEdge(lastTab) - lastMovingTabScreen;
+ endBound = gZenPinnedTabManager.getLastTabBound(endBound, lastTab, isDraggingFolder);
translate = Math.min(Math.max(translate, startBound), endBound);
// Center the tab under the cursor if the tab is not under the cursor while dragging
@@ -3018,6 +3107,8 @@
};
let dropElement = getOverlappedElement();
+ if (dropElement?.hasAttribute("split-view-group")) dropElement = dropElement.labelElement;
+ gZenPinnedTabManager.animateSeparatorMove(movingTabs, dropElement, isPinned, event);
let newDropElementIndex;
if (dropElement) {
@@ -3099,7 +3190,7 @@
? Services.prefs.getIntPref(
"browser.tabs.dragDrop.moveOverThresholdPercent"
) / 100
- : 0.5;
+ : Services.prefs.getIntPref('zen.view.drag-and-drop.move-over-threshold') / 100;
moveOverThreshold = Math.min(1, Math.max(0, moveOverThreshold));
let shouldMoveOver = overlapPercent > moveOverThreshold;
if (logicalForward && shouldMoveOver) {
@@ -3132,6 +3223,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 (
+ false &&
isTabGroupLabel(draggedTab) &&
dropElement?.group &&
(!dropElement.group.collapsed ||
@@ -3158,20 +3250,13 @@
let isOutOfBounds = isPinned
? dropElement.elementIndex >= numPinned
: dropElement.elementIndex < numPinned;
- if (isOutOfBounds) {
- // Drop after last pinned tab
- dropElement = this.ariaFocusableItems[numPinned - 1];
- dropBefore = false;
- }
}
- if (
- gBrowser._tabGroupsEnabled &&
- isTab(draggedTab) &&
- !isPinned &&
- (!numPinned || newDropElementIndex > numPinned)
- ) {
+ if (isTab(draggedTab) || isTabGroupLabel(draggedTab)) {
let dragOverGroupingThreshold = 1 - moveOverThreshold;
+ if (draggedTab && !dropElement?.group) {
+ gZenFolders.highlightGroupOnDragOver(null);
+ }
let groupingDelay = Services.prefs.getIntPref(
"browser.tabs.dragDrop.createGroup.delayMS"
);
@@ -3179,6 +3264,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 =
+ false &&
!movingTabsSet.has(dropElement) &&
isTab(dropElement) &&
!dropElement?.group &&
@@ -3187,6 +3273,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 =
+ false &&
isTabGroupLabel(dropElement) &&
dropElement.group.collapsed &&
overlapPercent > dragOverGroupingThreshold;
@@ -3231,19 +3318,14 @@
dropElement = dropElementGroup;
colorCode = undefined;
} else if (isTabGroupLabel(dropElement)) {
- if (dropBefore) {
- // Dropping right before the tab group.
- dropElement = dropElementGroup;
- colorCode = undefined;
- } else if (dropElementGroup.collapsed) {
- // Dropping right after the collapsed tab group.
- dropElement = dropElementGroup;
- colorCode = undefined;
- } else {
- // Dropping right before the first tab in the tab group.
- dropElement = dropElementGroup.tabs[0];
- dropBefore = true;
- }
+ ({ dropElement, colorCode, dropBefore } = gZenFolders.handleDragOverTabGroupLabel(
+ dropElement,
+ draggedTab,
+ overlapPercent,
+ movingTabs,
+ dropBefore,
+ colorCode
+ ));
}
this.#setDragOverGroupColor(colorCode);
this.toggleAttribute("movingtab-addToGroup", colorCode);
@@ -3262,11 +3344,11 @@
dragData.dropElement = dropElement;
dragData.dropBefore = dropBefore;
dragData.animDropElementIndex = newDropElementIndex;
-
+ gZenFolders.setFolderIndentation(movingTabs, dropElement);
// Shift background tabs to leave a gap where the dragged tab
// would currently be dropped.
for (let item of tabs) {
- if (item == draggedTab) {
+ if (item == draggedTab || (item.group?.hasAttribute("split-view-group") && item.group == draggedTab.group)) {
continue;
}
@@ -3388,12 +3470,14 @@
element?.removeAttribute("dragover-groupTarget");
}
- finishAnimateTabMove() {
- if (!this.#isMovingTab()) {
+ finishAnimateTabMove(always = false) {
+ gZenPinnedTabManager.onDragFinish();
+ if (!this.#isMovingTab() && !always) {
return;
}
this.#setMovingTabMode(false);
+ gZenFolders.highlightGroupOnDragOver(null);
for (let item of this.ariaFocusableItems) {
this.#resetGroupTarget(item);
@@ -3440,17 +3524,16 @@
tab.style.left = "";
tab.style.top = "";
tab.style.maxWidth = "";
- tab.removeAttribute("dragtarget");
+ tab.removeAttribute("zen-dragtarget");
}
for (let label of draggedTabDocument.getElementsByClassName(
"tab-group-label-container"
)) {
label.style.width = "";
- label.style.height = "";
label.style.left = "";
label.style.top = "";
label.style.maxWidth = "";
- label.removeAttribute("dragtarget");
+ label.removeAttribute("zen-dragtarget");
}
let periphery = draggedTabDocument.getElementById(
"tabbrowser-arrowscrollbox-periphery"
@@ -3522,7 +3605,7 @@
let postTransitionCleanup = () => {
movingTab._moveTogetherSelectedTabsData.animate = false;
};
- if (gReduceMotion) {
+ if (true || gReduceMotion) {
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -3686,7 +3769,7 @@
@@ -1406,7 +1431,7 @@
}
_notifyBackgroundTab(aTab) {
@@ -638,25 +209,3 @@ index 1425607ef87d6c28fb676e722617edfb51ba12a1..97cdeaf7cde41f39d70bd50ac8ca78be
return;
}
@@ -3795,7 +3878,10 @@
#getDragTarget(event, { ignoreSides = false } = {}) {
let { target } = event;
while (target) {
- if (isTab(target) || isTabGroupLabel(target)) {
+ if (isTab(target) || isTabGroupLabel(target) || target?.classList?.contains("tab-group-label-container")) {
+ if (target.classList?.contains("tab-group-label-container")) {
+ target = target.querySelector(".tab-group-label");
+ }
break;
}
target = target.parentNode;
@@ -3812,6 +3898,9 @@
return null;
}
}
+ if (target?.group?.hasAttribute("split-view-group")) {
+ target = target.group.labelElement;
+ }
return target;
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarController.sys.mjs b/browser/components/urlbar/UrlbarController.sys.mjs
index a1faf7e4278c66865f267283515f22052769928d..297391205ab3cd96bed2e5a3e36a181c6da90098 100644
index 880f65b493ba5e9b9750e84c2ba5d08b99e3dad9..c4a495887926fc6f13312a29998d03bfe907f0e2 100644
--- a/browser/components/urlbar/UrlbarController.sys.mjs
+++ b/browser/components/urlbar/UrlbarController.sys.mjs
@@ -297,7 +297,6 @@ export class UrlbarController {
@@ -299,7 +299,6 @@ export class UrlbarController {
const isMac = AppConstants.platform == "macosx";
// Handle readline/emacs-style navigation bindings on Mac.
if (
@@ -10,7 +10,7 @@ index a1faf7e4278c66865f267283515f22052769928d..297391205ab3cd96bed2e5a3e36a181c
this.view.isOpen &&
event.ctrlKey &&
(event.key == "n" || event.key == "p")
@@ -441,6 +440,8 @@ export class UrlbarController {
@@ -443,6 +442,8 @@ export class UrlbarController {
});
}
event.preventDefault();

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d355858bcf37b 100644
index 4b7232f3261f8589b734c2238170e6968d7ea0bf..d8c0b404724e9b0dc2b5a2d21420357586fb7f14 100644
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
@@ -76,6 +76,13 @@ ChromeUtils.defineLazyGetter(lazy, "logger", () =>
@@ -84,6 +84,13 @@ ChromeUtils.defineLazyGetter(lazy, "logger", () =>
lazy.UrlbarUtils.getLogger({ prefix: "Input" })
);
@@ -16,7 +16,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
const DEFAULT_FORM_HISTORY_NAME = "searchbar-history";
const UNLIMITED_MAX_RESULTS = 99;
@@ -437,7 +444,16 @@ export class UrlbarInput {
@@ -454,7 +461,16 @@ export class UrlbarInput {
// See _on_select(). HTMLInputElement.select() dispatches a "select"
// event but does not set the primary selection.
this._suppressPrimaryAdjustment = true;
@@ -33,7 +33,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
this._suppressPrimaryAdjustment = false;
}
@@ -513,6 +529,10 @@ export class UrlbarInput {
@@ -530,6 +546,10 @@ export class UrlbarInput {
hideSearchTerms = false,
isSameDocument = false
) {
@@ -44,7 +44,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
if (!this.isAddressbar) {
throw new Error(
"Cannot set URI for UrlbarInput that is not an address bar"
@@ -790,8 +810,16 @@ export class UrlbarInput {
@@ -807,8 +827,16 @@ export class UrlbarInput {
return;
}
}
@@ -62,7 +62,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
}
/**
@@ -1207,7 +1235,11 @@ export class UrlbarInput {
@@ -1224,7 +1252,11 @@ export class UrlbarInput {
}
if (!this.#providesSearchMode(result)) {
@@ -75,7 +75,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
}
if (isCanonized) {
@@ -2298,6 +2330,32 @@ export class UrlbarInput {
@@ -2347,6 +2379,32 @@ export class UrlbarInput {
await this.#updateLayoutBreakoutDimensions();
}
@@ -108,7 +108,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
startLayoutExtend() {
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
// Do not expand if the Urlbar does not support being expanded or it is
@@ -2312,6 +2370,13 @@ export class UrlbarInput {
@@ -2361,6 +2419,13 @@ export class UrlbarInput {
this.setAttribute("breakout-extend", "true");
@@ -122,7 +122,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
// Enable the animation only after the first extend call to ensure it
// doesn't run when opening a new window.
if (!this.hasAttribute("breakout-extend-animate")) {
@@ -2331,6 +2396,24 @@ export class UrlbarInput {
@@ -2380,6 +2445,24 @@ export class UrlbarInput {
return;
}
@@ -147,7 +147,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
this.removeAttribute("breakout-extend");
this.#updateTextboxPosition();
}
@@ -2361,7 +2444,7 @@ export class UrlbarInput {
@@ -2410,7 +2493,7 @@ export class UrlbarInput {
forceUnifiedSearchButtonAvailable = false
) {
let prevState = this.getAttribute("pageproxystate");
@@ -156,7 +156,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
this.setAttribute("pageproxystate", state);
this._inputContainer.setAttribute("pageproxystate", state);
this._identityBox?.setAttribute("pageproxystate", state);
@@ -2595,10 +2678,12 @@ export class UrlbarInput {
@@ -2646,10 +2729,12 @@ export class UrlbarInput {
return;
}
this.textbox.style.top = px(
@@ -169,7 +169,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
);
}
@@ -2658,9 +2743,10 @@ export class UrlbarInput {
@@ -2709,9 +2794,10 @@ export class UrlbarInput {
return;
}
@@ -181,7 +181,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
);
this.textbox.style.setProperty(
"--urlbar-height",
@@ -3093,6 +3179,7 @@ export class UrlbarInput {
@@ -3144,6 +3230,7 @@ export class UrlbarInput {
}
_toggleActionOverride(event) {
@@ -189,7 +189,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
if (
event.keyCode == KeyEvent.DOM_VK_SHIFT ||
event.keyCode == KeyEvent.DOM_VK_ALT ||
@@ -3197,7 +3284,7 @@ export class UrlbarInput {
@@ -3248,7 +3335,7 @@ export class UrlbarInput {
return val;
}
let trimmedValue = lazy.UrlbarPrefs.get("trimURLs")
@@ -198,7 +198,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
: val;
// Only trim value if the directionality doesn't change to RTL and we're not
// showing a strikeout https protocol.
@@ -3501,6 +3588,7 @@ export class UrlbarInput {
@@ -3552,6 +3639,7 @@ export class UrlbarInput {
resultDetails = null,
browser = this.window.gBrowser.selectedBrowser
) {
@@ -206,7 +206,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
if (this.isAddressbar) {
this.#prepareAddressbarLoad(
url,
@@ -3608,6 +3696,10 @@ export class UrlbarInput {
@@ -3659,6 +3747,10 @@ export class UrlbarInput {
}
reuseEmpty = true;
}
@@ -217,7 +217,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
if (
where == "tab" &&
reuseEmpty &&
@@ -3615,6 +3707,9 @@ export class UrlbarInput {
@@ -3666,6 +3758,9 @@ export class UrlbarInput {
) {
where = "current";
}
@@ -227,7 +227,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
return where;
}
@@ -3872,6 +3967,7 @@ export class UrlbarInput {
@@ -3923,6 +4018,7 @@ export class UrlbarInput {
this.setResultForCurrentValue(null);
this.handleCommand();
this.controller.clearLastQueryContextCache();
@@ -235,7 +235,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
this._suppressStartQuery = false;
});
@@ -3879,7 +3975,6 @@ export class UrlbarInput {
@@ -3930,7 +4026,6 @@ export class UrlbarInput {
contextMenu.addEventListener("popupshowing", () => {
// Close the results pane when the input field contextual menu is open,
// because paste and go doesn't want a result selection.
@@ -243,7 +243,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
let controller =
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
@@ -3991,7 +4086,11 @@ export class UrlbarInput {
@@ -4040,7 +4135,11 @@ export class UrlbarInput {
if (!engineName && !source && !this.hasAttribute("searchmode")) {
return;
}
@@ -256,7 +256,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
if (this._searchModeIndicatorTitle) {
this._searchModeIndicatorTitle.textContent = "";
this._searchModeIndicatorTitle.removeAttribute("data-l10n-id");
@@ -4302,6 +4401,7 @@ export class UrlbarInput {
@@ -4351,6 +4450,7 @@ export class UrlbarInput {
this.document.l10n.setAttributes(
this.inputField,
@@ -264,7 +264,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
l10nId,
l10nId == "urlbar-placeholder-with-name" ? { name } : undefined
);
@@ -4413,6 +4513,11 @@ export class UrlbarInput {
@@ -4462,6 +4562,11 @@ export class UrlbarInput {
}
_on_click(event) {
@@ -276,7 +276,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
if (
event.target == this.inputField ||
event.target == this._inputContainer
@@ -4485,7 +4590,7 @@ export class UrlbarInput {
@@ -4534,7 +4639,7 @@ export class UrlbarInput {
}
}
@@ -285,7 +285,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
this.view.autoOpen({ event });
} else {
if (this._untrimOnFocusAfterKeydown) {
@@ -4525,9 +4630,16 @@ export class UrlbarInput {
@@ -4574,9 +4679,16 @@ export class UrlbarInput {
}
_on_mousedown(event) {
@@ -303,7 +303,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
if (
event.target != this.inputField &&
@@ -4538,6 +4650,10 @@ export class UrlbarInput {
@@ -4587,6 +4699,10 @@ export class UrlbarInput {
this.focusedViaMousedown = !this.focused;
this._preventClickSelectsAll = this.focused;
@@ -314,7 +314,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
// Keep the focus status, since the attribute may be changed
// upon calling this.focus().
@@ -4573,7 +4689,7 @@ export class UrlbarInput {
@@ -4622,7 +4738,7 @@ export class UrlbarInput {
}
// Don't close the view when clicking on a tab; we may want to keep the
// view open on tab switch, and the TabSelect event arrived earlier.
@@ -323,7 +323,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558
break;
}
@@ -4890,7 +5006,7 @@ export class UrlbarInput {
@@ -4939,7 +5055,7 @@ export class UrlbarInput {
// When we are in actions search mode we can show more results so
// increase the limit.
let maxResults =

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
index 20be2dbbb8471aeb43a9bf77888c9858a0b61186..a9f974a78c5676d1340a3543852e4126c1d32b04 100644
index c12d875172650dddfe7de623a776149517c83302..66e923ed2c84e350dd7ba7a20e362666cec8f307 100644
--- a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
+++ b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
@@ -852,6 +852,7 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
@@ -854,6 +854,7 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
}
if (result.providerName == "UrlbarProviderTabToSearch") {
@@ -10,7 +10,7 @@ index 20be2dbbb8471aeb43a9bf77888c9858a0b61186..a9f974a78c5676d1340a3543852e4126
// Discard the result if a tab-to-search result was added already.
if (!state.canAddTabToSearch) {
return false;
@@ -1498,7 +1499,9 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
@@ -1500,7 +1501,9 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
usedLimits.maxResultCount++;
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarPrefs.sys.mjs b/browser/components/urlbar/UrlbarPrefs.sys.mjs
index 46ad55519aecd6c14034a9faa91c7ad8e5c1c422..e8d9c06499a2b273483edd21faf902c936462b59 100644
index 531cecb9da3465d392ea82248e6ebb3fe6476b47..f3cce2a66bb8465ae022df0c1b9823e7e88cba21 100644
--- a/browser/components/urlbar/UrlbarPrefs.sys.mjs
+++ b/browser/components/urlbar/UrlbarPrefs.sys.mjs
@@ -731,6 +731,7 @@ function makeResultGroups({ showSearchSuggestionsFirst }) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
index b2c3bfa6fbe83fceb019196c210baaa7b4881372..02f2c8be89f163e16c5fd29f9b7e145e16ea53ed 100644
index 91abb674d26dc7e2a919c94087b180a6148248fd..80551acd18228f19cb179f71adc4f58bc893ac14 100644
--- a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
@@ -44,11 +44,13 @@ function defaultQuery(conditions = "") {
@@ -26,7 +26,7 @@ index b2c3bfa6fbe83fceb019196c210baaa7b4881372..02f2c8be89f163e16c5fd29f9b7e145e
h.visit_count, h.typed,
0, t.open_count,
:matchBehavior, :searchBehavior, NULL)
@@ -1120,11 +1122,13 @@ Search.prototype = {
@@ -1126,11 +1128,13 @@ Search.prototype = {
? lazy.PlacesUtils.toDate(lastVisitPRTime).getTime()
: undefined;
let tabGroup = row.getResultByName("groupId");

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
index ece407214669009e263b507b5236ab28da33efe9..8f22426295e2b001438918f44d2c22ed7a697c2f 100644
index b864cf9a9159d1f4e162ff5e8895a2bc95dee881..b30ee47b4f6d9025648ca5d93ee79f993cb6f4c2 100644
--- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
+++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
@@ -845,6 +845,7 @@ export class Query {
@@ -873,6 +873,7 @@ export class Query {
if (
result.heuristic &&
this.context.searchMode &&

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarUtils.sys.mjs b/browser/components/urlbar/UrlbarUtils.sys.mjs
index f38e860e46fa979b3e0c66ecd3eb88a64df60fc1..d130bbc7488ff3de926823974a1df13dc8e61fbc 100644
index 079c9f18550b54b2a1cc030174849896fd23234e..605bb3433b61443037659d126ba17b033e5a4394 100644
--- a/browser/components/urlbar/UrlbarUtils.sys.mjs
+++ b/browser/components/urlbar/UrlbarUtils.sys.mjs
@@ -74,6 +74,7 @@ export var UrlbarUtils = {
@@ -77,6 +77,7 @@ export var UrlbarUtils = {
RESTRICT_SEARCH_KEYWORD: "restrictSearchKeyword",
SUGGESTED_INDEX: "suggestedIndex",
TAIL_SUGGESTION: "tailSuggestion",
@@ -10,7 +10,7 @@ index f38e860e46fa979b3e0c66ecd3eb88a64df60fc1..d130bbc7488ff3de926823974a1df13d
}),
// Defines provider types.
@@ -133,6 +134,7 @@ export var UrlbarUtils = {
@@ -136,6 +137,7 @@ export var UrlbarUtils = {
OTHER_NETWORK: 6,
ADDON: 7,
ACTIONS: 8,
@@ -18,7 +18,7 @@ index f38e860e46fa979b3e0c66ecd3eb88a64df60fc1..d130bbc7488ff3de926823974a1df13d
}),
// Per-result exposure telemetry.
@@ -544,6 +546,8 @@ export var UrlbarUtils = {
@@ -547,6 +549,8 @@ export var UrlbarUtils = {
return this.RESULT_GROUP.HEURISTIC_FALLBACK;
case "UrlbarProviderHistoryUrlHeuristic":
return this.RESULT_GROUP.HEURISTIC_HISTORY_URL;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
index 50961e4beb75012ef0ed6f261a95854712cc69d7..93bcfca9270ff34dbe6386789fdae6066457438d 100644
index beff1d41e47efad09256459589176d96c69f7a8a..c850dad31454d61c4edb6e183db07b2d51fb9fc8 100644
--- a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
+++ b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
@@ -585,6 +585,7 @@ export class UrlbarValueFormatter {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
index b3c7c8a995226e2cbe852d82515f9bc7077980e7..4c8611556f7f71e5f8860787ed1db9b50b9fa2e8 100644
index 38e4987dc906cf3c668995aab79fc15a02834677..de9d69a4faab3cfa249de41ef573ae2ef873b348 100644
--- a/browser/components/urlbar/UrlbarView.sys.mjs
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
@@ -620,7 +620,7 @@ export class UrlbarView {
@@ -11,7 +11,7 @@ index b3c7c8a995226e2cbe852d82515f9bc7077980e7..4c8611556f7f71e5f8860787ed1db9b5
// Try to reuse the cached top-sites context. If it's not cached, then
// there will be a gap of time between when the input is focused and
// when the view opens that can be perceived as flicker.
@@ -2734,6 +2734,8 @@ export class UrlbarView {
@@ -2751,6 +2751,8 @@ export class UrlbarView {
if (row?.hasAttribute("row-selectable")) {
row?.toggleAttribute("selected", true);
}
@@ -20,7 +20,7 @@ index b3c7c8a995226e2cbe852d82515f9bc7077980e7..4c8611556f7f71e5f8860787ed1db9b5
if (element != row) {
row?.toggleAttribute("descendant-selected", true);
}
@@ -3215,7 +3217,7 @@ export class UrlbarView {
@@ -3232,7 +3234,7 @@ export class UrlbarView {
}
#enableOrDisableRowWrap() {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
index 6207e6c8aa1e303ec151bc1e5c51c277ef776ee6..d3783a3c459c94880be1c95dc265a7d4887f67a1 100644
index 7e50d7f5512cb4304d6fd2ecb6952fbff0b8f98e..ba09805f07b754b4b36d5a650252d5578184d031 100644
--- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
+++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
@@ -223,7 +223,7 @@ export const PREFS_CONFIG = new Map([
@@ -250,7 +250,7 @@ export const PREFS_CONFIG = new Map([
"showSponsoredTopSites",
{
title: "Show sponsored top sites",

View File

@@ -1,8 +1,8 @@
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
index b884f0167e5de87a45cf523436ceaceb710d35ae..eedc80278a5c93f81ce90c0d6198924549c07fc3 100644
index bb06e9224a4e195122d8a47ccf97c3481342cf86..959862e95ec00c7dc18256bd2572c1d7285415d4 100644
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -362,17 +362,17 @@ bin/libfreebl_64int_3.so
@@ -372,17 +372,17 @@ bin/libfreebl_64int_3.so
; [MaintenanceService]
;
#ifdef MOZ_MAINTENANCE_SERVICE

View File

@@ -1,5 +1,5 @@
diff --git a/browser/installer/windows/nsis/defines.nsi.in b/browser/installer/windows/nsis/defines.nsi.in
index f78af1e3634dd503089ff8bdab5adba614a87892..4a19de8e89efadf2456011e2da2907a1135fe766 100644
index 51743f6157d69e9303ed480254c199791f1a4db8..2e113512c2f0b094aa50a4f0499607ad9eb7eaf8 100644
--- a/browser/installer/windows/nsis/defines.nsi.in
+++ b/browser/installer/windows/nsis/defines.nsi.in
@@ -90,7 +90,7 @@
@@ -11,7 +11,7 @@ index f78af1e3634dd503089ff8bdab5adba614a87892..4a19de8e89efadf2456011e2da2907a1
# ARCH is used when it is necessary to differentiate the x64 registry keys from
# the x86 registry keys (e.g. the uninstall registry key).
@@ -154,7 +154,7 @@ VIAddVersionKey "ProductVersion" "${AppVersion}"
@@ -153,7 +153,7 @@ VIAddVersionKey "ProductVersion" "${AppVersion}"
!define APPROXIMATE_REQUIRED_SPACE_MB "145"
# Constants for parts of the telemetry submission URL

View File

@@ -1,8 +1,8 @@
diff --git a/browser/installer/windows/nsis/installer.nsi b/browser/installer/windows/nsis/installer.nsi
index 92eb3f11ea8035ce72eb5b1e110c98b1ef8665d1..e6b91ecfa8f16d2b884c70468ec1d3a0197351d1 100755
index 4ecf1ea7e325b23a901ec75687c6b959085c8207..28c4b462dab0c4830a4bfb4c9cdf82a8aa919456 100755
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -841,7 +841,7 @@ Section "-InstallEndCleanup"
@@ -842,7 +842,7 @@ Section "-InstallEndCleanup"
; When we're using the GUI, .onGUIEnd sends the ping, but of course that isn't
; invoked when we're running silently.
${If} ${Silent}
@@ -11,7 +11,7 @@ index 92eb3f11ea8035ce72eb5b1e110c98b1ef8665d1..e6b91ecfa8f16d2b884c70468ec1d3a0
${EndIf}
SectionEnd
@@ -1969,5 +1969,5 @@ FunctionEnd
@@ -1970,5 +1970,5 @@ FunctionEnd
Function .onGUIEnd
${OnEndCommon}

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