mirror of
https://github.com/zen-browser/desktop.git
synced 2026-01-11 15:45:31 +00:00
Compare commits
85 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e176c1ba41 | ||
|
|
8d25577bdb | ||
|
|
fc7f10aef1 | ||
|
|
44a28e2afe | ||
|
|
818b2d1af5 | ||
|
|
9147e5c10c | ||
|
|
d5727a6a1b | ||
|
|
6c84a01950 | ||
|
|
f77249e8e9 | ||
|
|
6bce6f4874 | ||
|
|
0d080ffc38 | ||
|
|
568607231f | ||
|
|
88068613a1 | ||
|
|
1e09b3fb4d | ||
|
|
4d1e091af6 | ||
|
|
b22bf7485e | ||
|
|
bcdd9c0567 | ||
|
|
05b1f52171 | ||
|
|
edfb427a23 | ||
|
|
b7fafdbf02 | ||
|
|
f39faf6638 | ||
|
|
7e7d860c9e | ||
|
|
ae93efef57 | ||
|
|
3c7fb093db | ||
|
|
ec4a55e1f8 | ||
|
|
b0f3839426 | ||
|
|
a537f0f91d | ||
|
|
11f29c12c5 | ||
|
|
e7631ce9cc | ||
|
|
481163a756 | ||
|
|
281ec6693d | ||
|
|
9820bd5772 | ||
|
|
75f4f0c3e6 | ||
|
|
591193b748 | ||
|
|
2628ba7dd8 | ||
|
|
2fd0935bf5 | ||
|
|
7683b2675a | ||
|
|
ea7024aae4 | ||
|
|
be8cbce23e | ||
|
|
9c2b8426a9 | ||
|
|
beb4f94fd2 | ||
|
|
f39ca33aa5 | ||
|
|
7743ad968c | ||
|
|
7470df4cf6 | ||
|
|
aef8400841 | ||
|
|
babd7ad871 | ||
|
|
4000cc3d55 | ||
|
|
3fc7629b3a | ||
|
|
9dbd4cdd41 | ||
|
|
3d45363c8f | ||
|
|
e118cc1a20 | ||
|
|
bc8a26223b | ||
|
|
9e6998bc1a | ||
|
|
560c92cc0e | ||
|
|
699c42cce4 | ||
|
|
f6ba087539 | ||
|
|
5fb096865c | ||
|
|
ff69cbe259 | ||
|
|
be0668561f | ||
|
|
7af0aab07f | ||
|
|
07b2a74a66 | ||
|
|
07150962a2 | ||
|
|
bfee94c7bf | ||
|
|
810d959fbf | ||
|
|
639eb9a267 | ||
|
|
ec398760c6 | ||
|
|
7a8ac8bd9c | ||
|
|
86f9031b67 | ||
|
|
335c024e6d | ||
|
|
b66b05dcf6 | ||
|
|
32a9267af2 | ||
|
|
1338b43e10 | ||
|
|
ec8b14e8f1 | ||
|
|
47c03d03c8 | ||
|
|
fb7eeebfdb | ||
|
|
d74cf98f6f | ||
|
|
2cba5b94ec | ||
|
|
6bd199a0b3 | ||
|
|
4c2cb60412 | ||
|
|
b3ea7f0e8d | ||
|
|
c761608f27 | ||
|
|
7753202623 | ||
|
|
2cc545762e | ||
|
|
578c28df92 | ||
|
|
d93c46fe20 |
@@ -15,7 +15,7 @@ fonts
|
||||
welcome
|
||||
scripts
|
||||
workflows
|
||||
winsign
|
||||
windows
|
||||
flatpak
|
||||
configs
|
||||
l10n
|
||||
3
.github/workflows/macos-release-build.yml
vendored
3
.github/workflows/macos-release-build.yml
vendored
@@ -126,8 +126,9 @@ jobs:
|
||||
export SURFER_PLATFORM="darwin"
|
||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||
# Always exist with 0, even if bootstrap fails
|
||||
./mach --no-interactive bootstrap --application-choice browser --no-system-changes --exclude macos-sdk || true
|
||||
./mach --no-interactive bootstrap --application-choice browser --exclude macos-sdk || true
|
||||
cd ..
|
||||
ls /Library/Developer/CommandLineTools/SDKs/MacOSX26.2.sdk
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
@@ -92,6 +92,7 @@ jobs:
|
||||
- name: Populate mozconfig
|
||||
env:
|
||||
SURFER_MOZCONFIG_ONLY: true
|
||||
ZEN_RELEASE: 1
|
||||
run: |
|
||||
npm run build
|
||||
cd engine
|
||||
|
||||
14
.github/workflows/sync-upstream.yml
vendored
14
.github/workflows/sync-upstream.yml
vendored
@@ -47,6 +47,12 @@ jobs:
|
||||
if: steps.check-upstream-branch.outputs.branch_exists == 'false'
|
||||
run: npm ci
|
||||
|
||||
- name: Install dependencies
|
||||
if: steps.check-upstream-branch.outputs.branch_exists == 'false'
|
||||
run: |
|
||||
git config --global user.email "mr-cheffy@users.noreply.github.com"
|
||||
git config --global user.name "mr-cheffy"
|
||||
|
||||
- name: Setup surfer CI
|
||||
if: steps.check-upstream-branch.outputs.branch_exists == 'false'
|
||||
run: |
|
||||
@@ -67,6 +73,12 @@ jobs:
|
||||
npm run sync
|
||||
fi
|
||||
|
||||
- name: Run formatter
|
||||
if: steps.check-upstream-branch.outputs.branch_exists == 'false'
|
||||
run: |
|
||||
sudo apt install python3-autopep8
|
||||
npm run pretty
|
||||
|
||||
- name: Check if any files changed
|
||||
id: git-check
|
||||
run: |
|
||||
@@ -97,7 +109,7 @@ jobs:
|
||||
|
||||
- name: Import external tests
|
||||
if: steps.git-check.outputs.files_changed == 'true'
|
||||
run: python3 scripts/import_external_tests.py
|
||||
run: python3 scripts/import_external_tests.py || true
|
||||
|
||||
- name: Create pull request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
|
||||
6
.github/workflows/windows-release-build.yml
vendored
6
.github/workflows/windows-release-build.yml
vendored
@@ -197,12 +197,14 @@ jobs:
|
||||
else
|
||||
rustup target add x86_64-pc-windows-msvc
|
||||
fi
|
||||
# Stored in build/windows/.windows-rs-version
|
||||
WINDOWS_RS_VERSION=$(cat build/windows/.windows-rs-version)
|
||||
cd engine/
|
||||
cargo install cargo-download --locked
|
||||
cargo download -x windows=0.58.0
|
||||
cargo download -x windows=$WINDOWS_RS_VERSION
|
||||
export CARGO_INCREMENTAL=0
|
||||
echo "" >> ../configs/common/mozconfig
|
||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.58.0" >> ../configs/common/mozconfig
|
||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-$WINDOWS_RS_VERSION" >> ../configs/common/mozconfig
|
||||
|
||||
- name: Build language packs
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
|
||||
@@ -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 `146.0.1`! 🚀
|
||||
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 146.0.1`!
|
||||
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 147.0`!
|
||||
|
||||
### Contributing
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
b6f4d18893d4f547f01d5e8aa8a4b364b168c84f
|
||||
459ca9dfb9642c48c4ae314ce489d462b25448a8
|
||||
1
build/windows/.windows-rs-version
Normal file
1
build/windows/.windows-rs-version
Normal file
@@ -0,0 +1 @@
|
||||
0.62.2
|
||||
@@ -47,6 +47,8 @@ if test "$ZEN_RELEASE"; then
|
||||
# ac_add_options --enable-clang-plugin
|
||||
ac_add_options --enable-bootstrap=-sccache
|
||||
|
||||
ac_add_options --enable-optimize
|
||||
|
||||
ac_add_options --enable-release
|
||||
ac_add_options --disable-debug
|
||||
ac_add_options --disable-debug-symbols
|
||||
@@ -56,8 +58,6 @@ if test "$ZEN_RELEASE"; then
|
||||
ac_add_options --enable-rust-simd
|
||||
ac_add_options --enable-wasm-simd
|
||||
|
||||
mk_add_options MOZ_PARALLEL_COMPILE=1
|
||||
|
||||
ac_add_options --disable-geckodriver
|
||||
ac_add_options --disable-rust-tests
|
||||
|
||||
@@ -73,24 +73,13 @@ if test "$ZEN_RELEASE"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
ac_add_options --enable-jemalloc
|
||||
|
||||
mk_add_options MOZILLA_OFFICIAL=1
|
||||
MOZILLA_OFFICIAL=1
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export OPT_LEVEL="3"
|
||||
ac_add_options OPT_LEVEL="3"
|
||||
|
||||
export RUSTC_OPT_LEVEL="3"
|
||||
ac_add_options RUSTC_OPT_LEVEL="3"
|
||||
|
||||
mk_add_options AUTOCLOBBER=1
|
||||
export AUTOCLOBBER=1
|
||||
|
||||
ac_add_options --enable-updater
|
||||
|
||||
ac_add_options --enable-js-shell
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
||||
ac_add_options --disable-crashreporter
|
||||
|
||||
@@ -17,30 +17,16 @@ if test "$ZEN_RELEASE"; then
|
||||
ac_add_options --enable-eme=widevine
|
||||
|
||||
# Enable Profile Guided Optimization
|
||||
if test "$ZEN_GA_DISABLE_PGO"; then
|
||||
export ZEN_DUMMY=1
|
||||
else
|
||||
export MOZ_PGO=1
|
||||
ac_add_options MOZ_PGO=1
|
||||
if ! test "$ZEN_GA_DISABLE_PGO"; then
|
||||
export MOZ_PGO=1
|
||||
ac_add_options MOZ_PGO=1
|
||||
fi
|
||||
|
||||
# Optimization flags for SURFER_COMPAT
|
||||
ac_add_options --enable-optimize="-O3 -w -ftree-vectorize -mfpmath=sse -mprfchw -msse3 -mcx16 -msahf"
|
||||
|
||||
export LDFLAGS="$LDFLAGS -Wl,-O3"
|
||||
elif test "$SURFER_COMPAT" = "aarch64"; then
|
||||
ac_add_options --target=aarch64-linux-gnu
|
||||
|
||||
ac_add_options --enable-optimize="-O3"
|
||||
|
||||
# override LTO settings
|
||||
export MOZ_LTO=cross,thin
|
||||
ac_add_options --enable-lto=cross,thin
|
||||
|
||||
export CFLAGS="$CFLAGS -O3"
|
||||
export CPPFLAGS="$CPPFLAGS -O3"
|
||||
export CXXFLAGS="$CXXFLAGS -O3"
|
||||
export LDFLAGS="$LDFLAGS -Wl,-O3"
|
||||
fi
|
||||
|
||||
# Disable DMD and ELF hacks, enable linker lld
|
||||
|
||||
@@ -28,28 +28,31 @@ if test "$SURFER_COMPAT" = "x86_64"; then
|
||||
|
||||
if test "$ZEN_RELEASE"; then
|
||||
ac_add_options --enable-wasm-avx
|
||||
ac_add_options --enable-optimize="-march=nehalem -mtune=haswell -O3 -w"
|
||||
|
||||
export CFLAGS="-O3 -march=nehalem"
|
||||
export CPPFLAGS="-O3 -march=nehalem"
|
||||
export CXXFLAGS="-O3 -march=nehalem"
|
||||
export LDFLAGS="-Wl,-O3 -march=nehalem"
|
||||
export RUSTFLAGS="-Ctarget-cpu=nehalem"
|
||||
fi
|
||||
else
|
||||
ac_add_options --enable-clang-plugin
|
||||
ac_add_options --target=aarch64-apple-darwin
|
||||
|
||||
if test "$ZEN_RELEASE"; then
|
||||
ac_add_options --enable-optimize="-O3 -mcpu=apple-m1 -march=armv8.3-a+simd"
|
||||
|
||||
# As of Clang 13, the default is -mcpu=apple-m1 when using a aarch64-apple-macos target,
|
||||
# but we're using apple64-apple-darwin, which defaults to -mcpu=apple-a7, which disables
|
||||
# a bunch of # performance-enabling CPU features.
|
||||
export CFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
|
||||
export CPPFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
|
||||
export CXXFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
|
||||
export LDFLAGS="-Wl,-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
|
||||
export RUSTFLAGS="-C target-feature=+v8.3a -Ctarget-cpu=apple-m1"
|
||||
# TODO: We'll want to switch to aarch64-apple-macos eventually.
|
||||
export CFLAGS="$CFLAGS -mcpu=apple-m1"
|
||||
export CXXFLAGS="$CXXFLAGS -mcpu=apple-m1"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$ZEN_RELEASE"; then
|
||||
ac_add_options --with-macos-sdk=/Library/Developer/CommandLineTools/SDKs/MacOSX26.2.sdk
|
||||
fi
|
||||
|
||||
# Keep using ld64 on PGO/LTO builds because of performance regressions when using lld.
|
||||
# Mozilla sets "MOZ_LD64_KNOWN_GOOD" to true when they do automated builds with PGO/LTO on macOS.
|
||||
# See https://searchfox.org/firefox-main/rev/e61d59b5c9a651fd7bf28043f87c0dc669833496/build/moz.configure/lto-pgo.configure#261
|
||||
# export MOZ_LD64_KNOWN_GOOD=1
|
||||
# ac_add_options --enable-linker=ld64
|
||||
#
|
||||
# if test "$ZEN_RELEASE"; then
|
||||
# mk_add_options MOZ_MAKE_FLAGS="-j4"
|
||||
# fi
|
||||
|
||||
@@ -30,34 +30,19 @@ ac_add_options --disable-maintenance-service
|
||||
ac_add_options --disable-bits-download
|
||||
|
||||
if test "$SURFER_COMPAT" = "x86_64"; then
|
||||
|
||||
ac_add_options --target=x86_64-pc-windows-msvc
|
||||
ac_add_options --enable-eme=widevine,wmfcdm
|
||||
|
||||
ac_add_options --enable-optimize="-O3 -w -ftree-vectorize -mfpmath=sse -mprfchw -msse3 -mcx16 -msahf"
|
||||
|
||||
export LDFLAGS="-Wl,-O3"
|
||||
export RUSTFLAGS="-Clink-args=--icf=safe"
|
||||
elif test "$SURFER_COMPAT" = "aarch64"; then
|
||||
ac_add_options --target=aarch64-pc-windows-msvc
|
||||
ac_add_options --enable-eme=widevine
|
||||
|
||||
ac_add_options --enable-optimize="-O2 -mtune=cortex-a55 -march=armv8.2-a+simd"
|
||||
|
||||
# override LTO settings
|
||||
export MOZ_LTO=cross,thin
|
||||
ac_add_options --enable-lto=cross,thin
|
||||
|
||||
export CFLAGS="-O2 -march=armv8.2-a+simd -mtune=cortex-a55"
|
||||
export CPPFLAGS="-O2 -march=armv8.2-a+simd -mtune=cortex-a55"
|
||||
export CXXFLAGS="-O2 -march=armv8.2-a+simd -mtune=cortex-a55"
|
||||
export LDFLAGS="-Wl,-O2 -march=armv8.2-a+simd -mtune=cortex-a55"
|
||||
export RUSTFLAGS="-C target-feature=+v8.2a -Ctarget-cpu=cortex-a55"
|
||||
fi
|
||||
|
||||
if test "$ZEN_CROSS_COMPILING"; then
|
||||
if test "$ZEN_GA_GENERATE_PROFILE"; then
|
||||
export CXXFLAGS="$CXXFLAGS -fprofile-generate -mllvm -enable-name-compression=false -mllvm -pgo-temporal-instrumentation -fprofile-update=atomic"
|
||||
mk_add_options "export MOZ_AUTOMATION_PACKAGE_GENERATED_SOURCES=0"
|
||||
ac_add_options --enable-profile-generate=cross
|
||||
elif test "$SURFER_COMPAT" = "x86_64"; then
|
||||
|
||||
@@ -8,6 +8,8 @@ files:
|
||||
translation: browser/browser/zen-general.ftl
|
||||
- source: en-US/browser/browser/zen-split-view.ftl
|
||||
translation: browser/browser/zen-split-view.ftl
|
||||
- source: en-US/browser/browser/zen-menubar.ftl
|
||||
translation: browser/browser/zen-menubar.ftl
|
||||
- source: en-US/browser/browser/zen-vertical-tabs.ftl
|
||||
translation: browser/browser/zen-vertical-tabs.ftl
|
||||
- source: en-US/browser/browser/zen-welcome.ftl
|
||||
|
||||
178
docs/issue-metrics/2025_2025-12-01..2025-12-31.md
Normal file
178
docs/issue-metrics/2025_2025-12-01..2025-12-31.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# Issue Metrics
|
||||
|
||||
| Metric | Average | Median | 90th percentile |
|
||||
| --- | --- | --- | ---: |
|
||||
| Time to first response | 1 day, 0:30:20 | 5:02:49 | 2 days, 2:05:28 |
|
||||
| Time to close | 1 day, 6:06:03 | 15:57:36 | 3 days, 0:29:29 |
|
||||
|
||||
| Metric | Count |
|
||||
| --- | ---: |
|
||||
| Number of items that remain open | 75 |
|
||||
| Number of items closed | 85 |
|
||||
| Total number of items created | 160 |
|
||||
|
||||
| Title | URL | Time to first response | Time to close |
|
||||
| --- | --- | --- | --- |
|
||||
| Downloads with "always ask you where to save files" occur twice -- in the downloads folder as well as in the path specified after popup | https://github.com/zen-browser/desktop/issues/11779 | None | None |
|
||||
| Change tab to a different workspace option is not visible | https://github.com/zen-browser/desktop/issues/11778 | 20:10:39 | 20:10:39 |
|
||||
| Closing Tab Does Not Go To Previous Tab for Pinned tabs | https://github.com/zen-browser/desktop/issues/11775 | None | None |
|
||||
| Folders tab glance not working on Windows v1.17.15b (64-bit) | https://github.com/zen-browser/desktop/issues/11774 | 1 day, 2:08:49 | None |
|
||||
| Browser Layout resets after Toggle Sidebar's Width | https://github.com/zen-browser/desktop/issues/11771 | 1 day, 5:27:23 | 1 day, 5:27:23 |
|
||||
| PDF Download | https://github.com/zen-browser/desktop/issues/11768 | 1 day, 5:48:10 | 1 day, 5:48:10 |
|
||||
| “Show search suggestions” setting unchecks itself | Settings UI value not synced with about:config | https://github.com/zen-browser/desktop/issues/11767 | 1 day, 6:26:12 | 1 day, 6:26:12 |
|
||||
| Full screen mode not working in YouTube while using Glance mode | https://github.com/zen-browser/desktop/issues/11766 | 1:59:37 | None |
|
||||
| Guacamole paste | https://github.com/zen-browser/desktop/issues/11765 | 2:04:31 | 2:04:31 |
|
||||
| Workspace icons as dots | https://github.com/zen-browser/desktop/issues/11763 | 0:03:17 | 0:23:41 |
|
||||
| Printing Issue | https://github.com/zen-browser/desktop/issues/11762 | 11:29:55 | None |
|
||||
| My profiles folder is not loading after the last update. | https://github.com/zen-browser/desktop/issues/11761 | 3:00:38 | None |
|
||||
| Video Playback Issues | https://github.com/zen-browser/desktop/issues/11760 | 16:12:17 | 16:12:17 |
|
||||
| When closing the window on mac and reopening the browser, the session isn't restored | https://github.com/zen-browser/desktop/issues/11759 | None | 17:41:15 |
|
||||
| Identical filenames for clipboard images (image.png) prevents multiple uploads in Gemini | https://github.com/zen-browser/desktop/issues/11758 | 18:30:44 | 18:30:44 |
|
||||
| Search suggestions cannot be hidden | https://github.com/zen-browser/desktop/issues/11755 | 1:14:56 | 1 day, 3:42:17 |
|
||||
| [Bug] [Twilight] [Win 11] New window in virtual desktop bugs and opens several new windows | https://github.com/zen-browser/desktop/issues/11754 | 1 day, 10:56:04 | 2 days, 18:04:04 |
|
||||
| [Twilight] Pinned tab reset when restart | https://github.com/zen-browser/desktop/issues/11751 | 2 days, 2:05:28 | 2 days, 8:02:26 |
|
||||
| Profile locks are being ignored, causing weird synced behavior | https://github.com/zen-browser/desktop/issues/11750 | 11:19:12 | None |
|
||||
| selecting tabs, Right Click to add them to a New Folder no longer works | https://github.com/zen-browser/desktop/issues/11745 | 2:42:55 | 3 days, 0:31:33 |
|
||||
| When Zen Browser is set as the default browser, it cannot open links clicked from external applications under KDE. | https://github.com/zen-browser/desktop/issues/11743 | 7:19:40 | 7:19:40 |
|
||||
| After updating all the folders and essential tabs are empty | https://github.com/zen-browser/desktop/issues/11741 | 4:15:52 | 3 days, 5:50:29 |
|
||||
| Poor performance in OnShape | https://github.com/zen-browser/desktop/issues/11740 | None | None |
|
||||
| Can't hide tab groups. | https://github.com/zen-browser/desktop/issues/11739 | 2:27:37 | 7:47:28 |
|
||||
| Cannot install extension via local file if sidebar and toolbar are hidden | https://github.com/zen-browser/desktop/issues/11738 | None | 8:26:16 |
|
||||
| [Bug] White space padding below minimized parent folder containing partially minimized subfolders | https://github.com/zen-browser/desktop/issues/11736 | 3 days, 14:36:08 | 3 days, 14:36:08 |
|
||||
| Youtube Shorts Video is hidden out of view, but loaded | https://github.com/zen-browser/desktop/issues/11734 | 5:52:53 | None |
|
||||
| Websites not funcationing correctly in latest version | https://github.com/zen-browser/desktop/issues/11733 | 0:15:44 | 0:15:44 |
|
||||
| Sidebar not hiding when in compact mode | https://github.com/zen-browser/desktop/issues/11732 | None | None |
|
||||
| Lag when restoring sessions with addons like Tab Session Manager? | https://github.com/zen-browser/desktop/issues/11731 | 10:52:46 | None |
|
||||
| Crash and no load video | https://github.com/zen-browser/desktop/issues/11729 | 0:35:39 | 0:35:39 |
|
||||
| Bug: Right-Click Menu Text Not Visible | https://github.com/zen-browser/desktop/issues/11728 | 5:49:57 | None |
|
||||
| Firefox Extension pop-up doesnt open when side-panel is hidden | https://github.com/zen-browser/desktop/issues/11727 | None | 0:55:53 |
|
||||
| Master Password Prompt on duckai | https://github.com/zen-browser/desktop/issues/11725 | None | None |
|
||||
| [Twilight] Spaces are removed after updating to December 25 version | https://github.com/zen-browser/desktop/issues/11724 | 2:03:12 | None |
|
||||
| Memory leak on arch linux? | https://github.com/zen-browser/desktop/issues/11721 | 5:03:16 | None |
|
||||
| Upgrade to 1.18t lost everything. | https://github.com/zen-browser/desktop/issues/11720 | 5:02:49 | 5:14:44 |
|
||||
| Can't show Kaomoji on Zen. (Special unicode characters Chinese, Korean, Japanese, etc) | https://github.com/zen-browser/desktop/issues/11719 | 1:28:17 | 2 days, 22:27:07 |
|
||||
| Inconsistent Essential tabs unloading | https://github.com/zen-browser/desktop/issues/11717 | 3:40:23 | None |
|
||||
| browser is laggy | https://github.com/zen-browser/desktop/issues/11715 | 9:19:37 | 18:42:49 |
|
||||
| Duplicate “Find on Page” entry in Search & Find shortcut settings | https://github.com/zen-browser/desktop/issues/11714 | None | None |
|
||||
| Zen sets itself as default | https://github.com/zen-browser/desktop/issues/11712 | 0:17:54 | None |
|
||||
| Zen does not display data in IndexedDB while on localhost | https://github.com/zen-browser/desktop/issues/11711 | 10:12:55 | 18:12:11 |
|
||||
| YouTube fullscreen controls are cut off when Zen Browser is in fullscreen mode | https://github.com/zen-browser/desktop/issues/11710 | None | 10:16:10 |
|
||||
| Chess.com doesn't fit on a page since last update | https://github.com/zen-browser/desktop/issues/11708 | 0:14:05 | 0:14:05 |
|
||||
| YouTube videos lose contrast when in full screen mode. | https://github.com/zen-browser/desktop/issues/11706 | 6:06:04 | None |
|
||||
| Disappeared Font Rendering on Wayland Zen Browser | https://github.com/zen-browser/desktop/issues/11705 | None | 2:45:33 |
|
||||
| TopCV website doesn't displayed correctly | https://github.com/zen-browser/desktop/issues/11704 | 7:52:49 | None |
|
||||
| Zen not remembering where the tabs opened in the previous sessions. | https://github.com/zen-browser/desktop/issues/11700 | None | 3:04:19 |
|
||||
| When RestoreDown/maximazing/moving browser the video in Picture-in-Picture mode is returning to the tab by itself | https://github.com/zen-browser/desktop/issues/11698 | 15:05:45 | None |
|
||||
| I can't continue from where I left off; I need to log in again. | https://github.com/zen-browser/desktop/issues/11695 | 4:19:58 | 4:19:58 |
|
||||
| Drag addressbar Link to Desktop no longer works | https://github.com/zen-browser/desktop/issues/11694 | 8:13:08 | None |
|
||||
| opening a link from external application on zen browser | https://github.com/zen-browser/desktop/issues/11692 | 0:08:44 | 0:08:44 |
|
||||
| Widow border highlight is diffrent depending of the platform | https://github.com/zen-browser/desktop/issues/11691 | 3:53:57 | 3:53:57 |
|
||||
| Vertical maximize via mouse (Aero Snap) does not work in Zen Browser | https://github.com/zen-browser/desktop/issues/11690 | None | None |
|
||||
| Some styles appear to be displaying abnormally (context menu, Library) | https://github.com/zen-browser/desktop/issues/11689 | None | None |
|
||||
| Moving pinned tabs with media playing between windows broken | https://github.com/zen-browser/desktop/issues/11688 | None | None |
|
||||
| Context menu on tabs says "workspace" instead of "space" | https://github.com/zen-browser/desktop/issues/11686 | None | 1 day, 0:02:12 |
|
||||
| Can't change folder name | https://github.com/zen-browser/desktop/issues/11683 | 1:50:39 | 6:38:14 |
|
||||
| Opening DevTools make the browser crash | https://github.com/zen-browser/desktop/issues/11681 | 0:35:01 | 0:35:01 |
|
||||
| ZEN DOES NOT UPDATE AUTOMATICALLY | https://github.com/zen-browser/desktop/issues/11680 | 0:41:30 | 19:54:17 |
|
||||
| Visual glitches while scrolling in the bottom of the page. | https://github.com/zen-browser/desktop/issues/11678 | None | None |
|
||||
| Full screen mode not occupying complete available screen space. | https://github.com/zen-browser/desktop/issues/11676 | None | None |
|
||||
| On Mac, first item in bookmarks toolbar disappears after closing window and reopening (without closing app) | https://github.com/zen-browser/desktop/issues/11674 | None | None |
|
||||
| Some web pages freeze for aparently no reason | https://github.com/zen-browser/desktop/issues/11668 | 0:34:14 | None |
|
||||
| Unable to install Browser Addons in Compact Mode | https://github.com/zen-browser/desktop/issues/11667 | 7:01:49 | None |
|
||||
| WebGL2 is not working | https://github.com/zen-browser/desktop/issues/11665 | None | 0:04:30 |
|
||||
| Tab dissapeared after reopening browser after lagging | https://github.com/zen-browser/desktop/issues/11662 | None | None |
|
||||
| High CPU usage on idle and even higher CPU usage when opening Twitch (even in Troubleshoot Mode) | https://github.com/zen-browser/desktop/issues/11661 | 1:32:07 | 1:47:33 |
|
||||
| Audio stopped working - Mac | https://github.com/zen-browser/desktop/issues/11660 | None | 23:33:37 |
|
||||
| Zorin os freeze/crash on video playback | https://github.com/zen-browser/desktop/issues/11657 | None | None |
|
||||
| "Material Icons" not displaying correctly (but they are in Firefox desktop app) | https://github.com/zen-browser/desktop/issues/11656 | 5:10:45 | None |
|
||||
| Browser Padding top bar not removable | https://github.com/zen-browser/desktop/issues/11654 | 3:40:52 | 3:40:52 |
|
||||
| Update to 1.18t: 1) unresponsive on start, 2) duplicated all pinned tabs. | https://github.com/zen-browser/desktop/issues/11653 | 4:27:05 | 4:27:05 |
|
||||
| Zen doesn't save splitview configuration correctly with "open previous windows and tabs" enabled | https://github.com/zen-browser/desktop/issues/11652 | 1 day, 9:11:28 | 1 day, 9:25:45 |
|
||||
| Zen reacts to system sound device changes while watching media (youtube) only after playing with the timeline | https://github.com/zen-browser/desktop/issues/11651 | None | None |
|
||||
| Workspace is synchronized, but bookmarks within the Workspace are not synchronized as well. | https://github.com/zen-browser/desktop/issues/11650 | 9:24:51 | 9:24:51 |
|
||||
| Zen becomes unresponsive when playing YouTube videos | https://github.com/zen-browser/desktop/issues/11649 | 1 day, 19:29:58 | None |
|
||||
| proton mail sign up fails on every container except the first container | https://github.com/zen-browser/desktop/issues/11648 | None | None |
|
||||
| The translation function that comes with Firefox cannot be used after I reinstall ZEN | https://github.com/zen-browser/desktop/issues/11647 | 1 day, 13:40:21 | None |
|
||||
| Trackpad gesture doesn't work for switching between spaces | https://github.com/zen-browser/desktop/issues/11645 | 4:10:42 | 1 day, 20:43:04 |
|
||||
| 多工具栏设置无法生效 | https://github.com/zen-browser/desktop/issues/11643 | 1 day, 6:32:46 | 1 day, 18:53:53 |
|
||||
| A small section of split tabs' border is visible on glance and can be used to resize split tabs | https://github.com/zen-browser/desktop/issues/11641 | None | 2 days, 3:52:57 |
|
||||
| Opening Zen via a hyperlink doesn't open the link it was given | https://github.com/zen-browser/desktop/issues/11639 | None | 2 days, 6:06:13 |
|
||||
| Tabs don't show on hover in compact mode when "Tabs are on the right" setting is enabled | https://github.com/zen-browser/desktop/issues/11638 | 0:26:15 | None |
|
||||
| "New split view" in command bar opens a new tab instead | https://github.com/zen-browser/desktop/issues/11637 | 12:16:48 | 3 days, 3:03:38 |
|
||||
| The disappearance of the Firefox toolbar extension management icon is a bug or intentional | https://github.com/zen-browser/desktop/issues/11634 | 2:09:59 | 3 days, 0:26:24 |
|
||||
| Google reverse image search doesn't work, only uploads stripes instead of the actual image | https://github.com/zen-browser/desktop/issues/11633 | 1:34:48 | 2 days, 10:21:07 |
|
||||
| MacOS: Context Windows appear always on main monitor | https://github.com/zen-browser/desktop/issues/11632 | 3:02:07 | None |
|
||||
| update firefox version | amazon music and many more media websites not loading | https://github.com/zen-browser/desktop/issues/11631 | 0:30:37 | 0:30:37 |
|
||||
| UI Scaling issue on linux desktop | https://github.com/zen-browser/desktop/issues/11629 | 3 days, 17:28:00 | None |
|
||||
| Window can't shrink enough for W11 On-Screen Keyboard | https://github.com/zen-browser/desktop/issues/11628 | 0:50:10 | None |
|
||||
| Split tab divider can't be moved to resize with bookmarks sidebar open | https://github.com/zen-browser/desktop/issues/11626 | 2 days, 19:07:37 | None |
|
||||
| Container information cannot be saved correctly. | https://github.com/zen-browser/desktop/issues/11622 | 2:10:41 | 2:10:41 |
|
||||
| Slow syncing state and browser crashes if trying to delete a space | https://github.com/zen-browser/desktop/issues/11621 | 1 day, 13:13:35 | None |
|
||||
| Tabs not loaded in beforehand have full favicon transparency | https://github.com/zen-browser/desktop/issues/11620 | 3:00:50 | None |
|
||||
| Browser keeps crashing when playing videos or just scrolling rapidly. | https://github.com/zen-browser/desktop/issues/11618 | 3:43:34 | 7:22:44 |
|
||||
| The tab crashes when searching certain words | https://github.com/zen-browser/desktop/issues/11615 | 2 days, 0:53:45 | None |
|
||||
| Zen profile problems after update and uninstall | https://github.com/zen-browser/desktop/issues/11614 | 11:21:11 | None |
|
||||
| No button to access extension menu in order to pin when side and top bar enabled | https://github.com/zen-browser/desktop/issues/11612 | 1:54:17 | 1:54:31 |
|
||||
| Youtube crashes Zen | https://github.com/zen-browser/desktop/issues/11610 | 17:48:03 | None |
|
||||
| Scree gliches and flashes rapidly | https://github.com/zen-browser/desktop/issues/11606 | None | None |
|
||||
| Perplexity disappeared in the new version and the app had to installed, all my configurations dissappeared | https://github.com/zen-browser/desktop/issues/11604 | None | 6:03:27 |
|
||||
| Content under transparent menus appears frozen after menu is opened | https://github.com/zen-browser/desktop/issues/11603 | None | None |
|
||||
| Nvidia RTX video is broken again for non-fullscreen video on 1.17.13b (2025-12-11) | https://github.com/zen-browser/desktop/issues/11602 | None | None |
|
||||
| Perplexity gets removed even when added as custom search engine. | https://github.com/zen-browser/desktop/issues/11601 | 9:10:41 | 19:37:58 |
|
||||
| No content is displaying, just transparent browser | https://github.com/zen-browser/desktop/issues/11599 | 9:27:02 | 1 day, 10:30:08 |
|
||||
| Bookmarks Side-Panel Font is white on white background when using Windows 11 Dark Theme | https://github.com/zen-browser/desktop/issues/11597 | None | 9 days, 3:57:43 |
|
||||
| Can't download files from Element | https://github.com/zen-browser/desktop/issues/11596 | 3:27:57 | None |
|
||||
| The toolbar breaks when changing the browser layout | https://github.com/zen-browser/desktop/issues/11595 | None | None |
|
||||
| Windows Explorer doesn't open after opening a file through Zen | https://github.com/zen-browser/desktop/issues/11594 | None | None |
|
||||
| Zen launching instead of opening links | https://github.com/zen-browser/desktop/issues/11593 | None | None |
|
||||
| Missing spacing between media controls and sidebar notification | https://github.com/zen-browser/desktop/issues/11592 | None | 3:25:48 |
|
||||
| Addons (extensions) not added when side bar not open | https://github.com/zen-browser/desktop/issues/11591 | 7 days, 7:20:32 | 7 days, 7:20:32 |
|
||||
| No video streaming on Twitch.TV | https://github.com/zen-browser/desktop/issues/11590 | 1:40:34 | 2:13:10 |
|
||||
| Zen Browser loops when visiting pionex.us instead of loading and stopping | https://github.com/zen-browser/desktop/issues/11589 | 0:22:45 | 5:25:13 |
|
||||
| Firefox add-ons fail to auto update | https://github.com/zen-browser/desktop/issues/11586 | 8:36:24 | None |
|
||||
| Opening two instances (windows) of Zen Browser | https://github.com/zen-browser/desktop/issues/11585 | 1 day, 22:15:12 | None |
|
||||
| Compact mode word translation(Turkish) error in right click menu in vertical tabs | https://github.com/zen-browser/desktop/issues/11583 | 10 days, 19:56:47 | None |
|
||||
| Tab reordering does not trigger haptic feedback on MacOS | https://github.com/zen-browser/desktop/issues/11582 | None | None |
|
||||
| Blur text and content when window is maximized (but not in full full screen) on Mac using Apple Studio display | https://github.com/zen-browser/desktop/issues/11580 | 1:53:06 | 5:20:16 |
|
||||
| Closing a recently opened tab returns to the top tab, not the previously focused tab | https://github.com/zen-browser/desktop/issues/11576 | 9 days, 1:26:27 | None |
|
||||
| Toolbar appearing on hover in compact mode results in jittery page | https://github.com/zen-browser/desktop/issues/11575 | 1:27:27 | None |
|
||||
| Firefox Sync doesn't sync extensions to new instance | https://github.com/zen-browser/desktop/issues/11574 | None | None |
|
||||
| Spotify no sound | https://github.com/zen-browser/desktop/issues/11570 | 0:02:19 | 0:35:22 |
|
||||
| performance issue | https://github.com/zen-browser/desktop/issues/11569 | 1:49:29 | 1:49:28 |
|
||||
| [macOS] Default Unsplit shortcut (Opt+Cmd+U) conflicts with native 'View Source' binding | https://github.com/zen-browser/desktop/issues/11568 | 6 days, 13:28:07 | None |
|
||||
| pdf markup undo would undo random things a few steps prior. | https://github.com/zen-browser/desktop/issues/11567 | None | None |
|
||||
| Changing keyboard language closes tab bar | https://github.com/zen-browser/desktop/issues/11563 | 3:38:59 | 3:38:59 |
|
||||
| Zen started randomly crashing | https://github.com/zen-browser/desktop/issues/11562 | 3:49:51 | 4 days, 5:32:07 |
|
||||
| "Show all tabs" keyboard shortcut not working | https://github.com/zen-browser/desktop/issues/11560 | 13 days, 1:31:35 | None |
|
||||
| Unable to go full screen when in split view | https://github.com/zen-browser/desktop/issues/11559 | None | None |
|
||||
| Closing sequence of windows, makes Zen loose all the unpinned tabs | https://github.com/zen-browser/desktop/issues/11558 | 7 days, 12:45:23 | None |
|
||||
| Discord Link on https://zen-browser.app/ is Invalid | https://github.com/zen-browser/desktop/issues/11557 | 22:21:31 | 22:21:31 |
|
||||
| Zen Browser not saving the tabs I had - V1.17.12b | https://github.com/zen-browser/desktop/issues/11555 | 4:07:02 | 2 days, 7:05:04 |
|
||||
| Hidden Navbar Not Triggering on Hover (Compact Mode) | https://github.com/zen-browser/desktop/issues/11554 | 1 day, 0:22:48 | None |
|
||||
| Dom manipulation causes massive performance issues | https://github.com/zen-browser/desktop/issues/11553 | 5:49:40 | None |
|
||||
| "Unload and switch to tab" button kills navigation history | https://github.com/zen-browser/desktop/issues/11552 | None | None |
|
||||
| Bookmarks in a folder open in reverse order | https://github.com/zen-browser/desktop/issues/11551 | None | 0:05:28 |
|
||||
| If glance tab opens in a different container than parent tab, glance tab is moved to a regular new tab | https://github.com/zen-browser/desktop/issues/11544 | None | None |
|
||||
| New tab not opening the normal homepage but opening the floating searchbar instead | https://github.com/zen-browser/desktop/issues/11543 | 0:19:37 | 1:16:54 |
|
||||
| After my Mac wakes from sleep, Zen often stops loading pages for a few minutes. | https://github.com/zen-browser/desktop/issues/11541 | 7 days, 2:10:40 | None |
|
||||
| Boxes in the Background | https://github.com/zen-browser/desktop/issues/11538 | None | None |
|
||||
| Zen Browser Icon disappears from taskbar when the app isn't pinned | https://github.com/zen-browser/desktop/issues/11536 | 1:32:38 | None |
|
||||
| The Space Icon/Name overlaps the New Tab Button when many tabs are open | https://github.com/zen-browser/desktop/issues/11531 | None | 0:01:23 |
|
||||
| full screen does not hide the side/top bars | https://github.com/zen-browser/desktop/issues/11530 | 1 day, 1:45:36 | 1 day, 1:45:36 |
|
||||
| Floading Bookmarks Bar Issue | https://github.com/zen-browser/desktop/issues/11529 | 2:18:35 | 13 days, 19:33:54 |
|
||||
| Bug on Youtube Playing | https://github.com/zen-browser/desktop/issues/11528 | 0:26:20 | 15:57:36 |
|
||||
| Site display issue on nokotime.com | https://github.com/zen-browser/desktop/issues/11525 | 7:58:19 | 1 day, 21:13:57 |
|
||||
| can't load twitch page after update 1.17.12b | https://github.com/zen-browser/desktop/issues/11524 | 0:03:23 | 0:05:16 |
|
||||
| Browser layout does not return to Single Toolbar after expanding Collapsed Sidebar, reverts to dual toolbars instead. | https://github.com/zen-browser/desktop/issues/11521 | 0:40:45 | 0:40:45 |
|
||||
| Can't play youtube live video after update | https://github.com/zen-browser/desktop/issues/11518 | 0:42:10 | 16:06:02 |
|
||||
| Mouse back/forward button didn't work anymore to switch between workspaces | https://github.com/zen-browser/desktop/issues/11517 | 0:44:38 | 0:53:37 |
|
||||
| Bug on youtube | https://github.com/zen-browser/desktop/issues/11514 | 2 days, 17:49:10 | 2 days, 17:49:10 |
|
||||
| Manual install issue | https://github.com/zen-browser/desktop/issues/11511 | 5:05:51 | 18:53:21 |
|
||||
| Tab misplacements and Slow Internet Performance | https://github.com/zen-browser/desktop/issues/11510 | None | 0:13:33 |
|
||||
| Incorrect origin point of glance animation when opening from split view | https://github.com/zen-browser/desktop/issues/11506 | None | None |
|
||||
| Zen using passkey from apple keychain instead vaultwarden | https://github.com/zen-browser/desktop/issues/11498 | 1:10:26 | 1 day, 8:36:24 |
|
||||
| Sidebar jitters due to trying to render more buttons than it can fit (at the top) | https://github.com/zen-browser/desktop/issues/11497 | None | None |
|
||||
| z index mismatch on this page is slowing down your page modal | https://github.com/zen-browser/desktop/issues/11496 | None | 3 days, 21:12:36 |
|
||||
|
||||
_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-12-01..2025-12-31`
|
||||
@@ -353,3 +353,4 @@ zen-devtools-toggle-storage-shortcut = Toggle Storage
|
||||
zen-devtools-toggle-dom-shortcut = Toggle DOM
|
||||
zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility
|
||||
zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs
|
||||
zen-new-unsynced-window-shortcut = New Unsynced Window
|
||||
|
||||
@@ -23,9 +23,6 @@ zen-folders-panel-convert-folder-to-space =
|
||||
zen-folders-panel-change-folder-space =
|
||||
.label = Change Space...
|
||||
|
||||
zen-folders-panel-change-icon-folder =
|
||||
.label = Change Icon
|
||||
|
||||
zen-folders-unload-all-tooltip =
|
||||
.tooltiptext = Unload active in this folder
|
||||
|
||||
|
||||
@@ -18,6 +18,10 @@ tab-context-zen-remove-essential =
|
||||
tab-context-zen-replace-pinned-url-with-current =
|
||||
.label = Replace Pinned URL with Current
|
||||
.accesskey = C
|
||||
tab-context-zen-edit-title =
|
||||
.label = Change Label...
|
||||
tab-context-zen-edit-icon =
|
||||
.label = Change Icon...
|
||||
|
||||
zen-themes-corrupted = Your { -brand-short-name } mods file is corrupted. They have been reset to the default theme.
|
||||
zen-shortcuts-corrupted = Your { -brand-short-name } shortcuts file is corrupted. They have been reset to the default shortcuts.
|
||||
@@ -33,7 +37,6 @@ pictureinpicture-minimize-btn =
|
||||
.tooltip = Minimize
|
||||
|
||||
zen-panel-ui-gradient-generator-custom-color = Custom Color
|
||||
zen-panel-ui-gradient-generator-saved-message = Successfully saved the gradient!
|
||||
|
||||
zen-copy-current-url-confirmation = Copied current URL!
|
||||
|
||||
@@ -47,12 +50,6 @@ zen-tabs-renamed = Tab has been successfully renamed!
|
||||
zen-background-tab-opened-toast = New background tab opened!
|
||||
zen-workspace-renamed-toast = Workspace has been successfully renamed!
|
||||
|
||||
zen-library-sidebar-workspaces =
|
||||
.label = Spaces
|
||||
|
||||
zen-library-sidebar-mods =
|
||||
.label = Mods
|
||||
|
||||
zen-toggle-compact-mode-button =
|
||||
.label = Compact Mode
|
||||
.tooltiptext = Toggle Compact Mode
|
||||
|
||||
23
locales/en-US/browser/browser/zen-menubar.ftl
Normal file
23
locales/en-US/browser/browser/zen-menubar.ftl
Normal file
@@ -0,0 +1,23 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
zen-menubar-toggle-pinned-tabs =
|
||||
.label =
|
||||
{ $pinnedAreCollapsed ->
|
||||
[true] Expand Pinned Tabs
|
||||
*[false] Collapse Pinned Tabs
|
||||
}
|
||||
|
||||
zen-menubar-appearance =
|
||||
.label = Appearance
|
||||
|
||||
zen-menubar-appearance-description =
|
||||
.label = Websites will use:
|
||||
|
||||
zen-menubar-appearance-auto =
|
||||
.label = Automatic
|
||||
zen-menubar-appearance-light =
|
||||
.label = Light
|
||||
zen-menubar-appearance-dark =
|
||||
.label = Dark
|
||||
@@ -4,6 +4,9 @@
|
||||
|
||||
zen-panel-ui-workspaces-text = Spaces
|
||||
|
||||
zen-panel-ui-spaces-label =
|
||||
.label = Spaces
|
||||
|
||||
zen-panel-ui-workspaces-create =
|
||||
.label = Create Space
|
||||
|
||||
@@ -43,12 +46,8 @@ zen-workspaces-panel-context-edit =
|
||||
.label = Edit Space
|
||||
.accesskey = E
|
||||
|
||||
context-zen-change-workspace-tab =
|
||||
.label = Change Tab(s) To Workspace
|
||||
.accesskey = C
|
||||
|
||||
zen-bookmark-edit-panel-workspace-selector =
|
||||
.value = Workspaces
|
||||
.value = Spaces
|
||||
.accesskey = W
|
||||
|
||||
zen-panel-ui-gradient-generator-algo-complementary =
|
||||
@@ -66,6 +65,10 @@ zen-panel-ui-gradient-click-to-add = Click to add a color
|
||||
zen-workspace-creation-name =
|
||||
.placeholder = Space Name
|
||||
|
||||
zen-move-tab-to-workspace-button =
|
||||
.label = Move To...
|
||||
.tooltiptext = Move all tabs in this window to a Space
|
||||
|
||||
zen-workspaces-panel-context-reorder =
|
||||
.label = Reorder Spaces
|
||||
|
||||
@@ -83,3 +86,9 @@ zen-workspaces-close-all-unpinned-tabs-toast = Tabs Closed! Use <span>{ $shortcu
|
||||
zen-workspaces-close-all-unpinned-tabs-title =
|
||||
.label = Clear
|
||||
.tooltiptext = Close all unpinned tabs
|
||||
|
||||
zen-panel-ui-workspaces-change-forward =
|
||||
.label = Next Space
|
||||
|
||||
zen-panel-ui-workspaces-change-back =
|
||||
.label = Previous Space
|
||||
|
||||
228
package-lock.json
generated
228
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -49,13 +49,11 @@
|
||||
"url": "https://github.com/zen-browser/desktop/issues"
|
||||
},
|
||||
"homepage": "https://github.com/zen-browser/desktop#readme",
|
||||
"dependencies": {
|
||||
"@zen-browser/surfer": "^1.12.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/preset-typescript": "^7.27.0",
|
||||
"@eslint/js": "^9.32.0",
|
||||
"@microsoft/eslint-plugin-sdl": "^1.1.0",
|
||||
"@zen-browser/surfer": "^1.13.0",
|
||||
"eslint": "^9.32.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-html": "^8.1.3",
|
||||
|
||||
@@ -65,3 +65,7 @@
|
||||
|
||||
- name: browser.tabs.closeWindowWithLastTab
|
||||
value: false
|
||||
|
||||
- name: browser.tabs.dragDrop.multiselectStacking
|
||||
value: false
|
||||
locked: true
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
value: true
|
||||
|
||||
- name: zen.folders.search.hover-delay
|
||||
value: 900 # ms
|
||||
value: 700 # ms
|
||||
|
||||
- name: zen.folders.max-subfolders
|
||||
value: 5
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
- name: zen.keyboard.shortcuts.enabled
|
||||
value: true
|
||||
|
||||
- name: zen.keyboard.shortcuts.version
|
||||
value: 0 # Empty string means default shortcuts
|
||||
|
||||
|
||||
12
prefs/zen/session-store.yaml
Normal file
12
prefs/zen/session-store.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
- name: zen.session-store.backup-file
|
||||
value: true
|
||||
|
||||
- name: zen.session-store.log
|
||||
value: '@IS_TWILIGHT@'
|
||||
|
||||
- name: zen.session-store.restore-unsynced-windows
|
||||
value: true
|
||||
6
prefs/zen/share.yaml
Normal file
6
prefs/zen/share.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
- name: zen.share.enabled
|
||||
value: true
|
||||
@@ -41,12 +41,7 @@
|
||||
|
||||
# ==== Mark: border radius ====
|
||||
|
||||
# macOS border radius
|
||||
# -1 will use platform-native values
|
||||
# Set to a positive value to override with a custom radius
|
||||
- name: zen.theme.border-radius
|
||||
value: 10
|
||||
condition: 'defined(XP_MACOSX)'
|
||||
|
||||
# non-macOS border radius
|
||||
- name: zen.theme.border-radius
|
||||
value: 8
|
||||
condition: '!defined(XP_MACOSX)'
|
||||
value: -1
|
||||
|
||||
@@ -40,14 +40,8 @@
|
||||
- name: zen.view.window.scheme
|
||||
value: 2
|
||||
|
||||
- name: zen.view.drag-and-drop.move-over-threshold
|
||||
value: 70
|
||||
|
||||
- name: zen.view.drag-and-drop.edge-zone-threshold
|
||||
value: 25
|
||||
|
||||
- name: zen.view.context-menu.refresh
|
||||
value: false
|
||||
value: '@IS_TWILIGHT@'
|
||||
|
||||
- name: zen.view.borderless-fullscreen
|
||||
value: true
|
||||
|
||||
12
prefs/zen/window-sync.yaml
Normal file
12
prefs/zen/window-sync.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
- name: zen.window-sync.enabled
|
||||
value: true
|
||||
|
||||
- name: zen.window-sync.log
|
||||
value: false
|
||||
|
||||
- name: zen.window-sync.prefer-unsynced-windows
|
||||
value: false
|
||||
@@ -32,6 +32,9 @@
|
||||
- name: zen.workspaces.separate-essentials
|
||||
value: true
|
||||
|
||||
- name: zen.workspaces.dnd-switch-padding
|
||||
value: 10
|
||||
|
||||
- name: zen.workspaces.debug
|
||||
value: '@cond'
|
||||
condition: '!defined(MOZILLA_OFFICIAL)' # Section: Pinned tabs management
|
||||
|
||||
@@ -20,6 +20,15 @@
|
||||
- name: zen.tabs.close-window-with-empty
|
||||
value: true
|
||||
|
||||
- name: zen.tabs.use-legacy-drag-and-drop
|
||||
value: false
|
||||
|
||||
- name: zen.tabs.folder-dragover-threshold-percent
|
||||
value: 20 # Percentage of folder height to trigger dragover
|
||||
|
||||
- name: zen.tabs.dnd-switch-space-delay
|
||||
value: 1000 # milliseconds
|
||||
|
||||
- name: zen.ctrlTab.show-pending-tabs
|
||||
value: false
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ def get_current_version() -> Optional[str]:
|
||||
try:
|
||||
with open(METADATA_FILENAME) as f:
|
||||
metadata = json.load(f)
|
||||
return metadata["version"]["candidate"]
|
||||
return metadata["version"]["candidate"], metadata["version"]["candidateBuild"]
|
||||
except (FileNotFoundError, json.JSONDecodeError) as e:
|
||||
print(f"Error reading current version: {e}")
|
||||
return None
|
||||
@@ -43,8 +43,10 @@ def get_rc_response() -> Optional[str]:
|
||||
tag = tag_dict["tag"]
|
||||
if (tag.startswith("FIREFOX") and tag.endswith("_BUILD1")
|
||||
and "ESR" not in tag and "b" not in tag and "ANDROID" not in tag):
|
||||
return (tag.replace("FIREFOX_", "").replace("_BUILD1",
|
||||
"").replace("_", "."))
|
||||
version = (tag.replace("FIREFOX_", "").replace("_BUILD1",
|
||||
"").replace("_", "."))
|
||||
build = int(tag.split("_BUILD")[-1])
|
||||
return version, build
|
||||
except (FileNotFoundError, json.JSONDecodeError) as e:
|
||||
print(f"Error reading RC response: {e}")
|
||||
return None
|
||||
@@ -76,15 +78,15 @@ def send_webhook(rc: str) -> None:
|
||||
print("Webhook URL not set.")
|
||||
|
||||
|
||||
def rc_should_be_updated(rc_response: str, current_version: str) -> bool:
|
||||
return rc_response and rc_response != current_version
|
||||
def rc_should_be_updated(rc_response: str, current_version: str, rc_build: int, current_build: int) -> bool:
|
||||
return rc_response and (rc_response != current_version or rc_build != current_build)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
current_version = get_current_version()
|
||||
rc_response = get_rc_response()
|
||||
current_version, current_build = get_current_version()
|
||||
rc_response, rc_build = get_rc_response()
|
||||
|
||||
if rc_should_be_updated(rc_response, current_version):
|
||||
if rc_should_be_updated(rc_response, current_version, rc_build, current_build):
|
||||
send_webhook(rc_response)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ COMPONENT_ROOT=$(pwd)/src/zen
|
||||
EXTRA_COMPONENTS=(
|
||||
"scripts"
|
||||
"workflows"
|
||||
"winsign"
|
||||
"windows"
|
||||
"flatpak"
|
||||
"configs"
|
||||
)
|
||||
|
||||
@@ -16,7 +16,7 @@ IGNORE_FILES=(
|
||||
# Recursively find all .patch files in the current directory and its subdirectories
|
||||
find src -type f -name "*.patch" | while read -r patch_file; do
|
||||
# Get the file from the inside of the file as indicated by the patch
|
||||
target_file=$(grep -m 1 -oP '(?<=\+\+\+ b/).+' "$patch_file")
|
||||
target_file=$(grep -m 1 -E '^\+\+\+ b/' "$patch_file" | sed 's/^\+\+\+ b\///')
|
||||
if [[ -z "$target_file" ]]; then
|
||||
echo "No target file found in patch: $patch_file"
|
||||
continue
|
||||
|
||||
@@ -10,4 +10,4 @@ if [ ! -f "package.json" ]; then
|
||||
fi
|
||||
|
||||
npm update @zen-browser/surfer
|
||||
npm i @zen-browser/surfer@latest
|
||||
npm i @zen-browser/surfer@latest -D
|
||||
|
||||
@@ -10,9 +10,9 @@ import shutil
|
||||
from check_rc_response import get_rc_response, rc_should_be_updated
|
||||
|
||||
|
||||
def update_rc(last_version: str):
|
||||
rc_version = get_rc_response()
|
||||
if rc_should_be_updated(rc_version, last_version):
|
||||
def update_rc(last_version: str, last_build: int):
|
||||
rc_version, rc_build = get_rc_response()
|
||||
if rc_should_be_updated(rc_version, last_version, rc_build, last_build):
|
||||
print(f"New Firefox RC version is available: {rc_version}")
|
||||
print("Removing engine directory and updating surfer.json.")
|
||||
if os.path.exists("engine"):
|
||||
@@ -21,6 +21,7 @@ def update_rc(last_version: str):
|
||||
data = json.load(f)
|
||||
with open("surfer.json", "w") as f:
|
||||
data["version"]["candidate"] = rc_version
|
||||
data["version"]["candidateBuild"] = rc_build
|
||||
json.dump(data, f, indent=2)
|
||||
print("Download the new engine by running 'npm run download'.")
|
||||
os.system("npm run download")
|
||||
@@ -28,10 +29,10 @@ def update_rc(last_version: str):
|
||||
print("No new Firefox RC version available.")
|
||||
|
||||
|
||||
def update_ff(is_rc: bool = False, last_version: str = ""):
|
||||
def update_ff(is_rc: bool = False, last_version: str = "", last_build: int = 0):
|
||||
"""Runs the npm command to sync Firefox."""
|
||||
if is_rc:
|
||||
return update_rc(last_version)
|
||||
return update_rc(last_version, last_build)
|
||||
result = os.system("npm run sync:raw")
|
||||
if result != 0:
|
||||
raise RuntimeError("Failed to sync Firefox.")
|
||||
@@ -42,7 +43,8 @@ def get_version_from_file(filename, is_rc):
|
||||
try:
|
||||
with open(filename, "r") as f:
|
||||
data = json.load(f)
|
||||
return data["version"]["version"] if not is_rc else data["version"]["candidate"]
|
||||
return (data["version"]["version"] if not is_rc else data["version"]["candidate"],
|
||||
data["version"]["candidateBuild"])
|
||||
except (FileNotFoundError, json.JSONDecodeError) as e:
|
||||
raise RuntimeError(f"Error reading version from {filename}: {e}")
|
||||
|
||||
@@ -91,9 +93,9 @@ def main():
|
||||
|
||||
try:
|
||||
if not args.just_l10n:
|
||||
last_version = get_version_from_file("surfer.json", args.rc)
|
||||
update_ff(args.rc, last_version)
|
||||
new_version = get_version_from_file("surfer.json", args.rc)
|
||||
last_version, last_build = get_version_from_file("surfer.json", args.rc)
|
||||
update_ff(args.rc, last_version, last_build)
|
||||
new_version, new_build = get_version_from_file("surfer.json", args.rc)
|
||||
update_readme(last_version, new_version, args.rc)
|
||||
print(
|
||||
f"Updated version from {last_version} to {new_version} in README.md.")
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/Cargo.lock b/Cargo.lock
|
||||
index 6f6632e9747e281aac3ea177225c03b73f25456e..06756e08041835c203490057855d537118647cd0 100644
|
||||
index 723445447f491058784992e66245e0e0f8e61e19..02816c1df3e20d96ce68f16970b8a6e38080533e 100644
|
||||
--- a/Cargo.lock
|
||||
+++ b/Cargo.lock
|
||||
@@ -4171,8 +4171,6 @@ dependencies = [
|
||||
@@ -4214,8 +4214,6 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "mime_guess"
|
||||
version = "2.0.4"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/Cargo.toml b/Cargo.toml
|
||||
index e2846a08008684f18799d75e5c28fd244c10361a..ba72071baef49ed494f78d1cc6752b53d1841f46 100644
|
||||
index 35e725043bce0b39fea550e8fb2b0ae1ff752e43..abac2042d537fcc1ce26e0e3acbf98fc2975b793 100644
|
||||
--- a/Cargo.toml
|
||||
+++ b/Cargo.toml
|
||||
@@ -232,6 +232,8 @@ moz_asserts = { path = "mozglue/static/rust/moz_asserts" }
|
||||
@@ -237,6 +237,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" }
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
|
||||
index a9612920f86ef5f37328497bf62255497e96b02d..a5643cd7e9c7a71da391408c14e00185b7db3f24 100644
|
||||
index ffa7d61ded4f2cf5866d0cb12dd9b14728a63570..5575943208a734f820758fd50a80503061934d56 100644
|
||||
--- a/browser/actors/WebRTCParent.sys.mjs
|
||||
+++ b/browser/actors/WebRTCParent.sys.mjs
|
||||
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js
|
||||
index fadcbfca95ee28140579430c0371baad0e2f216a..1947b4ab1c0b4ba0099147c9f13ae78d6e425bdf 100644
|
||||
index cfb6b8dd5443966d0635c3d7b477a68eca8fa9e0..c876890706b1a314c7760bbe1ff5e9eb57857e60 100644
|
||||
--- a/browser/base/content/browser-addons.js
|
||||
+++ b/browser/base/content/browser-addons.js
|
||||
@@ -1069,7 +1069,7 @@ var gXPInstallObserver = {
|
||||
@@ -20,7 +20,7 @@ index fadcbfca95ee28140579430c0371baad0e2f216a..1947b4ab1c0b4ba0099147c9f13ae78d
|
||||
},
|
||||
};
|
||||
|
||||
@@ -2211,7 +2211,7 @@ var gUnifiedExtensions = {
|
||||
@@ -2212,7 +2212,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 fadcbfca95ee28140579430c0371baad0e2f216a..1947b4ab1c0b4ba0099147c9f13ae78d
|
||||
const attr = anchorID + "popupnotificationanchor";
|
||||
|
||||
if (!aBrowser[attr]) {
|
||||
@@ -2222,7 +2222,7 @@ var gUnifiedExtensions = {
|
||||
@@ -2223,7 +2223,7 @@ var gUnifiedExtensions = {
|
||||
anchorID
|
||||
// Anchor on the toolbar icon to position the popup right below the
|
||||
// button.
|
||||
@@ -38,7 +38,7 @@ index fadcbfca95ee28140579430c0371baad0e2f216a..1947b4ab1c0b4ba0099147c9f13ae78d
|
||||
}
|
||||
|
||||
return anchorID;
|
||||
@@ -2547,7 +2547,7 @@ var gUnifiedExtensions = {
|
||||
@@ -2548,7 +2548,7 @@ var gUnifiedExtensions = {
|
||||
requestAnimationFrame(() => this.updateAttention());
|
||||
},
|
||||
|
||||
@@ -47,7 +47,7 @@ index fadcbfca95ee28140579430c0371baad0e2f216a..1947b4ab1c0b4ba0099147c9f13ae78d
|
||||
// A list of extension widget IDs (possibly empty).
|
||||
let widgetIDs;
|
||||
|
||||
@@ -2561,7 +2561,7 @@ var gUnifiedExtensions = {
|
||||
@@ -2562,7 +2562,7 @@ var gUnifiedExtensions = {
|
||||
}
|
||||
|
||||
// The list of overflowed extensions in the extensions panel.
|
||||
@@ -56,7 +56,7 @@ index fadcbfca95ee28140579430c0371baad0e2f216a..1947b4ab1c0b4ba0099147c9f13ae78d
|
||||
"#overflowed-extensions-list"
|
||||
);
|
||||
|
||||
@@ -2662,37 +2662,41 @@ var gUnifiedExtensions = {
|
||||
@@ -2663,37 +2663,41 @@ var gUnifiedExtensions = {
|
||||
);
|
||||
template.replaceWith(template.content);
|
||||
this._panel = document.getElementById("unified-extensions-panel");
|
||||
@@ -123,7 +123,7 @@ index fadcbfca95ee28140579430c0371baad0e2f216a..1947b4ab1c0b4ba0099147c9f13ae78d
|
||||
if (!CustomizationHandler.isCustomizing()) {
|
||||
if (aEvent) {
|
||||
if (
|
||||
@@ -2714,6 +2718,7 @@ var gUnifiedExtensions = {
|
||||
@@ -2715,6 +2719,7 @@ var gUnifiedExtensions = {
|
||||
// and no alternative content is available for display in the panel.
|
||||
const policies = this.getActivePolicies();
|
||||
if (
|
||||
@@ -131,7 +131,7 @@ index fadcbfca95ee28140579430c0371baad0e2f216a..1947b4ab1c0b4ba0099147c9f13ae78d
|
||||
policies.length &&
|
||||
!this.hasExtensionsInPanel(policies) &&
|
||||
!this.isPrivateWindowMissingExtensionsWithoutPBMAccess() &&
|
||||
@@ -2729,32 +2734,30 @@ var gUnifiedExtensions = {
|
||||
@@ -2730,32 +2735,30 @@ var gUnifiedExtensions = {
|
||||
this.blocklistAttentionInfo =
|
||||
await AddonManager.getBlocklistAttentionInfo();
|
||||
|
||||
@@ -170,7 +170,7 @@ index fadcbfca95ee28140579430c0371baad0e2f216a..1947b4ab1c0b4ba0099147c9f13ae78d
|
||||
triggerEvent: aEvent,
|
||||
});
|
||||
}
|
||||
@@ -2941,18 +2944,20 @@ var gUnifiedExtensions = {
|
||||
@@ -2942,18 +2945,20 @@ var gUnifiedExtensions = {
|
||||
this._maybeMoveWidgetNodeBack(widgetId);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml
|
||||
index afa7f8e7dd74173bf2c696bd96f7e86e8b0126bc..4847c24923f673e91eb7fb65ea6b037f38062405 100644
|
||||
index 2faed30e09511c381051bc40910a883d1d7bc10d..6ba2d0d91235ed33e4b4bad281c974b5960beaa2 100644
|
||||
--- a/browser/base/content/browser-box.inc.xhtml
|
||||
+++ b/browser/base/content/browser-box.inc.xhtml
|
||||
@@ -25,7 +25,15 @@
|
||||
@@ -25,7 +25,13 @@
|
||||
</stack>
|
||||
</vbox>
|
||||
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
|
||||
@@ -15,6 +15,10 @@ index afa7f8e7dd74173bf2c696bd96f7e86e8b0126bc..4847c24923f673e91eb7fb65ea6b037f
|
||||
+#include zen-tabbrowser-elements.inc.xhtml
|
||||
<tabpanels id="tabbrowser-tabpanels" flex="1" selectedIndex="0"/>
|
||||
</tabbox>
|
||||
<splitter id="ai-window-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="none" resizeafter="sibling" hidden="true"/>
|
||||
@@ -34,3 +40,5 @@
|
||||
</stack>
|
||||
</vbox>
|
||||
</hbox>
|
||||
+</vbox>
|
||||
+</hbox>
|
||||
|
||||
@@ -1,19 +1,13 @@
|
||||
diff --git a/browser/base/content/browser-fullScreenAndPointerLock.js b/browser/base/content/browser-fullScreenAndPointerLock.js
|
||||
index f459f3ca4048c29a32832b46ba87de8552a0ab8a..d317676e6d12d756ddf5dfbffe73050de07c2375 100644
|
||||
index 0e1aa344c084abdce40058278b12a042a4510997..50c06aaab823cb8572eee2ad53a7b709b1cfd084 100644
|
||||
--- a/browser/base/content/browser-fullScreenAndPointerLock.js
|
||||
+++ b/browser/base/content/browser-fullScreenAndPointerLock.js
|
||||
@@ -423,10 +423,10 @@ var FullScreen = {
|
||||
@@ -425,8 +425,6 @@ var FullScreen = {
|
||||
gNavToolbox.classList.toggle("fullscreen-with-menubar", shiftSize > 0);
|
||||
|
||||
let transform = shiftSize > 0 ? `translateY(${shiftSize}px)` : "";
|
||||
- gNavToolbox.style.transform = transform;
|
||||
- gURLBar.textbox.style.transform = gURLBar.textbox.hasAttribute("breakout")
|
||||
- ? transform
|
||||
- : "";
|
||||
+ //gNavToolbox.style.transform = transform;
|
||||
+ //gURLBar.textbox.style.transform = gURLBar.textbox.hasAttribute("breakout")
|
||||
+ // ? transform
|
||||
+ // : "";
|
||||
- gURLBar.style.transform = gURLBar.hasAttribute("breakout") ? transform : "";
|
||||
if (shiftSize > 0) {
|
||||
// If the mouse tracking missed our fullScreenToggler, then the toolbox
|
||||
// might not have been shown before the menubar is animated down. Make
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
|
||||
index 02f601d859ea32557af572d2499ad8be75b684b5..b1a6f66a74f75150d7e2fbc50528965bb16cb4d9 100644
|
||||
index 288a79e5fb4da24cffcb30fb4b8adc9604b15d26..bf9bd3e666dfb6298dbeec0546cae223a7bc68f0 100644
|
||||
--- a/browser/base/content/browser-init.js
|
||||
+++ b/browser/base/content/browser-init.js
|
||||
@@ -198,6 +198,7 @@ var gBrowserInit = {
|
||||
@@ -200,6 +200,7 @@ var gBrowserInit = {
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
@@ -10,7 +10,7 @@ index 02f601d859ea32557af572d2499ad8be75b684b5..b1a6f66a74f75150d7e2fbc50528965b
|
||||
gBrowser.addEventListener("DOMUpdateBlockedPopups", e =>
|
||||
PopupAndRedirectBlockerObserver.handleEvent(e)
|
||||
);
|
||||
@@ -372,6 +373,7 @@ var gBrowserInit = {
|
||||
@@ -375,6 +376,7 @@ var gBrowserInit = {
|
||||
|
||||
this._handleURIToLoad();
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
|
||||
index 15ef352c147eff781d34a3e5fa02fa791bdd6188..b0784e817ad25c7a4983e9f1cb08b293de15a99d 100644
|
||||
index 16cf3e201358d24c9216f9b06b0ba3b89684d32a..2cfa507bbdc96b8a293b18595d0beae031fe6119 100644
|
||||
--- a/browser/base/content/browser.js
|
||||
+++ b/browser/base/content/browser.js
|
||||
@@ -31,6 +31,7 @@ ChromeUtils.defineESModuleGetters(this, {
|
||||
@@ -33,6 +33,7 @@ ChromeUtils.defineESModuleGetters(this, {
|
||||
"resource://gre/modules/ContextualIdentityService.sys.mjs",
|
||||
CustomizableUI:
|
||||
"moz-src:///browser/components/customizableui/CustomizableUI.sys.mjs",
|
||||
@@ -10,7 +10,7 @@ index 15ef352c147eff781d34a3e5fa02fa791bdd6188..b0784e817ad25c7a4983e9f1cb08b293
|
||||
DevToolsSocketStatus:
|
||||
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
|
||||
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
|
||||
@@ -821,7 +822,12 @@ function UpdateBackForwardCommands(aWebNavigation) {
|
||||
@@ -819,7 +820,12 @@ function UpdateBackForwardCommands(aWebNavigation) {
|
||||
|
||||
var backDisabled = backCommand.hasAttribute("disabled");
|
||||
var forwardDisabled = forwardCommand.hasAttribute("disabled");
|
||||
@@ -24,7 +24,7 @@ index 15ef352c147eff781d34a3e5fa02fa791bdd6188..b0784e817ad25c7a4983e9f1cb08b293
|
||||
if (backDisabled) {
|
||||
backCommand.removeAttribute("disabled");
|
||||
} else {
|
||||
@@ -2297,6 +2303,8 @@ var XULBrowserWindow = {
|
||||
@@ -2305,6 +2311,8 @@ var XULBrowserWindow = {
|
||||
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
|
||||
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
|
||||
|
||||
@@ -33,7 +33,7 @@ index 15ef352c147eff781d34a3e5fa02fa791bdd6188..b0784e817ad25c7a4983e9f1cb08b293
|
||||
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
|
||||
|
||||
if (!gMultiProcessBrowser) {
|
||||
@@ -3808,7 +3816,7 @@ function warnAboutClosingWindow() {
|
||||
@@ -3818,7 +3826,7 @@ function warnAboutClosingWindow() {
|
||||
|
||||
if (!isPBWindow && !toolbar.visible) {
|
||||
return gBrowser.warnAboutClosingTabs(
|
||||
@@ -42,7 +42,7 @@ index 15ef352c147eff781d34a3e5fa02fa791bdd6188..b0784e817ad25c7a4983e9f1cb08b293
|
||||
gBrowser.closingTabsEnum.ALL
|
||||
);
|
||||
}
|
||||
@@ -3848,7 +3856,7 @@ function warnAboutClosingWindow() {
|
||||
@@ -3858,7 +3866,7 @@ function warnAboutClosingWindow() {
|
||||
return (
|
||||
isPBWindow ||
|
||||
gBrowser.warnAboutClosingTabs(
|
||||
@@ -51,7 +51,7 @@ index 15ef352c147eff781d34a3e5fa02fa791bdd6188..b0784e817ad25c7a4983e9f1cb08b293
|
||||
gBrowser.closingTabsEnum.ALL
|
||||
)
|
||||
);
|
||||
@@ -3873,7 +3881,7 @@ function warnAboutClosingWindow() {
|
||||
@@ -3883,7 +3891,7 @@ function warnAboutClosingWindow() {
|
||||
AppConstants.platform != "macosx" ||
|
||||
isPBWindow ||
|
||||
gBrowser.warnAboutClosingTabs(
|
||||
@@ -60,7 +60,7 @@ index 15ef352c147eff781d34a3e5fa02fa791bdd6188..b0784e817ad25c7a4983e9f1cb08b293
|
||||
gBrowser.closingTabsEnum.ALL
|
||||
)
|
||||
);
|
||||
@@ -4795,6 +4803,9 @@ var ConfirmationHint = {
|
||||
@@ -4806,6 +4814,9 @@ var ConfirmationHint = {
|
||||
MozXULElement.insertFTLIfNeeded("toolkit/branding/brandings.ftl");
|
||||
MozXULElement.insertFTLIfNeeded("browser/confirmationHints.ftl");
|
||||
document.l10n.setAttributes(this._message, messageId, options.l10nArgs);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js
|
||||
index 3bd7b8f6025a7df4ce5cfb66916125bce9ef3991..c408ef829b7540aec72b2307e5d4bfa34109d6cd 100644
|
||||
index 925d74575827340960706718a29426bdf079b47c..921feb0e4229706b4691a43c9fc1005cbfd90999 100644
|
||||
--- a/browser/base/content/browser-places.js
|
||||
+++ b/browser/base/content/browser-places.js
|
||||
@@ -249,6 +249,8 @@ var StarUI = {
|
||||
@@ -33,7 +33,7 @@ index 3bd7b8f6025a7df4ce5cfb66916125bce9ef3991..c408ef829b7540aec72b2307e5d4bfa3
|
||||
removeBookmarkButtonCommand: function SU_removeBookmarkButtonCommand() {
|
||||
this._removeBookmarksOnPopupHidden = true;
|
||||
this.panel.hidePopup();
|
||||
@@ -1797,6 +1814,7 @@ var BookmarkingUI = {
|
||||
@@ -1806,6 +1823,7 @@ var BookmarkingUI = {
|
||||
document.getElementById("context-bookmarkpage"),
|
||||
PanelMultiView.getViewNode(document, "panelMenuBookmarkThisPage"),
|
||||
document.getElementById("pageAction-panel-bookmark"),
|
||||
|
||||
12
src/browser/base/content/browser-profiles-js.patch
Normal file
12
src/browser/base/content/browser-profiles-js.patch
Normal file
@@ -0,0 +1,12 @@
|
||||
diff --git a/browser/base/content/browser-profiles.js b/browser/base/content/browser-profiles.js
|
||||
index fb260896c14b90734182d2f232e33350287f0209..9984a2d18dfd33e3606adac0e8c5f80f7e35e682 100644
|
||||
--- a/browser/base/content/browser-profiles.js
|
||||
+++ b/browser/base/content/browser-profiles.js
|
||||
@@ -70,6 +70,7 @@ var gProfiles = {
|
||||
},
|
||||
|
||||
toggleProfileMenus(isEnabled) {
|
||||
+ isEnabled &&= Services.prefs.getBoolPref("browser.profiles.enabled", false);
|
||||
let profilesMenu = document.getElementById("profiles-menu");
|
||||
profilesMenu.hidden = !isEnabled;
|
||||
},
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc
|
||||
index 8d97b6e669954a09afe6a46d1c79652264494e92..86877b983207c5f9852c9192ee0257a909c5ea7a 100644
|
||||
index 139f7c2617f5e4843e0072435818c859def2f6bb..6ac1467b4117e2d76102d6977f13268827b4588f 100644
|
||||
--- a/browser/base/content/browser-sets.inc
|
||||
+++ b/browser/base/content/browser-sets.inc
|
||||
@@ -406,3 +406,4 @@
|
||||
@@ -413,3 +413,4 @@
|
||||
internal="true"/>
|
||||
#endif
|
||||
</keyset>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/content/browser-sets.js b/browser/base/content/browser-sets.js
|
||||
index 0bb581aa34ddeef1e3eb85b0fadd41a539b4b9d6..cbe2df8b1775cb8194007ee995fd91769618b48d 100644
|
||||
index 94a05a510204c027e482fda33deaf3dc0d7471c9..79d37a7c7f29739d3ad2d9f6a3b3b8d638836b10 100644
|
||||
--- a/browser/base/content/browser-sets.js
|
||||
+++ b/browser/base/content/browser-sets.js
|
||||
@@ -254,7 +254,7 @@ document.addEventListener(
|
||||
@@ -266,7 +266,7 @@ document.addEventListener(
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
|
||||
index 246d23a77960d25f78b163429a3ed28c7180ccd7..1c26485d8464413689767c8a38aadbcadcecae4d 100644
|
||||
index ac82dcd286b5502d1ba38ed740813db08941eb7b..c26b3f0468ee6acd7716d4e8a24ad8cc84fce186 100644
|
||||
--- a/browser/base/content/browser.xhtml
|
||||
+++ b/browser/base/content/browser.xhtml
|
||||
@@ -19,6 +19,7 @@
|
||||
@@ -10,7 +10,7 @@ index 246d23a77960d25f78b163429a3ed28c7180ccd7..1c26485d8464413689767c8a38aadbca
|
||||
persist="screenX screenY width height sizemode"
|
||||
data-l10n-sync="true">
|
||||
<head>
|
||||
@@ -98,8 +99,10 @@
|
||||
@@ -99,8 +100,10 @@
|
||||
|
||||
<title data-l10n-id="browser-main-window-default-title"></title>
|
||||
|
||||
@@ -21,7 +21,7 @@ index 246d23a77960d25f78b163429a3ed28c7180ccd7..1c26485d8464413689767c8a38aadbca
|
||||
</head>
|
||||
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
# All sets except for popupsets (commands, keys, and stringbundles)
|
||||
@@ -132,9 +135,11 @@
|
||||
@@ -133,9 +136,11 @@
|
||||
</vbox>
|
||||
</html:template>
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
|
||||
index e688ba37c40ea602a32a84af6c1497d884ddc27b..ad8515eae1d4e697b9329d9d5babfd59679c9288 100644
|
||||
index 79b604c5965ba03762acbf085c9288c73001ec24..d75d5481e5de93c592850e39d4b0b4fd07e12678 100644
|
||||
--- a/browser/base/content/main-popupset.inc.xhtml
|
||||
+++ b/browser/base/content/main-popupset.inc.xhtml
|
||||
@@ -216,6 +216,10 @@
|
||||
@@ -226,6 +226,10 @@
|
||||
hidden="true"
|
||||
tabspecific="true"
|
||||
aria-labelledby="editBookmarkPanelTitle">
|
||||
@@ -13,7 +13,7 @@ index e688ba37c40ea602a32a84af6c1497d884ddc27b..ad8515eae1d4e697b9329d9d5babfd59
|
||||
<box class="panel-header">
|
||||
<html:h1>
|
||||
<html:span id="editBookmarkPanelTitle"/>
|
||||
@@ -241,6 +245,7 @@
|
||||
@@ -251,6 +255,7 @@
|
||||
class="footer-button"/>
|
||||
</html:moz-button-group>
|
||||
</vbox>
|
||||
@@ -21,7 +21,7 @@ index e688ba37c40ea602a32a84af6c1497d884ddc27b..ad8515eae1d4e697b9329d9d5babfd59
|
||||
</panel>
|
||||
</html:template>
|
||||
|
||||
@@ -636,6 +641,8 @@
|
||||
@@ -656,6 +661,8 @@
|
||||
|
||||
#include popup-notifications.inc.xhtml
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
index 40dddda5a6191c2ac012767ca55ed5fa35c03a6b..2e96a7ca233529ee2b570f94154008be5b0088e3 100644
|
||||
index 68c24f730d56f548cf1e286198a04f8363529378..71418c93ce7216d71412f2fa67295322bb73abad 100644
|
||||
--- a/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/navigator-toolbox.js b/browser/base/content/navigator-toolbox.js
|
||||
index 7b776b15d52367a008ce6bf53dcfcbbe007b7453..da23f716c753f5a43f17bb5ed7a3d335891168c2 100644
|
||||
index 15469e9d9b91c1eaef2578c9e43b6999edac3392..553402b41bc15f7cd99bf87c54416dc66d7c03e7 100644
|
||||
--- a/browser/base/content/navigator-toolbox.js
|
||||
+++ b/browser/base/content/navigator-toolbox.js
|
||||
@@ -6,7 +6,7 @@
|
||||
@@ -11,9 +11,9 @@ index 7b776b15d52367a008ce6bf53dcfcbbe007b7453..da23f716c753f5a43f17bb5ed7a3d335
|
||||
const widgetOverflow = document.getElementById("widget-overflow");
|
||||
|
||||
function onPopupShowing(event) {
|
||||
@@ -185,6 +185,7 @@ document.addEventListener(
|
||||
@@ -184,6 +184,7 @@ document.addEventListener(
|
||||
#forward-button,
|
||||
#reload-button ,
|
||||
#urlbar-go-button,
|
||||
#reader-mode-button,
|
||||
+ #zen-tabs-wrapper,
|
||||
#picture-in-picture-button,
|
||||
@@ -27,15 +27,15 @@ index 7b776b15d52367a008ce6bf53dcfcbbe007b7453..da23f716c753f5a43f17bb5ed7a3d335
|
||||
gBrowser.handleNewTabMiddleClick(element, event);
|
||||
break;
|
||||
|
||||
@@ -316,6 +318,7 @@ document.addEventListener(
|
||||
@@ -318,6 +320,7 @@ document.addEventListener(
|
||||
#downloads-button,
|
||||
#fxa-toolbar-menu-button,
|
||||
#unified-extensions-button,
|
||||
+ #zen-site-data-icon-button,
|
||||
#library-button
|
||||
#library-button,
|
||||
#split-view-button
|
||||
`);
|
||||
if (!element) {
|
||||
@@ -398,6 +401,16 @@ document.addEventListener(
|
||||
@@ -401,6 +404,16 @@ document.addEventListener(
|
||||
gUnifiedExtensions.togglePanel(event);
|
||||
break;
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
|
||||
index b77c12da637ba31aca6e8100187d0ac14db33298..4fbec0dda932bcaa77ce714826ac8ab20b9e8e63 100644
|
||||
index d9fbd3a9a78c993c89efa75be9e2ffc975158aba..e64382b32580c2d113774e76e3587002ce0aebad 100644
|
||||
--- a/browser/base/content/nsContextMenu.sys.mjs
|
||||
+++ b/browser/base/content/nsContextMenu.sys.mjs
|
||||
@@ -376,6 +376,9 @@ export class nsContextMenu {
|
||||
@@ -371,6 +371,9 @@ export class nsContextMenu {
|
||||
this.initPDFItems();
|
||||
this.initTextFragmentItems();
|
||||
|
||||
|
||||
@@ -45,9 +45,6 @@
|
||||
# Scripts used all over the browser
|
||||
<script type="module" src="chrome://browser/content/zen-components/ZenFolder.mjs"></script>
|
||||
|
||||
<script type="module" src="chrome://browser/content/zen-components/ZenPinnedTabsStorage.mjs"></script>
|
||||
<script type="module" src="chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs"></script>
|
||||
|
||||
<script type="module" src="chrome://browser/content/zen-components/ZenMediaController.mjs"></script>
|
||||
<script type="module" src="chrome://browser/content/zen-components/ZenWorkspaceCreation.mjs"></script>
|
||||
<script type="module" src="chrome://browser/content/zen-components/ZenGlanceManager.mjs"></script>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include ../../../zen/common/jar.inc.mn
|
||||
#include ../../../zen/compact-mode/jar.inc.mn
|
||||
#include ../../../zen/drag-and-drop/jar.inc.mn
|
||||
#include ../../../zen/split-view/jar.inc.mn
|
||||
#include ../../../zen/mods/jar.inc.mn
|
||||
#include ../../../zen/workspaces/jar.inc.mn
|
||||
|
||||
@@ -61,4 +61,6 @@
|
||||
|
||||
<command id="cmd_zenTogglePinTab" />
|
||||
<command id="cmd_zenCloseUnpinnedTabs" />
|
||||
|
||||
<command id="cmd_zenNewNavigatorUnsynced" />
|
||||
</commandset>
|
||||
|
||||
@@ -4,4 +4,10 @@
|
||||
|
||||
#include zen-commands.inc.xhtml
|
||||
|
||||
<keyset id="zenKeyset"></keyset>
|
||||
<keyset id="zenKeyset">
|
||||
# Prefetch these keys because they are being used by the native menu bar
|
||||
# and they need to be available even before the XUL is fully loaded and
|
||||
# our KBS sysmtem is initialized.
|
||||
<key id="zen-workspace-forward" />
|
||||
<key id="zen-workspace-backward" />
|
||||
</keyset>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<link rel="localization" href="browser/zen-workspaces.ftl"/>
|
||||
<link rel="localization" href="browser/zen-split-view.ftl"/>
|
||||
<link rel="localization" href="browser/zen-general.ftl"/>
|
||||
<link rel="localization" href="browser/zen-menubar.ftl"/>
|
||||
<link rel="localization" href="browser/zen-vertical-tabs.ftl"/>
|
||||
<link rel="localization" href="browser/zen-folders.ftl"/>
|
||||
</linkset>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
<menupopup id="zenFolderActions">
|
||||
<menuitem id="context_zenFolderRename" data-l10n-id="zen-folders-panel-rename-folder"/>
|
||||
<menuitem id="context_zenFolderChangeIcon" data-l10n-id="zen-folders-panel-change-icon-folder"/>
|
||||
<menuitem id="context_zenFolderChangeIcon" data-l10n-id="tab-context-zen-edit-icon"/>
|
||||
<menuseparator />
|
||||
<menuitem id="context_zenFolderUnloadAll" data-l10n-id="zen-folders-unload-folder"/>
|
||||
<menuitem id="context_zenFolderNewSubfolder" data-l10n-id="zen-folders-new-subfolder"/>
|
||||
@@ -59,3 +59,8 @@
|
||||
<menuseparator />
|
||||
<menuitem id="context_zenOpenSiteSettings" data-l10n-id="zen-site-data-site-settings"/>
|
||||
</menupopup>
|
||||
|
||||
<menupopup id="zenMoveTabsToSyncedWorkspacePopup">
|
||||
# Popup to move tabs to a synced workspace.
|
||||
# This would be automatically populated with the list of available synced workspaces.
|
||||
</menupopup>
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
# the window is fully loaded.
|
||||
# Make sure they are loaded before the global-scripts.inc file.
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-sets.js"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspacesSync.mjs"></script>
|
||||
|
||||
<script type="module" src="chrome://browser/content/zen-components/ZenHasPolyfill.mjs"></script>
|
||||
<script type="module" src="chrome://browser/content/zen-components/ZenWorkspaces.mjs"></script>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
|
||||
index 5dcbb1705625746afd7c57b7a6044c4fa2f00afd..c0872057ec65fe8ebdb2f81e47198dec5d6f0faf 100644
|
||||
index 8acc1e5a97f769dc76d30ca0534f28b0a4511ab5..bd54169f976d3abe7d122b0efc0fa0d0626179eb 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";
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
diff --git a/browser/components/aboutlogins/content/components/login-list.css b/browser/components/aboutlogins/content/components/login-list.css
|
||||
index e8d2077ca425d9a2b924aa6ac6ba8ada36b76615..95a8ab3dcff832f16068b6739526e8e29f0b4e26 100644
|
||||
--- a/browser/components/aboutlogins/content/components/login-list.css
|
||||
+++ b/browser/components/aboutlogins/content/components/login-list.css
|
||||
@@ -3,7 +3,7 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
:host {
|
||||
- border-inline-end: 1px solid var(--in-content-border-color);
|
||||
+ border: 1px solid var(--in-content-border-color);
|
||||
background-color: var(--background-color-box);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -162,3 +162,8 @@ ol {
|
||||
font-size: 0.85em;
|
||||
color: var(--text-color-deemphasized);
|
||||
}
|
||||
+
|
||||
+:host {
|
||||
+ border-radius: 5px;
|
||||
+ margin: 10px;
|
||||
+}
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/asrouter/modules/FeatureCallout.sys.mjs b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
|
||||
index 4ea9c9e88a1831dad7e42ebd8d0dd507102e8280..316aa626e525f05caac7f315e0ea7ae9d822b6af 100644
|
||||
index 80dd8b5e357acc9decea6cf621c4868d547a0eb3..8a5fea6ed1a62a5930bafffcbbde3ce3292e42a1 100644
|
||||
--- a/browser/components/asrouter/modules/FeatureCallout.sys.mjs
|
||||
+++ b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
|
||||
@@ -777,6 +777,7 @@ export class FeatureCallout {
|
||||
@@ -778,6 +778,7 @@ export class FeatureCallout {
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js
|
||||
index d6393080aa8aff6c0f7b2043fd408b6f6249d0c4..bf37b46c4743b7619393c730720204380635666a 100644
|
||||
index d016811caa6c1ecc947fd705f6e1b27e3b5a12a5..89f2a9ec9ebd80e744ed0118e1b3c164151cf2b8 100644
|
||||
--- a/browser/components/customizableui/content/panelUI.js
|
||||
+++ b/browser/components/customizableui/content/panelUI.js
|
||||
@@ -608,10 +608,12 @@ const PanelUI = {
|
||||
@@ -619,10 +619,12 @@ const PanelUI = {
|
||||
if (hasKids && !this.navbar.hasAttribute("nonemptyoverflow")) {
|
||||
this.navbar.setAttribute("nonemptyoverflow", "true");
|
||||
this.overflowPanel.setAttribute("hasfixeditems", "true");
|
||||
@@ -15,7 +15,7 @@ index d6393080aa8aff6c0f7b2043fd408b6f6249d0c4..bf37b46c4743b7619393c73072020438
|
||||
}
|
||||
},
|
||||
|
||||
@@ -959,7 +961,7 @@ const PanelUI = {
|
||||
@@ -970,7 +972,7 @@ const PanelUI = {
|
||||
el.removeAttribute("data-lazy-l10n-id");
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/places/content/bookmarkProperties.xhtml b/browser/components/places/content/bookmarkProperties.xhtml
|
||||
index 4aad4e4fb4139aa3d81e00eefa82e26b697df973..a2bfac11322f3679af9b51ebc7478323aa8e4adb 100644
|
||||
index 4aad4e4fb4139aa3d81e00eefa82e26b697df973..831e42a4a55e277b5b8e81e4317a2007c5306996 100644
|
||||
--- a/browser/components/places/content/bookmarkProperties.xhtml
|
||||
+++ b/browser/components/places/content/bookmarkProperties.xhtml
|
||||
@@ -38,6 +38,8 @@
|
||||
@@ -15,7 +15,7 @@ index 4aad4e4fb4139aa3d81e00eefa82e26b697df973..a2bfac11322f3679af9b51ebc7478323
|
||||
src="chrome://browser/locale/places/bookmarkProperties.properties"/>
|
||||
</stringbundleset>
|
||||
|
||||
+ <script src="chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs" />
|
||||
+ <script src="chrome://browser/content/zen-components/ZenWorkspaceBookmarksStorage.js" />
|
||||
+ <script src="chrome://browser/content/zenThemeModifier.js"></script>
|
||||
<script src="chrome://browser/content/places/editBookmark.js"/>
|
||||
<script src="chrome://browser/content/places/bookmarkProperties.js"/>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/places/content/editBookmark.js b/browser/components/places/content/editBookmark.js
|
||||
index f562f19741d882d92365da531b55e2810a0e79ea..9339e1158b074c41fc19bf91cbfde3c4016594b9 100644
|
||||
index f562f19741d882d92365da531b55e2810a0e79ea..a68ce8191314845c589f3a9f14b56028e0532628 100644
|
||||
--- a/browser/components/places/content/editBookmark.js
|
||||
+++ b/browser/components/places/content/editBookmark.js
|
||||
@@ -387,6 +387,10 @@ var gEditItemOverlay = {
|
||||
@@ -31,34 +31,11 @@ index f562f19741d882d92365da531b55e2810a0e79ea..9339e1158b074c41fc19bf91cbfde3c4
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1280,6 +1288,148 @@ var gEditItemOverlay = {
|
||||
@@ -1280,6 +1288,128 @@ var gEditItemOverlay = {
|
||||
get bookmarkState() {
|
||||
return this._bookmarkState;
|
||||
},
|
||||
+
|
||||
+ async _initWorkspaceSelector() {
|
||||
+ if(document.documentElement.getAttribute("windowtype") === "Places:Organizer") {
|
||||
+ return;
|
||||
+ }
|
||||
+ this._workspaces = await ZenWorkspacesStorage.getWorkspaces();
|
||||
+
|
||||
+ const selectElement = this._workspaceSelect;
|
||||
+
|
||||
+ // Clear any existing options
|
||||
+ while (selectElement.firstChild) {
|
||||
+ selectElement.removeChild(selectElement.firstChild);
|
||||
+ }
|
||||
+
|
||||
+ // For each workspace, create an option element
|
||||
+ for (let workspace of this._workspaces) {
|
||||
+ const option = document.createElementNS("http://www.w3.org/1999/xhtml", "option");
|
||||
+ option.textContent = workspace.name;
|
||||
+ option.value = workspace.uuid;
|
||||
+ selectElement.appendChild(option);
|
||||
+ }
|
||||
+
|
||||
+ selectElement.disabled = this.readOnly;
|
||||
+ },
|
||||
+ async onWorkspaceSelectionChange(event) {
|
||||
+ if(document.documentElement.getAttribute("windowtype") === "Places:Organizer") {
|
||||
+ return;
|
||||
@@ -129,7 +106,10 @@ index f562f19741d882d92365da531b55e2810a0e79ea..9339e1158b074c41fc19bf91cbfde3c4
|
||||
+ if(document.documentElement.getAttribute("windowtype") === "Places:Organizer") {
|
||||
+ return;
|
||||
+ }
|
||||
+ this._workspaces = await ZenWorkspacesStorage.getWorkspaces();
|
||||
+ const { ZenSessionStore } = ChromeUtils.importESModule(
|
||||
+ "resource:///modules/zen/ZenSessionManager.sys.mjs"
|
||||
+ );
|
||||
+ this._workspaces = ZenSessionStore.getClonedSpaces();
|
||||
+ const workspaceList = this._workspaceList;
|
||||
+ if(aInfo.node?.bookmarkGuid) {
|
||||
+ this._selectedWorkspaces = await ZenWorkspaceBookmarksStorage.getBookmarkWorkspaces(aInfo.node.bookmarkGuid);
|
||||
@@ -180,7 +160,7 @@ index f562f19741d882d92365da531b55e2810a0e79ea..9339e1158b074c41fc19bf91cbfde3c4
|
||||
};
|
||||
|
||||
ChromeUtils.defineLazyGetter(gEditItemOverlay, "_folderTree", () => {
|
||||
@@ -1318,6 +1468,9 @@ for (let elt of [
|
||||
@@ -1318,6 +1448,9 @@ for (let elt of [
|
||||
"locationField",
|
||||
"keywordField",
|
||||
"tagsField",
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
|
||||
index 7c5f6e9053f119a790f83a68c75ee11a6c172d98..cb0e1386318e8a8df24dfbbf8430d0a09fe07d16 100644
|
||||
index 5e53352fdbd25d2aed40d0117c3ad7072b9acf8c..0f400864ba7cc850d212ddeeefb71a06376e845f 100644
|
||||
--- a/browser/components/preferences/jar.mn
|
||||
+++ b/browser/components/preferences/jar.mn
|
||||
@@ -37,3 +37,5 @@ browser.jar:
|
||||
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)
|
||||
@@ -42,3 +42,5 @@ browser.jar:
|
||||
content/browser/preferences/widgets/sync-device-name.mjs (widgets/sync-device-name/sync-device-name.mjs)
|
||||
content/browser/preferences/widgets/sync-engines-list.mjs (widgets/sync-engine-list/sync-engines-list.mjs)
|
||||
content/browser/preferences/widgets/sync-engines-list.css (widgets/sync-engine-list/sync-engines-list.css)
|
||||
+
|
||||
+ content/browser/preferences/zen-settings.js
|
||||
\ No newline at end of file
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
|
||||
index bfddd91e6b524f2ebced985f5d12a4963e5c6075..7e80c0a293aae6356e53d9c9760017290e97ffa0 100644
|
||||
index d218a04e0ab44e6a55e368566c97df95e939565b..59f038e59fe1a8554a8b112c5ac33e700b71c79c 100644
|
||||
--- a/browser/components/preferences/main.inc.xhtml
|
||||
+++ b/browser/components/preferences/main.inc.xhtml
|
||||
@@ -141,7 +141,8 @@
|
||||
@@ -48,7 +48,8 @@
|
||||
<!-- Browser layout -->
|
||||
<groupbox data-category="paneGeneral"
|
||||
data-subcategory="layout"
|
||||
@@ -12,7 +12,7 @@ index bfddd91e6b524f2ebced985f5d12a4963e5c6075..7e80c0a293aae6356e53d9c976001729
|
||||
<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"/>
|
||||
@@ -346,6 +347,7 @@
|
||||
@@ -253,6 +254,7 @@
|
||||
languages-customize-add.label,
|
||||
" />
|
||||
</hbox>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
|
||||
index a184086f10d6a919c8125ab5d7728319256b3b73..7c826000ccdc8a55a12a08bdc2c547d886e5610c 100644
|
||||
index 6f99cbf973d414ffd4036d17740abe963629db37..520dcce0adb06c5ebfee8c76f72f7d7b40e106da 100644
|
||||
--- a/browser/components/preferences/main.js
|
||||
+++ b/browser/components/preferences/main.js
|
||||
@@ -1117,6 +1117,11 @@ let SETTINGS_CONFIG = {
|
||||
@@ -1729,6 +1729,11 @@ SettingGroupManager.registerGroups({
|
||||
id: "browserRestoreSession",
|
||||
l10nId: "startup-restore-windows-and-tabs",
|
||||
},
|
||||
@@ -14,7 +14,7 @@ index a184086f10d6a919c8125ab5d7728319256b3b73..7c826000ccdc8a55a12a08bdc2c547d8
|
||||
{
|
||||
id: "windowsLaunchOnLogin",
|
||||
l10nId: "windows-launch-on-login",
|
||||
@@ -1700,7 +1705,7 @@ function getBundleForLocales(newLocales) {
|
||||
@@ -3133,7 +3138,7 @@ function getBundleForLocales(newLocales) {
|
||||
])
|
||||
);
|
||||
return new Localization(
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
|
||||
index a0e16b375f0ad7ef58bf68d7574453ef37d4557f..2d5b5a0715b5ed8ebe592eebea0219a6cde17b52 100644
|
||||
index 7d6835b8636f771943b8081b7d56f579812026c2..97227eec4baeffd39b23ed6194ce7fa108c3b862 100644
|
||||
--- a/browser/components/preferences/preferences.js
|
||||
+++ b/browser/components/preferences/preferences.js
|
||||
@@ -118,6 +118,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {
|
||||
@@ -124,6 +124,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {
|
||||
styleSheets: [
|
||||
"chrome://browser/skin/preferences/dialog.css",
|
||||
"chrome://browser/skin/preferences/preferences.css",
|
||||
@@ -10,7 +10,7 @@ index a0e16b375f0ad7ef58bf68d7574453ef37d4557f..2d5b5a0715b5ed8ebe592eebea0219a6
|
||||
],
|
||||
resizeCallback: async ({ title, frame }) => {
|
||||
// Search within main document and highlight matched keyword.
|
||||
@@ -225,6 +226,10 @@ function init_all() {
|
||||
@@ -344,6 +345,10 @@ function init_all() {
|
||||
register_module("paneSearch", gSearchPane);
|
||||
register_module("panePrivacy", gPrivacyPane);
|
||||
register_module("paneContainers", gContainersPane);
|
||||
@@ -19,5 +19,5 @@ index a0e16b375f0ad7ef58bf68d7574453ef37d4557f..2d5b5a0715b5ed8ebe592eebea0219a6
|
||||
+ register_module("paneZenCKS", gZenCKSSettings);
|
||||
+ register_module("paneZenMarketplace", gZenMarketplaceManager);
|
||||
|
||||
for (let [subPane, config] of Object.entries(CONFIG_PANES)) {
|
||||
subPane = friendlyPrefCategoryNameToInternalName(subPane);
|
||||
for (let [id, config] of Object.entries(CONFIG_PANES)) {
|
||||
SettingPaneManager.registerPane(id, config);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
|
||||
index 993554d64efa6ce39fbcc01d4676a69199e158ff..e69aec388162997ef7cb93481cfedb9d102b4fe0 100644
|
||||
index a1aec823d6266d69ff02aa8523d2da999a0871b9..559f2ea12e53dd19f24e7953db4388456b97f02c 100644
|
||||
--- a/browser/components/preferences/preferences.xhtml
|
||||
+++ b/browser/components/preferences/preferences.xhtml
|
||||
@@ -45,6 +45,8 @@
|
||||
<link rel="stylesheet" href="chrome://browser/content/preferences/widgets/setting-group.css" />
|
||||
@@ -46,6 +46,8 @@
|
||||
<link rel="stylesheet" href="chrome://browser/content/preferences/widgets/setting-pane.css" />
|
||||
<link rel="stylesheet" href="chrome://browser/content/preferences/widgets/setting-control.css" />
|
||||
|
||||
+#include zen-preferences-links.xhtml
|
||||
@@ -11,7 +11,7 @@ index 993554d64efa6ce39fbcc01d4676a69199e158ff..e69aec388162997ef7cb93481cfedb9d
|
||||
<link rel="localization" href="branding/brand.ftl"/>
|
||||
<link rel="localization" href="browser/browser.ftl"/>
|
||||
<!-- Used by fontbuilder.js -->
|
||||
@@ -113,6 +115,11 @@
|
||||
@@ -115,6 +117,11 @@
|
||||
<hbox flex="1">
|
||||
|
||||
<vbox class="navigation">
|
||||
@@ -23,7 +23,7 @@ index 993554d64efa6ce39fbcc01d4676a69199e158ff..e69aec388162997ef7cb93481cfedb9d
|
||||
<!-- category list -->
|
||||
<richlistbox id="categories" data-l10n-id="category-list" data-l10n-attrs="aria-label">
|
||||
<richlistitem id="category-general"
|
||||
@@ -125,6 +132,50 @@
|
||||
@@ -127,6 +134,50 @@
|
||||
<label class="category-name" flex="1" data-l10n-id="pane-general-title"></label>
|
||||
</richlistitem>
|
||||
|
||||
@@ -74,7 +74,7 @@ index 993554d64efa6ce39fbcc01d4676a69199e158ff..e69aec388162997ef7cb93481cfedb9d
|
||||
<richlistitem id="category-home"
|
||||
class="category"
|
||||
value="paneHome"
|
||||
@@ -236,11 +287,6 @@
|
||||
@@ -242,11 +293,6 @@
|
||||
<html:a href="about:policies" target="_blank" data-l10n-id="managed-notice"/>
|
||||
</hbox>
|
||||
</hbox>
|
||||
@@ -86,7 +86,7 @@ index 993554d64efa6ce39fbcc01d4676a69199e158ff..e69aec388162997ef7cb93481cfedb9d
|
||||
</hbox>
|
||||
</hbox>
|
||||
<vbox id="mainPrefPane">
|
||||
@@ -254,6 +300,10 @@
|
||||
@@ -260,6 +306,10 @@
|
||||
#include sync.inc.xhtml
|
||||
#include experimental.inc.xhtml
|
||||
#include moreFromMozilla.inc.xhtml
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/screenshots/overlay/overlay.css b/browser/components/screenshots/overlay/overlay.css
|
||||
index ee2740fc48e9b70fe17b0f27b60053209516dbbf..cc0270e0eb28c3e60216460b02d62111abb970de 100644
|
||||
index 43a5d2109ad107ce1c79eef7cb8635bc1fa813f7..c1e5648d0e71826119bda1bc18c5d16886bab8fd 100644
|
||||
--- a/browser/components/screenshots/overlay/overlay.css
|
||||
+++ b/browser/components/screenshots/overlay/overlay.css
|
||||
@@ -196,6 +196,9 @@
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/search/SearchUIUtils.sys.mjs b/browser/components/search/SearchUIUtils.sys.mjs
|
||||
index 15fdb0cd7664c2b49977902d7f4c7a117d82cf15..6aedbc18de6604b63b2586e7d9745a4c4e7e38ae 100644
|
||||
index 65daa1402a52e252360386e60471f726c1387bb3..be8f588316a8a4d7f33a324bf11f9e1f19def32d 100644
|
||||
--- a/browser/components/search/SearchUIUtils.sys.mjs
|
||||
+++ b/browser/components/search/SearchUIUtils.sys.mjs
|
||||
@@ -434,7 +434,7 @@ export var SearchUIUtils = {
|
||||
@@ -444,7 +444,7 @@ export var SearchUIUtils = {
|
||||
triggeringSearchEngine: engine.name,
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
diff --git a/browser/components/sessionstore/SessionFile.sys.mjs b/browser/components/sessionstore/SessionFile.sys.mjs
|
||||
index 5580838acd72bf0e1189d367984859529d89f5b4..e5fa6076a9cc6ada016ccc4e129cad455010a522 100644
|
||||
--- a/browser/components/sessionstore/SessionFile.sys.mjs
|
||||
+++ b/browser/components/sessionstore/SessionFile.sys.mjs
|
||||
@@ -22,6 +22,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
||||
RunState: "resource:///modules/sessionstore/RunState.sys.mjs",
|
||||
SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs",
|
||||
SessionWriter: "resource:///modules/sessionstore/SessionWriter.sys.mjs",
|
||||
+ ZenSessionStore: "resource:///modules/zen/ZenSessionManager.sys.mjs",
|
||||
});
|
||||
|
||||
const PREF_UPGRADE_BACKUP = "browser.sessionstore.upgradeBackup.latestBuildID";
|
||||
@@ -381,7 +382,7 @@ var SessionFileInternal = {
|
||||
this._readOrigin = result.origin;
|
||||
|
||||
result.noFilesFound = noFilesFound;
|
||||
-
|
||||
+ await lazy.ZenSessionStore.readFile();
|
||||
return result;
|
||||
},
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
diff --git a/browser/components/sessionstore/SessionSaver.sys.mjs b/browser/components/sessionstore/SessionSaver.sys.mjs
|
||||
index 9141793550f7c7ff6aa63d4c85bf571b4499e2d0..6906fd9be7ae6ca4316133e0d6552b797c54a7ec 100644
|
||||
--- a/browser/components/sessionstore/SessionSaver.sys.mjs
|
||||
+++ b/browser/components/sessionstore/SessionSaver.sys.mjs
|
||||
@@ -20,6 +20,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
||||
SessionFile: "resource:///modules/sessionstore/SessionFile.sys.mjs",
|
||||
SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs",
|
||||
sessionStoreLogger: "resource:///modules/sessionstore/SessionLogger.sys.mjs",
|
||||
+ ZenSessionStore: "resource:///modules/zen/ZenSessionManager.sys.mjs",
|
||||
});
|
||||
|
||||
/*
|
||||
@@ -250,7 +251,7 @@ var SessionSaverInternal = {
|
||||
// Cancel any pending timeouts.
|
||||
this.cancel();
|
||||
|
||||
- if (lazy.PrivateBrowsingUtils.permanentPrivateBrowsing) {
|
||||
+ if (false) {
|
||||
// Don't save (or even collect) anything in permanent private
|
||||
// browsing mode
|
||||
|
||||
@@ -305,6 +306,7 @@ var SessionSaverInternal = {
|
||||
this._maybeClearCookiesAndStorage(state);
|
||||
|
||||
Glean.sessionRestore.collectData.stopAndAccumulate(timerId);
|
||||
+ lazy.ZenSessionStore.saveState(state);
|
||||
return this._writeState(state);
|
||||
},
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
diff --git a/browser/components/sessionstore/SessionStartup.sys.mjs b/browser/components/sessionstore/SessionStartup.sys.mjs
|
||||
index 86600ffb5178599ab23270a964064ca657a3283f..ffb22990e7d9e1b79f276fe5c1eb38f2b869a57b 100644
|
||||
--- a/browser/components/sessionstore/SessionStartup.sys.mjs
|
||||
+++ b/browser/components/sessionstore/SessionStartup.sys.mjs
|
||||
@@ -40,6 +40,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
||||
StartupPerformance:
|
||||
"resource:///modules/sessionstore/StartupPerformance.sys.mjs",
|
||||
sessionStoreLogger: "resource:///modules/sessionstore/SessionLogger.sys.mjs",
|
||||
+ ZenSessionStore: "resource:///modules/zen/ZenSessionManager.sys.mjs",
|
||||
});
|
||||
|
||||
const STATE_RUNNING_STR = "running";
|
||||
@@ -85,7 +86,7 @@ export var SessionStartup = {
|
||||
}
|
||||
|
||||
// do not need to initialize anything in auto-started private browsing sessions
|
||||
- if (lazy.PrivateBrowsingUtils.permanentPrivateBrowsing) {
|
||||
+ if (false) {
|
||||
this._initialized = true;
|
||||
gOnceInitializedDeferred.resolve();
|
||||
return;
|
||||
@@ -179,6 +180,8 @@ export var SessionStartup = {
|
||||
this._initialState = parsed;
|
||||
}
|
||||
|
||||
+ lazy.ZenSessionStore.onFileRead(this._initialState);
|
||||
+
|
||||
if (this._initialState == null) {
|
||||
// No valid session found.
|
||||
this._sessionType = this.NO_SESSION;
|
||||
@@ -336,12 +339,7 @@ export var SessionStartup = {
|
||||
isAutomaticRestoreEnabled() {
|
||||
if (this._resumeSessionEnabled === null) {
|
||||
this._resumeSessionEnabled =
|
||||
- !lazy.PrivateBrowsingUtils.permanentPrivateBrowsing &&
|
||||
- (Services.prefs.getBoolPref(
|
||||
- "browser.sessionstore.resume_session_once"
|
||||
- ) ||
|
||||
- Services.prefs.getIntPref("browser.startup.page") ==
|
||||
- BROWSER_STARTUP_RESUME_SESSION);
|
||||
+ true;
|
||||
}
|
||||
|
||||
return this._resumeSessionEnabled;
|
||||
@@ -1,38 +1,117 @@
|
||||
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
|
||||
index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e5dd96222 100644
|
||||
index 2a055f0c5f34f0a2667f659185120c07d38f4e41..959e73ab86bdb78203e3aed0c939c1b9acbe4897 100644
|
||||
--- a/browser/components/sessionstore/SessionStore.sys.mjs
|
||||
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
|
||||
@@ -127,6 +127,8 @@ const TAB_EVENTS = [
|
||||
@@ -127,6 +127,9 @@ const TAB_EVENTS = [
|
||||
"TabGroupCollapse",
|
||||
"TabGroupExpand",
|
||||
"TabSplitViewActivate",
|
||||
+ "TabAddedToEssentials",
|
||||
+ "TabRemovedFromEssentials",
|
||||
+ "ZenWorkspaceDataChanged",
|
||||
];
|
||||
|
||||
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
@@ -1911,6 +1913,8 @@ var SessionStoreInternal = {
|
||||
@@ -196,6 +199,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
||||
TabStateCache: "resource:///modules/sessionstore/TabStateCache.sys.mjs",
|
||||
TabStateFlusher: "resource:///modules/sessionstore/TabStateFlusher.sys.mjs",
|
||||
setTimeout: "resource://gre/modules/Timer.sys.mjs",
|
||||
+ ZenSessionStore: "resource:///modules/zen/ZenSessionManager.sys.mjs",
|
||||
});
|
||||
|
||||
ChromeUtils.defineLazyGetter(lazy, "blankURI", () => {
|
||||
@@ -1261,10 +1265,7 @@ var SessionStoreInternal = {
|
||||
*/
|
||||
get willAutoRestore() {
|
||||
return (
|
||||
- !PrivateBrowsingUtils.permanentPrivateBrowsing &&
|
||||
- (Services.prefs.getBoolPref("browser.sessionstore.resume_session_once") ||
|
||||
- Services.prefs.getIntPref("browser.startup.page") ==
|
||||
- BROWSER_STARTUP_RESUME_SESSION)
|
||||
+ true
|
||||
);
|
||||
},
|
||||
|
||||
@@ -1934,6 +1935,9 @@ var SessionStoreInternal = {
|
||||
case "TabPinned":
|
||||
case "TabUnpinned":
|
||||
case "SwapDocShells":
|
||||
+ case "TabRemovedFromEssentials":
|
||||
+ case "TabAddedToEssentials":
|
||||
+ case "ZenWorkspaceDataChanged":
|
||||
this.saveStateDelayed(win);
|
||||
break;
|
||||
case "TabGroupCreate":
|
||||
@@ -2384,11 +2388,9 @@ var SessionStoreInternal = {
|
||||
tabbrowser.selectedTab.label;
|
||||
@@ -2044,6 +2048,10 @@ var SessionStoreInternal = {
|
||||
this._windows[aWindow.__SSi].isTaskbarTab = true;
|
||||
}
|
||||
|
||||
+ if (aWindow.document.documentElement.hasAttribute("zen-unsynced-window")) {
|
||||
+ this._windows[aWindow.__SSi].isZenUnsynced = true;
|
||||
+ }
|
||||
+
|
||||
let tabbrowser = aWindow.gBrowser;
|
||||
|
||||
// add tab change listeners to all already existing tabs
|
||||
@@ -2131,6 +2139,7 @@ var SessionStoreInternal = {
|
||||
null,
|
||||
"sessionstore-one-or-no-tab-restored"
|
||||
);
|
||||
+ lazy.ZenSessionStore.onNewEmptySession(aWindow);
|
||||
this._deferredAllWindowsRestored.resolve();
|
||||
}
|
||||
// this window was opened by _openWindowWithState
|
||||
@@ -2175,7 +2184,6 @@ var SessionStoreInternal = {
|
||||
if (closedWindowState) {
|
||||
let newWindowState;
|
||||
if (
|
||||
- AppConstants.platform == "macosx" ||
|
||||
!lazy.SessionStartup.willRestore()
|
||||
) {
|
||||
// We want to split the window up into pinned tabs and unpinned tabs.
|
||||
@@ -2239,6 +2247,15 @@ var SessionStoreInternal = {
|
||||
});
|
||||
this._shouldRestoreLastSession = false;
|
||||
}
|
||||
+ else if (!aInitialState && isRegularWindow) {
|
||||
+ let windowPromises = [];
|
||||
+ for (let window of this._browserWindows) {
|
||||
+ windowPromises.push(lazy.TabStateFlusher.flushWindow(window));
|
||||
+ }
|
||||
+ Promise.all(windowPromises).finally(() => {
|
||||
+ lazy.ZenSessionStore.restoreNewWindow(aWindow, this);
|
||||
+ });
|
||||
+ }
|
||||
|
||||
if (this._restoreLastWindow && aWindow.toolbar.visible) {
|
||||
// always reset (if not a popup window)
|
||||
@@ -2491,7 +2508,7 @@ var SessionStoreInternal = {
|
||||
// 2) Flush the window.
|
||||
// 3) When the flush is complete, revisit our decision to store the window
|
||||
// in _closedWindows, and add/remove as necessary.
|
||||
- if (!winData.isPrivate && !winData.isTaskbarTab) {
|
||||
+ if (!winData.isPrivate && !winData.isTaskbarTab && !winData.isZenUnsynced) {
|
||||
this.maybeSaveClosedWindow(winData, isLastWindow);
|
||||
}
|
||||
|
||||
- if (AppConstants.platform != "macosx") {
|
||||
// Until we decide otherwise elsewhere, this window is part of a series
|
||||
// of closing windows to quit.
|
||||
winData._shouldRestore = true;
|
||||
- }
|
||||
@@ -2512,7 +2529,7 @@ var SessionStoreInternal = {
|
||||
|
||||
// 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
|
||||
@@ -3373,7 +3375,7 @@ var SessionStoreInternal = {
|
||||
// Save non-private windows if they have at
|
||||
// least one saveable tab or are the last window.
|
||||
- if (!winData.isPrivate && !winData.isTaskbarTab) {
|
||||
+ if (!winData.isPrivate && !winData.isTaskbarTab && !winData.isZenUnsynced) {
|
||||
this.maybeSaveClosedWindow(winData, isLastWindow);
|
||||
|
||||
if (!isLastWindow && winData.closedId > -1) {
|
||||
@@ -2608,6 +2625,7 @@ var SessionStoreInternal = {
|
||||
let alreadyStored = winIndex != -1;
|
||||
// If sidebar command is truthy, i.e. sidebar is open, store sidebar settings
|
||||
let shouldStore = hasSaveableTabs || isLastWindow;
|
||||
+ lazy.ZenSessionStore.maybeSaveClosedWindow(winData, isLastWindow);
|
||||
|
||||
if (shouldStore && !alreadyStored) {
|
||||
let index = this._closedWindows.findIndex(win => {
|
||||
@@ -3408,7 +3426,7 @@ var SessionStoreInternal = {
|
||||
if (!isPrivateWindow && tabState.isPrivate) {
|
||||
return;
|
||||
}
|
||||
@@ -41,12 +120,12 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4089,6 +4091,12 @@ var SessionStoreInternal = {
|
||||
@@ -4129,6 +4147,12 @@ var SessionStoreInternal = {
|
||||
Math.min(tabState.index, tabState.entries.length)
|
||||
);
|
||||
tabState.pinned = false;
|
||||
+ tabState.zenEssential = false;
|
||||
+ tabState.zenPinnedId = null;
|
||||
+ tabState.zenSyncId = null;
|
||||
+ tabState.zenIsGlance = false;
|
||||
+ tabState.zenGlanceId = null;
|
||||
+ tabState.zenHasStaticLabel = false;
|
||||
@@ -54,7 +133,7 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
|
||||
if (inBackground === false) {
|
||||
aWindow.gBrowser.selectedTab = newTab;
|
||||
@@ -4525,6 +4533,7 @@ var SessionStoreInternal = {
|
||||
@@ -4565,6 +4589,7 @@ var SessionStoreInternal = {
|
||||
// Append the tab if we're opening into a different window,
|
||||
tabIndex: aSource == aTargetWindow ? pos : Infinity,
|
||||
pinned: state.pinned,
|
||||
@@ -62,7 +141,7 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
userContextId: state.userContextId,
|
||||
skipLoad: true,
|
||||
preferredRemoteType,
|
||||
@@ -5374,7 +5383,7 @@ var SessionStoreInternal = {
|
||||
@@ -5414,7 +5439,7 @@ var SessionStoreInternal = {
|
||||
|
||||
for (let i = tabbrowser.pinnedTabCount; i < tabbrowser.tabs.length; i++) {
|
||||
let tab = tabbrowser.tabs[i];
|
||||
@@ -71,16 +150,16 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
removableTabs.push(tab);
|
||||
}
|
||||
}
|
||||
@@ -5434,7 +5443,7 @@ var SessionStoreInternal = {
|
||||
}
|
||||
@@ -5525,7 +5550,7 @@ var SessionStoreInternal = {
|
||||
|
||||
let workspaceID = aWindow.getWorkspaceID();
|
||||
- if (workspaceID) {
|
||||
+ if (workspaceID && !(this.isLastRestorableWindow() && AppConstants.platform == "macosx")) {
|
||||
winData.workspaceID = workspaceID;
|
||||
}
|
||||
},
|
||||
@@ -5625,11 +5634,12 @@ var SessionStoreInternal = {
|
||||
// collect the data for all windows
|
||||
for (ix in this._windows) {
|
||||
- if (this._windows[ix]._restoring || this._windows[ix].isTaskbarTab) {
|
||||
+ if (this._windows[ix]._restoring || this._windows[ix].isTaskbarTab && !this._windows[ix].isZenUnsynced) {
|
||||
// window data is still in _statesToRestore
|
||||
continue;
|
||||
}
|
||||
@@ -5668,11 +5693,12 @@ var SessionStoreInternal = {
|
||||
}
|
||||
|
||||
let tabbrowser = aWindow.gBrowser;
|
||||
@@ -94,15 +173,17 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
// update the internal state data for this window
|
||||
for (let tab of tabs) {
|
||||
if (tab == aWindow.FirefoxViewHandler.tab) {
|
||||
@@ -5640,6 +5650,7 @@ var SessionStoreInternal = {
|
||||
@@ -5683,6 +5709,9 @@ var SessionStoreInternal = {
|
||||
tabsData.push(tabData);
|
||||
}
|
||||
|
||||
+ winData.folders = aWindow.gZenFolders?.storeDataForSessionStore() || [];
|
||||
+ winData.activeZenSpace = aWindow.gZenWorkspaces?.activeWorkspace || null;
|
||||
+ winData.spaces = aWindow.gZenWorkspaces?.getWorkspacesForSessionStore();
|
||||
// update tab group state for this window
|
||||
winData.groups = [];
|
||||
for (let tabGroup of aWindow.gBrowser.tabGroups) {
|
||||
@@ -5652,7 +5663,7 @@ var SessionStoreInternal = {
|
||||
@@ -5695,7 +5724,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) {
|
||||
@@ -111,7 +192,7 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
winData.title = tabbrowser.tabs[0].label;
|
||||
}
|
||||
winData.selected = selectedIndex;
|
||||
@@ -5765,8 +5776,8 @@ var SessionStoreInternal = {
|
||||
@@ -5810,8 +5839,8 @@ var SessionStoreInternal = {
|
||||
// selectTab represents.
|
||||
let selectTab = 0;
|
||||
if (overwriteTabs) {
|
||||
@@ -122,7 +203,7 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
selectTab = Math.min(selectTab, winData.tabs.length);
|
||||
}
|
||||
|
||||
@@ -5788,6 +5799,7 @@ var SessionStoreInternal = {
|
||||
@@ -5833,6 +5862,7 @@ var SessionStoreInternal = {
|
||||
if (overwriteTabs) {
|
||||
for (let i = tabbrowser.browsers.length - 1; i >= 0; i--) {
|
||||
if (!tabbrowser.tabs[i].selected) {
|
||||
@@ -130,16 +211,20 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
tabbrowser.removeTab(tabbrowser.tabs[i]);
|
||||
}
|
||||
}
|
||||
@@ -5809,6 +5821,8 @@ var SessionStoreInternal = {
|
||||
winData.tabs,
|
||||
winData.groups ?? []
|
||||
@@ -5866,6 +5896,12 @@ var SessionStoreInternal = {
|
||||
savedTabGroup => !openTabGroupIdsInWindow.has(savedTabGroup.id)
|
||||
);
|
||||
+ aWindow.gZenFolders?.restoreDataFromSessionStore(winData.folders);
|
||||
+ aWindow.gZenViewSplitter?.restoreDataFromSessionStore(winData.splitViewData);
|
||||
this._log.debug(
|
||||
`restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs`
|
||||
);
|
||||
@@ -6372,6 +6386,25 @@ var SessionStoreInternal = {
|
||||
}
|
||||
+ if (winData.isZenUnsynced) {
|
||||
+ aWindow.document.documentElement.setAttribute("zen-unsynced-window", "true");
|
||||
+ }
|
||||
+ aWindow.gZenFolders?.restoreDataFromSessionStore(winData.folders);
|
||||
+ aWindow.gZenViewSplitter?.restoreDataFromSessionStore(winData.splitViewData);
|
||||
+ aWindow.gZenWorkspaces?.restoreWorkspacesFromSessionStore(winData);
|
||||
|
||||
// Move the originally open tabs to the end.
|
||||
if (initialTabs) {
|
||||
@@ -6419,6 +6455,25 @@ var SessionStoreInternal = {
|
||||
|
||||
// Most of tabData has been restored, now continue with restoring
|
||||
// attributes that may trigger external events.
|
||||
@@ -150,11 +235,11 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
+ if (tabData.zenIsEmpty) {
|
||||
+ tab.setAttribute("zen-empty-tab", "true");
|
||||
+ }
|
||||
+ if (tabData.zenHasStaticLabel) {
|
||||
+ tab.setAttribute("zen-has-static-label", "true");
|
||||
+ if (tabData.zenStaticLabel) {
|
||||
+ tab.zenStaticLabel = tabData.zenStaticLabel;
|
||||
+ }
|
||||
+ if (tabData.zenPinnedId) {
|
||||
+ tab.setAttribute("zen-pin-id", tabData.zenPinnedId);
|
||||
+ if (tabData.zenHasStaticIcon && tabData.image) {
|
||||
+ tab.zenStaticIcon = tabData.image;
|
||||
+ }
|
||||
+ if (tabData.zenDefaultUserContextId) {
|
||||
+ tab.setAttribute("zenDefaultUserContextId", true);
|
||||
@@ -165,7 +250,7 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
|
||||
if (tabData.pinned) {
|
||||
tabbrowser.pinTab(tab);
|
||||
@@ -7290,7 +7323,7 @@ var SessionStoreInternal = {
|
||||
@@ -7343,7 +7398,7 @@ var SessionStoreInternal = {
|
||||
|
||||
let groupsToSave = new Map();
|
||||
for (let tIndex = 0; tIndex < window.tabs.length; ) {
|
||||
@@ -174,7 +259,7 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e
|
||||
// Adjust window.selected
|
||||
if (tIndex + 1 < window.selected) {
|
||||
window.selected -= 1;
|
||||
@@ -7305,7 +7338,7 @@ var SessionStoreInternal = {
|
||||
@@ -7358,7 +7413,7 @@ var SessionStoreInternal = {
|
||||
);
|
||||
// We don't want to increment tIndex here.
|
||||
continue;
|
||||
|
||||
@@ -1,22 +1,24 @@
|
||||
diff --git a/browser/components/sessionstore/TabState.sys.mjs b/browser/components/sessionstore/TabState.sys.mjs
|
||||
index 82721356d191055bec0d4b0ca49e481221988801..1ea5c394c704da295149443d7794961a12f2060b 100644
|
||||
index 82721356d191055bec0d4b0ca49e481221988801..238d6ae1a4261e098d1e986e3c3df813d9d625f3 100644
|
||||
--- a/browser/components/sessionstore/TabState.sys.mjs
|
||||
+++ b/browser/components/sessionstore/TabState.sys.mjs
|
||||
@@ -85,7 +85,22 @@ class _TabState {
|
||||
@@ -85,7 +85,24 @@ class _TabState {
|
||||
tabData.groupId = tab.group.id;
|
||||
}
|
||||
|
||||
+ tabData.zenWorkspace = tab.getAttribute("zen-workspace-id");
|
||||
+ tabData.zenPinnedId = tab.getAttribute("zen-pin-id");
|
||||
+ tabData.zenSyncId = tab.getAttribute("id");
|
||||
+ tabData.zenEssential = tab.getAttribute("zen-essential");
|
||||
+ tabData.pinned = tabData.pinned || tabData.zenEssential;
|
||||
+ tabData.zenDefaultUserContextId = tab.getAttribute("zenDefaultUserContextId");
|
||||
+ tabData.zenPinnedEntry = tab.getAttribute("zen-pinned-entry");
|
||||
+ tabData.zenPinnedIcon = tab.getAttribute("zen-pinned-icon");
|
||||
+ tabData.zenIsEmpty = tab.hasAttribute("zen-empty-tab");
|
||||
+ tabData.zenHasStaticLabel = tab.hasAttribute("zen-has-static-label");
|
||||
+ tabData.zenStaticLabel = tab.zenStaticLabel;
|
||||
+ tabData.zenHasStaticIcon = !!tab.zenStaticIcon;
|
||||
+ tabData.zenGlanceId = tab.getAttribute("glance-id");
|
||||
+ tabData.zenIsGlance = tab.hasAttribute("zen-glance-tab");
|
||||
+ tabData._zenPinnedInitialState = tab._zenPinnedInitialState;
|
||||
+ tabData._zenIsActiveTab = tab._zenContentsVisible;
|
||||
+
|
||||
tabData.searchMode = tab.ownerGlobal.gURLBar.getSearchMode(browser, true);
|
||||
+ if (tabData.searchMode?.source === tab.ownerGlobal.UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js
|
||||
index 220c3c83fa09daaec433803a4655a20114a137a6..1ef8adc3ecfa61839bb993f7fc090133bffe77db 100644
|
||||
index bd6db85732e6e99ca51ce9c4c1a7d469199cf8cb..6c7859c1014baf4e343714ef797cf558d065e189 100644
|
||||
--- a/browser/components/sidebar/browser-sidebar.js
|
||||
+++ b/browser/components/sidebar/browser-sidebar.js
|
||||
@@ -793,7 +793,7 @@ var SidebarController = {
|
||||
@@ -8,6 +8,6 @@ index 220c3c83fa09daaec433803a4655a20114a137a6..1ef8adc3ecfa61839bb993f7fc090133
|
||||
let contentArea = document.getElementById("tabbrowser-tabbox");
|
||||
- let browser = document.getElementById("browser");
|
||||
+ let browser = document.getElementById("tabbrowser-tabbox");
|
||||
[...browser.children].forEach((node, i) => {
|
||||
node.style.order = i + 1;
|
||||
[...browser.children].forEach((node, i, children) => {
|
||||
node.style.order = this._positionStart ? i + 1 : children.length - i;
|
||||
});
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
|
||||
index bcd7689e9d68ef8b171c327188174334c4271e21..0a95e1137fdf4b63e0d841776ad934da1a513c6f 100644
|
||||
index 9c5e92fbd555d328ce09c0cf0ff8078584f68478..2af7a428bc830d8c12b3d3c0af375c97e6942994 100644
|
||||
--- a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
|
||||
+++ b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
|
||||
@@ -938,6 +938,7 @@ export class AsyncTabSwitcher {
|
||||
@@ -939,6 +939,7 @@ export class AsyncTabSwitcher {
|
||||
this.tabbrowser._printPreviewBrowsers.has(browser) ||
|
||||
this.tabbrowser.splitViewBrowsers.includes(browser) ||
|
||||
lazy.PictureInPicture.isOriginatingBrowser(browser)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/TabUnloader.sys.mjs b/browser/components/tabbrowser/TabUnloader.sys.mjs
|
||||
index 2a3fcbe9dfb6328cabba891697990e2467973f6e..22fdaaefa71b3c37cbccbd7ae4db044b1057f1f2 100644
|
||||
index aefccef39f0b81176a5710a794e8a5e2650d6507..e073c65790df6d55e827a4f4596199f4f1a99a57 100644
|
||||
--- a/browser/components/tabbrowser/TabUnloader.sys.mjs
|
||||
+++ b/browser/components/tabbrowser/TabUnloader.sys.mjs
|
||||
@@ -52,7 +52,7 @@ let CRITERIA_WEIGHT = 1;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/TabsList.sys.mjs b/browser/components/tabbrowser/TabsList.sys.mjs
|
||||
index b394a980869d5e5df01b6afdd81e0f41c090e6ec..236c99db0dfa5ebcba50d55c1e4eb6ab7b8110b2 100644
|
||||
index 400a69449e6477da754b06530eef7c15ea9ad887..7dd22f481dade16286533acffc2c2321d4c34b41 100644
|
||||
--- a/browser/components/tabbrowser/TabsList.sys.mjs
|
||||
+++ b/browser/components/tabbrowser/TabsList.sys.mjs
|
||||
@@ -87,7 +87,7 @@ class TabsListBase {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/tabbrowser/content/browser-ctrlTab.js b/browser/components/tabbrowser/content/browser-ctrlTab.js
|
||||
index 958728cde19dd7cc24692baa89e11fcab816ab82..32e2b6af2536133f170bd5e14c47392ded8440eb 100644
|
||||
index 3330dc133c120e7fbeecd2a36c71f9dfba60b3fb..0243cdfe67e5eb3f68fc7cde66bb3809e79bd6c3 100644
|
||||
--- a/browser/components/tabbrowser/content/browser-ctrlTab.js
|
||||
+++ b/browser/components/tabbrowser/content/browser-ctrlTab.js
|
||||
@@ -249,7 +249,8 @@ var ctrlTab = {
|
||||
@@ -252,7 +252,8 @@ var ctrlTab = {
|
||||
},
|
||||
|
||||
get tabList() {
|
||||
@@ -12,7 +12,7 @@ index 958728cde19dd7cc24692baa89e11fcab816ab82..32e2b6af2536133f170bd5e14c47392d
|
||||
},
|
||||
|
||||
init: function ctrlTab_init() {
|
||||
@@ -460,7 +461,7 @@ var ctrlTab = {
|
||||
@@ -457,7 +458,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 958728cde19dd7cc24692baa89e11fcab816ab82..32e2b6af2536133f170bd5e14c47392d
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -484,7 +485,7 @@ var ctrlTab = {
|
||||
@@ -481,7 +482,7 @@ var ctrlTab = {
|
||||
},
|
||||
|
||||
open: function ctrlTab_open() {
|
||||
@@ -30,7 +30,7 @@ index 958728cde19dd7cc24692baa89e11fcab816ab82..32e2b6af2536133f170bd5e14c47392d
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -763,7 +764,7 @@ var ctrlTab = {
|
||||
@@ -751,7 +752,7 @@ var ctrlTab = {
|
||||
_initRecentlyUsedTabs() {
|
||||
this._recentlyUsedTabs = Array.prototype.filter.call(
|
||||
gBrowser.tabs,
|
||||
|
||||
@@ -1,37 +1,44 @@
|
||||
diff --git a/browser/components/tabbrowser/content/drag-and-drop.js b/browser/components/tabbrowser/content/drag-and-drop.js
|
||||
index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9548dce83 100644
|
||||
index 57800333445ec7850742145527e04ae8d504b0bb..3a5015c391c594c94aa77a7ff9b08762d36276f6 100644
|
||||
--- a/browser/components/tabbrowser/content/drag-and-drop.js
|
||||
+++ b/browser/components/tabbrowser/content/drag-and-drop.js
|
||||
@@ -32,6 +32,9 @@
|
||||
@@ -35,6 +35,9 @@
|
||||
* @returns {MozTabbrowserTab|vbox}
|
||||
*/
|
||||
const elementToMove = element => {
|
||||
+ if (element.group?.hasAttribute("split-view-group")) {
|
||||
+ return element.group;
|
||||
+ }
|
||||
if (isTab(element)) {
|
||||
if (isTab(element) || isSplitViewWrapper(element)) {
|
||||
return element;
|
||||
}
|
||||
@@ -112,6 +115,10 @@
|
||||
@@ -115,6 +118,9 @@
|
||||
}
|
||||
|
||||
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 &&
|
||||
@@ -266,6 +273,18 @@
|
||||
@@ -133,10 +139,6 @@
|
||||
|
||||
// Pinned tabs in expanded vertical mode are on a grid format and require
|
||||
// different logic to drag and drop.
|
||||
- if (this._isContainerVerticalPinnedGrid(draggedTab)) {
|
||||
- this._animateExpandedPinnedTabMove(event);
|
||||
- return;
|
||||
- }
|
||||
this._animateTabMove(event);
|
||||
return;
|
||||
}
|
||||
@@ -269,6 +271,15 @@
|
||||
|
||||
this._tabDropIndicator.hidden = true;
|
||||
event.stopPropagation();
|
||||
+ if (draggedTab?.hasAttribute("zen-has-splitted")) {
|
||||
+ draggedTab.removeAttribute("zen-has-splitted");
|
||||
+ draggedTab._visuallySelected = false;
|
||||
+ }
|
||||
+ if (draggedTab && dropEffect == "move") {
|
||||
+ this.handle_drop_transition?.(draggedTab._dragData.dropElement, draggedTab, movingTabs, draggedTab._dragData.dropBefore);
|
||||
+ let moved = gZenPinnedTabManager.moveToAnotherTabContainerIfNecessary(event, movingTabs);
|
||||
+
|
||||
+ if (moved) {
|
||||
@@ -42,7 +49,7 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
if (draggedTab && dropEffect == "copy") {
|
||||
let duplicatedDraggedTab;
|
||||
let duplicatedTabs = [];
|
||||
@@ -291,8 +310,9 @@
|
||||
@@ -294,8 +305,9 @@
|
||||
let translateOffsetY = oldTranslateY % tabHeight;
|
||||
let newTranslateX = oldTranslateX - translateOffsetX;
|
||||
let newTranslateY = oldTranslateY - translateOffsetY;
|
||||
@@ -54,10 +61,10 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
|
||||
if (this._isContainerVerticalPinnedGrid(draggedTab)) {
|
||||
// Update both translate axis for pinned vertical expanded tabs
|
||||
@@ -308,8 +328,8 @@
|
||||
@@ -311,8 +323,8 @@
|
||||
}
|
||||
} else {
|
||||
let tabs = this._tabbrowserTabs.ariaFocusableItems.slice(
|
||||
let tabs = this._tabbrowserTabs.dragAndDropElements.slice(
|
||||
- isPinned ? 0 : numPinned,
|
||||
- isPinned ? numPinned : undefined
|
||||
+ isPinned ? (essential ? 0 : gBrowser._numZenEssentials) : numPinned,
|
||||
@@ -65,7 +72,7 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
);
|
||||
let size = this._tabbrowserTabs.verticalMode ? "height" : "width";
|
||||
let screenAxis = this._tabbrowserTabs.verticalMode
|
||||
@@ -362,11 +382,13 @@
|
||||
@@ -365,11 +377,13 @@
|
||||
this._dragToPinPromoCard,
|
||||
];
|
||||
let shouldPin =
|
||||
@@ -79,7 +86,7 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
isTab(draggedTab) &&
|
||||
draggedTab.pinned &&
|
||||
this._tabbrowserTabs.arrowScrollbox.contains(event.target);
|
||||
@@ -384,6 +406,7 @@
|
||||
@@ -387,6 +401,7 @@
|
||||
(oldTranslateY && oldTranslateY != newTranslateY);
|
||||
} else if (this._tabbrowserTabs.verticalMode) {
|
||||
shouldTranslate &&= oldTranslateY && oldTranslateY != newTranslateY;
|
||||
@@ -87,7 +94,7 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
} else {
|
||||
shouldTranslate &&= oldTranslateX && oldTranslateX != newTranslateX;
|
||||
}
|
||||
@@ -440,7 +463,7 @@
|
||||
@@ -443,7 +458,7 @@
|
||||
item.removeAttribute("tabdrop-samewindow");
|
||||
resolve();
|
||||
};
|
||||
@@ -96,15 +103,15 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
postTransitionCleanup();
|
||||
} else {
|
||||
let onTransitionEnd = transitionendEvent => {
|
||||
@@ -581,6 +604,7 @@
|
||||
@@ -584,6 +599,7 @@
|
||||
|
||||
let nextItem = this._tabbrowserTabs.ariaFocusableItems[newIndex];
|
||||
let nextItem = this._tabbrowserTabs.dragAndDropElements[newIndex];
|
||||
let tabGroup = isTab(nextItem) && nextItem.group;
|
||||
+ if (gZenViewSplitter.handleTabDrop(event, urls, replace, inBackground)) return;
|
||||
gBrowser.loadTabs(urls, {
|
||||
inBackground,
|
||||
replace,
|
||||
@@ -618,7 +642,16 @@
|
||||
@@ -621,7 +637,16 @@
|
||||
this._expandGroupOnDrop(draggedTab);
|
||||
}
|
||||
this._resetTabsAfterDrop(draggedTab.ownerDocument);
|
||||
@@ -122,7 +129,7 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
if (
|
||||
dt.mozUserCancelled ||
|
||||
dt.dropEffect != "none" ||
|
||||
@@ -822,7 +855,10 @@
|
||||
@@ -825,7 +850,10 @@
|
||||
_getDragTarget(event, { ignoreSides = false } = {}) {
|
||||
let { target } = event;
|
||||
while (target) {
|
||||
@@ -134,7 +141,7 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
break;
|
||||
}
|
||||
target = target.parentNode;
|
||||
@@ -839,14 +875,17 @@
|
||||
@@ -842,14 +870,17 @@
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -154,7 +161,7 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
!this._tabbrowserTabs.expandOnHover
|
||||
);
|
||||
}
|
||||
@@ -877,7 +916,8 @@
|
||||
@@ -880,7 +911,8 @@
|
||||
isTabGroupLabel(draggedTab) &&
|
||||
draggedTab._dragData?.expandGroupOnDrop
|
||||
) {
|
||||
@@ -164,19 +171,23 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
}
|
||||
}
|
||||
|
||||
@@ -942,10 +982,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(
|
||||
@@ -1112,7 +1149,7 @@
|
||||
@@ -1058,7 +1090,6 @@
|
||||
// using updateDragImage. On Linux, we can use a panel.
|
||||
if (platform == "win" || platform == "macosx") {
|
||||
captureListener = function () {
|
||||
- dt.updateDragImage(canvas, dragImageOffset, dragImageOffset);
|
||||
};
|
||||
} else {
|
||||
// Create a panel to use it in setDragImage
|
||||
@@ -1096,7 +1127,6 @@
|
||||
);
|
||||
dragImageOffset = dragImageOffset * scale;
|
||||
}
|
||||
- dt.setDragImage(toDrag, dragImageOffset, dragImageOffset);
|
||||
|
||||
// _dragData.offsetX/Y give the coordinates that the mouse should be
|
||||
// positioned relative to the corner of the new window created upon
|
||||
@@ -1115,7 +1145,7 @@
|
||||
let dropEffect = this.getDropEffectForTabDrag(event);
|
||||
let isMovingInTabStrip = !fromTabList && dropEffect == "move";
|
||||
let collapseTabGroupDuringDrag =
|
||||
@@ -185,7 +196,7 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
|
||||
tab._dragData = {
|
||||
offsetX: this._tabbrowserTabs.verticalMode
|
||||
@@ -1122,7 +1159,7 @@
|
||||
@@ -1125,7 +1155,7 @@
|
||||
? event.screenY - window.screenY - tabOffset
|
||||
: event.screenY - window.screenY,
|
||||
scrollPos:
|
||||
@@ -194,7 +205,7 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
? this._tabbrowserTabs.pinnedTabsContainer.scrollPosition
|
||||
: this._tabbrowserTabs.arrowScrollbox.scrollPosition,
|
||||
screenX: event.screenX,
|
||||
@@ -1149,6 +1186,7 @@
|
||||
@@ -1152,6 +1182,7 @@
|
||||
|
||||
if (collapseTabGroupDuringDrag) {
|
||||
tab.group.collapsed = true;
|
||||
@@ -202,238 +213,45 @@ index 97b931c3c7385a52d20204369fcf6d6999053687..bc49f4f5a90638d725eca016d00f30d9
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1173,6 +1211,16 @@
|
||||
@@ -1176,6 +1207,7 @@
|
||||
if (tabStripItemElement.hasAttribute("dragtarget")) {
|
||||
return;
|
||||
}
|
||||
+ 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 dragAndDropElements = this._tabbrowserTabs.dragAndDropElements;
|
||||
@@ -1601,7 +1633,6 @@
|
||||
|
||||
for (let item of this._tabbrowserTabs.dragAndDropElements) {
|
||||
item = elementToMove(item);
|
||||
- item.style.transform = "";
|
||||
item.removeAttribute("multiselected-move-together");
|
||||
delete item._moveTogetherSelectedTabsData;
|
||||
}
|
||||
|
||||
- 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) {
|
||||
@@ -2429,7 +2460,6 @@
|
||||
for (let item of this._tabbrowserTabs.dragAndDropElements) {
|
||||
this._resetGroupTarget(item);
|
||||
@@ -2457,7 +2531,7 @@
|
||||
item = elementToMove(item);
|
||||
- item.style.transform = "";
|
||||
}
|
||||
this._tabbrowserTabs.removeAttribute("movingtab-group");
|
||||
this._tabbrowserTabs.removeAttribute("movingtab-ungroup");
|
||||
@@ -2460,17 +2490,14 @@
|
||||
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.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"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
|
||||
index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbfd6214f77 100644
|
||||
index 6528da245d922e2ccdb59cbf8106055bc34d1e74..1cd3395961a80e3b48582794b5b5365c9b8386b3 100644
|
||||
--- a/browser/components/tabbrowser/content/tab.js
|
||||
+++ b/browser/components/tabbrowser/content/tab.js
|
||||
@@ -21,6 +21,7 @@
|
||||
@@ -10,18 +10,19 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
<stack class="tab-icon-stack">
|
||||
<hbox class="tab-throbber"/>
|
||||
<hbox class="tab-icon-pending"/>
|
||||
@@ -37,8 +38,10 @@
|
||||
@@ -38,9 +39,11 @@
|
||||
<hbox class="tab-secondary-label">
|
||||
<label class="tab-icon-sound-label tab-icon-sound-pip-label" data-l10n-id="browser-tab-audio-pip" role="presentation"/>
|
||||
</hbox>
|
||||
+ <label class="tab-reset-pin-label" data-l10n-id="tab-reset-pin-label" role="presentation"/>
|
||||
</vbox>
|
||||
<image class="tab-note-icon" role="presentation"/>
|
||||
<image class="tab-close-button close-icon" role="button" data-l10n-id="tabbrowser-close-tabs-button" data-l10n-args='{"tabCount": 1}' keyNav="false"/>
|
||||
+ <image class="tab-reset-button reset-icon" role="button" data-l10n-id="tabbrowser-unload-tab-button" data-l10n-args='{"tabCount": 1}' keyNav="false"/>
|
||||
</hbox>
|
||||
</stack>
|
||||
`;
|
||||
@@ -84,7 +87,7 @@
|
||||
@@ -86,7 +89,7 @@
|
||||
".tab-content":
|
||||
"pinned,selected=visuallyselected,multiselected,titlechanged,attention",
|
||||
".tab-icon-stack":
|
||||
@@ -30,7 +31,7 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
".tab-throbber":
|
||||
"fadein,pinned,busy,progress,selected=visuallyselected",
|
||||
".tab-icon-pending":
|
||||
@@ -93,9 +96,9 @@
|
||||
@@ -95,9 +98,9 @@
|
||||
"src=image,requestcontextid,fadein,pinned,selected=visuallyselected,busy,crashed,sharing,pictureinpicture,pending,discarded",
|
||||
".tab-sharing-icon-overlay": "sharing,selected=visuallyselected,pinned",
|
||||
".tab-icon-overlay":
|
||||
@@ -42,7 +43,7 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
".tab-label-container":
|
||||
"pinned,selected=visuallyselected,labeldirection",
|
||||
".tab-label":
|
||||
@@ -186,7 +189,7 @@
|
||||
@@ -188,7 +191,7 @@
|
||||
}
|
||||
|
||||
set _visuallySelected(val) {
|
||||
@@ -51,7 +52,7 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -222,11 +225,21 @@
|
||||
@@ -224,11 +227,21 @@
|
||||
}
|
||||
|
||||
get visible() {
|
||||
@@ -78,7 +79,7 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
}
|
||||
|
||||
get hidden() {
|
||||
@@ -305,7 +318,7 @@
|
||||
@@ -307,7 +320,7 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -87,7 +88,7 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
}
|
||||
|
||||
get lastAccessed() {
|
||||
@@ -382,7 +395,12 @@
|
||||
@@ -384,7 +397,18 @@
|
||||
}
|
||||
|
||||
get group() {
|
||||
@@ -97,11 +98,17 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
+ }
|
||||
+ if (gBrowser.isTabGroup(this.parentElement?.parentElement)) {
|
||||
+ return this.parentElement.parentElement;
|
||||
+ }
|
||||
+ if (this.pinned && !this.hasAttribute('zen-essential')) {
|
||||
+ let collapsiblePins = gZenWorkspaces.workspaceElement(this.getAttribute('zen-workspace-id'))?.collapsiblePins;
|
||||
+ if (collapsiblePins?.collapsed) {
|
||||
+ return collapsiblePins;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
get splitview() {
|
||||
@@ -473,6 +491,8 @@
|
||||
@@ -489,6 +513,8 @@
|
||||
this.style.MozUserFocus = "ignore";
|
||||
} else if (
|
||||
event.target.classList.contains("tab-close-button") ||
|
||||
@@ -110,7 +117,7 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
event.target.classList.contains("tab-icon-overlay") ||
|
||||
event.target.classList.contains("tab-audio-button")
|
||||
) {
|
||||
@@ -527,6 +547,10 @@
|
||||
@@ -543,6 +569,10 @@
|
||||
this.style.MozUserFocus = "";
|
||||
}
|
||||
|
||||
@@ -121,15 +128,7 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
on_click(event) {
|
||||
if (event.button != 0) {
|
||||
return;
|
||||
@@ -575,6 +599,7 @@
|
||||
)
|
||||
);
|
||||
} else {
|
||||
+ gZenPinnedTabManager._removePinnedAttributes(this, true);
|
||||
gBrowser.removeTab(this, {
|
||||
animate: true,
|
||||
triggeringEvent: event,
|
||||
@@ -587,6 +612,14 @@
|
||||
@@ -603,6 +633,14 @@
|
||||
// (see tabbrowser-tabs 'click' handler).
|
||||
gBrowser.tabContainer._blockDblClick = true;
|
||||
}
|
||||
@@ -144,7 +143,7 @@ index 2dacb325190b6ae42ebeb3e9f0e862dc690ecdca..02d70e9b0261f92917d274759838cfbf
|
||||
}
|
||||
|
||||
on_dblclick(event) {
|
||||
@@ -610,6 +643,8 @@
|
||||
@@ -626,6 +664,8 @@
|
||||
animate: true,
|
||||
triggeringEvent: event,
|
||||
});
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f53bc059b 100644
|
||||
index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..f3966d85049735538b24424f42d4a690eaf7bbec 100644
|
||||
--- a/browser/components/tabbrowser/content/tabbrowser.js
|
||||
+++ b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
@@ -386,6 +386,7 @@
|
||||
@@ -398,6 +398,7 @@
|
||||
* @type {MozBrowser[]}
|
||||
*/
|
||||
get splitViewBrowsers() {
|
||||
@@ -10,7 +10,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
const browsers = [];
|
||||
if (this.#activeSplitView) {
|
||||
for (const tab of this.#activeSplitView.tabs) {
|
||||
@@ -450,15 +451,64 @@
|
||||
@@ -462,15 +463,66 @@
|
||||
return this.tabContainer.visibleTabs;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
+ return this.#handleTabMove(...args);
|
||||
+ }
|
||||
+
|
||||
+ get zenTabProgressListener() { return TabProgressListener; }
|
||||
+
|
||||
+ get _numVisiblePinTabsWithoutCollapsed() {
|
||||
+ let i = 0;
|
||||
+ for (let item of this.tabContainer.ariaFocusableItems) {
|
||||
@@ -77,7 +79,18 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
set selectedTab(val) {
|
||||
if (
|
||||
gSharedTabWarning.willShowSharedTabWarning(val) ||
|
||||
@@ -613,6 +663,7 @@
|
||||
@@ -546,6 +598,10 @@
|
||||
userContextId = parseInt(tabArgument.getAttribute("usercontextid"), 10);
|
||||
}
|
||||
|
||||
+ if (typeof window._zenStartupUnsyncedUserContextId == 'number') {
|
||||
+ userContextId = window._zenStartupUnsyncedUserContextId;
|
||||
+ }
|
||||
+
|
||||
if (tabArgument && tabArgument.linkedBrowser) {
|
||||
remoteType = tabArgument.linkedBrowser.remoteType;
|
||||
initialBrowsingContextGroupId =
|
||||
@@ -625,6 +681,7 @@
|
||||
this.tabpanels.appendChild(panel);
|
||||
|
||||
let tab = this.tabs[0];
|
||||
@@ -85,7 +98,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
tab.linkedPanel = uniqueId;
|
||||
this._selectedTab = tab;
|
||||
this._selectedBrowser = browser;
|
||||
@@ -898,13 +949,17 @@
|
||||
@@ -912,13 +969,18 @@
|
||||
}
|
||||
|
||||
this.showTab(aTab);
|
||||
@@ -98,17 +111,21 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
);
|
||||
// If periphery is null, append to end
|
||||
- this.pinnedTabsContainer.insertBefore(aTab, periphery);
|
||||
+ this.tabContainer.tabDragAndDrop.handle_drop_transition(this.tabs[this.pinnedTabCount - 1], aTab, [aTab], false);
|
||||
+ aTab.hasAttribute("zen-essential") ? gZenWorkspaces.getEssentialsSection(aTab).appendChild(aTab) : this.pinnedTabsContainer.insertBefore(aTab, this.pinnedTabsContainer.lastChild)
|
||||
});
|
||||
+ }
|
||||
|
||||
aTab.setAttribute("pinned", "true");
|
||||
this._updateTabBarForPinnedTabs();
|
||||
@@ -917,11 +972,15 @@
|
||||
@@ -931,11 +993,18 @@
|
||||
}
|
||||
|
||||
this.#handleTabMove(aTab, () => {
|
||||
+ const handled = gZenFolders.handleTabUnpin(aTab);
|
||||
+ if (!handled) {
|
||||
+ this.tabContainer.tabDragAndDrop.handle_drop_transition(this.tabs[this.pinnedTabCount + 1 /* empty + extra */], aTab, [aTab], true);
|
||||
+ }
|
||||
+
|
||||
// we remove this attribute first, so that allTabs represents
|
||||
// the moving of a tab from the pinned tabs container
|
||||
@@ -121,16 +138,17 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
});
|
||||
|
||||
aTab.style.marginInlineStart = "";
|
||||
@@ -1098,6 +1157,8 @@
|
||||
@@ -1112,6 +1181,9 @@
|
||||
|
||||
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
|
||||
|
||||
+ try {
|
||||
+ gZenPinnedTabManager.onTabIconChanged(aTab, aIconURL);
|
||||
+ aIconURL = aTab.zenStaticIcon || aIconURL;
|
||||
+ gZenPinnedTabManager.onTabIconChanged(aTab, aIconURL);
|
||||
if (
|
||||
aIconURL &&
|
||||
!LOCAL_PROTOCOLS.some(protocol => aIconURL.startsWith(protocol))
|
||||
@@ -1107,6 +1168,9 @@
|
||||
@@ -1121,6 +1193,9 @@
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -140,7 +158,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
|
||||
let browser = this.getBrowserForTab(aTab);
|
||||
browser.mIconURL = aIconURL;
|
||||
@@ -1379,7 +1443,6 @@
|
||||
@@ -1393,7 +1468,6 @@
|
||||
|
||||
// Preview mode should not reset the owner
|
||||
if (!this._previewMode && !oldTab.selected) {
|
||||
@@ -148,7 +166,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
}
|
||||
|
||||
let lastRelatedTab = this._lastRelatedTabMap.get(oldTab);
|
||||
@@ -1470,6 +1533,7 @@
|
||||
@@ -1484,6 +1558,7 @@
|
||||
if (!this._previewMode) {
|
||||
newTab.recordTimeFromUnloadToReload();
|
||||
newTab.updateLastAccessed();
|
||||
@@ -156,7 +174,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
oldTab.updateLastAccessed();
|
||||
// if this is the foreground window, update the last-seen timestamps.
|
||||
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
|
||||
@@ -1622,6 +1686,9 @@
|
||||
@@ -1636,6 +1711,9 @@
|
||||
}
|
||||
|
||||
let activeEl = document.activeElement;
|
||||
@@ -166,17 +184,19 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
// If focus is on the old tab, move it to the new tab.
|
||||
if (activeEl == oldTab) {
|
||||
newTab.focus();
|
||||
@@ -1945,7 +2012,8 @@
|
||||
@@ -1959,6 +2037,11 @@
|
||||
}
|
||||
|
||||
_setTabLabel(aTab, aLabel, { beforeTabOpen, isContentTitle, isURL } = {}) {
|
||||
- if (!aLabel || aLabel.includes("about:reader?")) {
|
||||
+ if (!aTab._zenContentsVisible && !aTab._zenChangeLabelFlag && !aTab._labelIsInitialTitle && !gZenWorkspaces.privateWindowOrDisabled) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ aLabel = aTab.zenStaticLabel || aLabel;
|
||||
+ gZenPinnedTabManager.onTabLabelChanged(aTab);
|
||||
+ if (!aLabel || aLabel.includes("about:reader?") || aTab.hasAttribute("zen-has-static-label")) {
|
||||
if (!aLabel || aLabel.includes("about:reader?")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2053,7 +2121,7 @@
|
||||
@@ -2067,7 +2150,7 @@
|
||||
newIndex = this.selectedTab._tPos + 1;
|
||||
}
|
||||
|
||||
@@ -185,7 +205,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
if (this.isTabGroupLabel(targetTab)) {
|
||||
throw new Error(
|
||||
"Replacing a tab group label with a tab is not supported"
|
||||
@@ -2328,6 +2396,7 @@
|
||||
@@ -2342,6 +2425,7 @@
|
||||
uriIsAboutBlank,
|
||||
userContextId,
|
||||
skipLoad,
|
||||
@@ -193,7 +213,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
} = {}) {
|
||||
let b = document.createXULElement("browser");
|
||||
// Use the JSM global to create the permanentKey, so that if the
|
||||
@@ -2401,8 +2470,7 @@
|
||||
@@ -2415,8 +2499,7 @@
|
||||
// we use a different attribute name for this?
|
||||
b.setAttribute("name", name);
|
||||
}
|
||||
@@ -203,7 +223,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
b.setAttribute("transparent", "true");
|
||||
}
|
||||
|
||||
@@ -2567,7 +2635,7 @@
|
||||
@@ -2581,7 +2664,7 @@
|
||||
|
||||
let panel = this.getPanel(browser);
|
||||
let uniqueId = this._generateUniquePanelID();
|
||||
@@ -212,7 +232,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
aTab.linkedPanel = uniqueId;
|
||||
|
||||
// Inject the <browser> into the DOM if necessary.
|
||||
@@ -2626,8 +2694,8 @@
|
||||
@@ -2640,8 +2723,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) {
|
||||
@@ -223,7 +243,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
} else {
|
||||
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
|
||||
}
|
||||
@@ -2814,7 +2882,6 @@
|
||||
@@ -2828,7 +2911,6 @@
|
||||
this.selectedTab = this.addTrustedTab(BROWSER_NEW_TAB_URL, {
|
||||
tabIndex: tab._tPos + 1,
|
||||
userContextId: tab.userContextId,
|
||||
@@ -231,16 +251,17 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
focusUrlBar: true,
|
||||
});
|
||||
resolve(this.selectedBrowser);
|
||||
@@ -2923,6 +2990,8 @@
|
||||
@@ -2938,6 +3020,9 @@
|
||||
schemelessInput,
|
||||
hasValidUserGestureActivation = false,
|
||||
textDirectiveUserActivation = false,
|
||||
+ _forZenEmptyTab,
|
||||
+ essential,
|
||||
+ zenWorkspaceId,
|
||||
} = {}
|
||||
) {
|
||||
// all callers of addTab that pass a params object need to pass
|
||||
@@ -2933,10 +3002,17 @@
|
||||
@@ -2948,10 +3033,17 @@
|
||||
);
|
||||
}
|
||||
|
||||
@@ -258,7 +279,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
// If we're opening a foreground tab, set the owner by default.
|
||||
ownerTab ??= inBackground ? null : this.selectedTab;
|
||||
|
||||
@@ -2944,6 +3020,7 @@
|
||||
@@ -2959,6 +3051,7 @@
|
||||
if (this.selectedTab.owner) {
|
||||
this.selectedTab.owner = null;
|
||||
}
|
||||
@@ -266,14 +287,16 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
|
||||
// Find the tab that opened this one, if any. This is used for
|
||||
// determining positioning, and inherited attributes such as the
|
||||
@@ -2996,6 +3073,19 @@
|
||||
@@ -3011,6 +3104,21 @@
|
||||
noInitialLabel,
|
||||
skipBackgroundNotify,
|
||||
});
|
||||
+ if (hasZenDefaultUserContextId) {
|
||||
+ t.setAttribute("zenDefaultUserContextId", "true");
|
||||
+ }
|
||||
+ if (zenForcedWorkspaceId !== undefined) {
|
||||
+ if (zenWorkspaceId) {
|
||||
+ t.setAttribute("zen-workspace-id", zenWorkspaceId);
|
||||
+ } else if (zenForcedWorkspaceId !== undefined) {
|
||||
+ t.setAttribute("zen-workspace-id", zenForcedWorkspaceId);
|
||||
+ t.setAttribute("change-workspace", "")
|
||||
+ }
|
||||
@@ -286,7 +309,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
if (insertTab) {
|
||||
// Insert the tab into the tab container in the correct position.
|
||||
this.#insertTabAtIndex(t, {
|
||||
@@ -3004,6 +3094,7 @@
|
||||
@@ -3019,6 +3127,7 @@
|
||||
ownerTab,
|
||||
openerTab,
|
||||
pinned,
|
||||
@@ -294,7 +317,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
bulkOrderedOpen,
|
||||
tabGroup: tabGroup ?? openerTab?.group,
|
||||
});
|
||||
@@ -3022,6 +3113,7 @@
|
||||
@@ -3037,6 +3146,7 @@
|
||||
openWindowInfo,
|
||||
skipLoad,
|
||||
triggeringRemoteType,
|
||||
@@ -302,7 +325,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
}));
|
||||
|
||||
if (focusUrlBar) {
|
||||
@@ -3146,6 +3238,12 @@
|
||||
@@ -3161,6 +3271,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -315,19 +338,25 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
// Additionally send pinned tab events
|
||||
if (pinned) {
|
||||
this.#notifyPinnedStatus(t);
|
||||
@@ -3349,10 +3447,10 @@
|
||||
@@ -3375,6 +3491,7 @@
|
||||
isAdoptingGroup = false,
|
||||
isUserTriggered = false,
|
||||
telemetryUserCreateSource = "unknown",
|
||||
+ forSplitView = false,
|
||||
} = {}
|
||||
) {
|
||||
if (!tabs?.length) {
|
||||
- throw new Error("Cannot create tab group with zero tabs");
|
||||
if (
|
||||
@@ -3385,9 +3502,6 @@
|
||||
!this.isSplitViewWrapper(tabOrSplitView)
|
||||
)
|
||||
) {
|
||||
- throw new Error(
|
||||
- "Cannot create tab group with zero tabs or split views"
|
||||
- );
|
||||
}
|
||||
|
||||
if (!color) {
|
||||
@@ -3373,9 +3471,14 @@
|
||||
@@ -3408,9 +3522,14 @@
|
||||
label,
|
||||
isAdoptingGroup
|
||||
);
|
||||
@@ -335,16 +364,16 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
+ if (forSplitView) {
|
||||
+ group.setAttribute('split-view-group', true);
|
||||
+ }
|
||||
+ group.essential = tabs.some(tab => tab.hasAttribute("essential"));
|
||||
+ group.pinned = group.essential || tabs.some(tab => tab.pinned);
|
||||
+ group.essential = tabsAndSplitViews.some(tab => tab.hasAttribute("essential"));
|
||||
+ group.pinned = group.essential || tabsAndSplitViews.some(tab => tab.pinned);
|
||||
+ if (forSplitView && !insertBefore?.group?.isZenFolder) insertBefore = insertBefore?.group ?? insertBefore;
|
||||
+ insertBefore.before(
|
||||
group,
|
||||
- insertBefore?.group ?? insertBefore
|
||||
);
|
||||
group.addTabs(tabs);
|
||||
group.addTabs(tabsAndSplitViews);
|
||||
|
||||
@@ -3496,7 +3599,7 @@
|
||||
@@ -3531,7 +3650,7 @@
|
||||
}
|
||||
|
||||
this.#handleTabMove(tab, () =>
|
||||
@@ -353,7 +382,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
);
|
||||
}
|
||||
|
||||
@@ -3698,6 +3801,7 @@
|
||||
@@ -3746,6 +3865,7 @@
|
||||
openWindowInfo,
|
||||
skipLoad,
|
||||
triggeringRemoteType,
|
||||
@@ -361,7 +390,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
}
|
||||
) {
|
||||
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
|
||||
@@ -3767,6 +3871,7 @@
|
||||
@@ -3815,6 +3935,7 @@
|
||||
openWindowInfo,
|
||||
name,
|
||||
skipLoad,
|
||||
@@ -369,7 +398,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3955,7 +4060,7 @@
|
||||
@@ -4003,7 +4124,7 @@
|
||||
// Add a new tab if needed.
|
||||
if (!tab) {
|
||||
let createLazyBrowser =
|
||||
@@ -378,7 +407,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
|
||||
let url = "about:blank";
|
||||
if (tabData.entries?.length) {
|
||||
@@ -3992,8 +4097,10 @@
|
||||
@@ -4040,8 +4161,10 @@
|
||||
insertTab: false,
|
||||
skipLoad: true,
|
||||
preferredRemoteType,
|
||||
@@ -390,7 +419,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
if (select) {
|
||||
tabToSelect = tab;
|
||||
}
|
||||
@@ -4005,7 +4112,8 @@
|
||||
@@ -4053,7 +4176,8 @@
|
||||
this.pinTab(tab);
|
||||
// Then ensure all the tab open/pinning information is sent.
|
||||
this._fireTabOpen(tab, {});
|
||||
@@ -400,7 +429,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
let { groupId } = tabData;
|
||||
const tabGroup = tabGroupWorkingData.get(groupId);
|
||||
// if a tab refers to a tab group we don't know, skip any group
|
||||
@@ -4019,7 +4127,10 @@
|
||||
@@ -4067,7 +4191,10 @@
|
||||
tabGroup.stateData.id,
|
||||
tabGroup.stateData.color,
|
||||
tabGroup.stateData.collapsed,
|
||||
@@ -412,7 +441,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
);
|
||||
tabsFragment.appendChild(tabGroup.node);
|
||||
}
|
||||
@@ -4064,9 +4175,23 @@
|
||||
@@ -4112,9 +4239,23 @@
|
||||
// to remove the old selected tab.
|
||||
if (tabToSelect) {
|
||||
let leftoverTab = this.selectedTab;
|
||||
@@ -436,7 +465,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
|
||||
if (tabs.length > 1 || !tabs[0].selected) {
|
||||
this._updateTabsAfterInsert();
|
||||
@@ -4257,11 +4382,14 @@
|
||||
@@ -4305,11 +4446,14 @@
|
||||
if (ownerTab) {
|
||||
tab.owner = ownerTab;
|
||||
}
|
||||
@@ -452,7 +481,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
if (
|
||||
!bulkOrderedOpen &&
|
||||
((openerTab &&
|
||||
@@ -4273,7 +4401,7 @@
|
||||
@@ -4321,7 +4465,7 @@
|
||||
let lastRelatedTab =
|
||||
openerTab && this._lastRelatedTabMap.get(openerTab);
|
||||
let previousTab = lastRelatedTab || openerTab || this.selectedTab;
|
||||
@@ -461,16 +490,16 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
tabGroup = previousTab.group;
|
||||
}
|
||||
if (
|
||||
@@ -4284,7 +4412,7 @@
|
||||
) {
|
||||
elementIndex = Infinity;
|
||||
@@ -4337,7 +4481,7 @@
|
||||
previousTab.splitview
|
||||
) + 1;
|
||||
} else if (previousTab.visible) {
|
||||
- elementIndex = previousTab.elementIndex + 1;
|
||||
+ elementIndex = (typeof previousTab.elementIndex === 'undefined') ? elementIndex : (previousTab.elementIndex + 1);
|
||||
} else if (previousTab == FirefoxViewHandler.tab) {
|
||||
elementIndex = 0;
|
||||
}
|
||||
@@ -4312,14 +4440,14 @@
|
||||
@@ -4365,14 +4509,14 @@
|
||||
}
|
||||
// Ensure index is within bounds.
|
||||
if (tab.pinned) {
|
||||
@@ -489,16 +518,16 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
|
||||
if (pinned && !itemAfter?.pinned) {
|
||||
itemAfter = null;
|
||||
@@ -4330,7 +4458,7 @@
|
||||
@@ -4385,7 +4529,7 @@
|
||||
|
||||
this.tabContainer._invalidateCachedTabs();
|
||||
|
||||
- if (tabGroup) {
|
||||
+ if (tabGroup && !tabGroup.hasAttribute("split-view-group")) {
|
||||
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);
|
||||
@@ -4358,7 +4486,11 @@
|
||||
if (
|
||||
(this.isTab(itemAfter) && itemAfter.group == tabGroup) ||
|
||||
this.isSplitViewWrapper(itemAfter)
|
||||
@@ -4416,7 +4560,11 @@
|
||||
const tabContainer = pinned
|
||||
? this.tabContainer.pinnedTabsContainer
|
||||
: this.tabContainer;
|
||||
@@ -509,8 +538,8 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
+ }
|
||||
}
|
||||
|
||||
this._updateTabsAfterInsert();
|
||||
@@ -4366,6 +4498,7 @@
|
||||
if (tab.group?.collapsed) {
|
||||
@@ -4431,6 +4579,7 @@
|
||||
if (pinned) {
|
||||
this._updateTabBarForPinnedTabs();
|
||||
}
|
||||
@@ -518,17 +547,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
|
||||
TabBarVisibility.update();
|
||||
}
|
||||
@@ -4655,6 +4788,9 @@
|
||||
return;
|
||||
}
|
||||
|
||||
+ for (let tab of selectedTabs) {
|
||||
+ gZenPinnedTabManager._removePinnedAttributes(tab, true);
|
||||
+ }
|
||||
this.removeTabs(selectedTabs, { isUserTriggered, telemetrySource });
|
||||
}
|
||||
|
||||
@@ -4916,6 +5052,7 @@
|
||||
@@ -4983,6 +5132,7 @@
|
||||
telemetrySource,
|
||||
} = {}
|
||||
) {
|
||||
@@ -536,7 +555,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs
|
||||
// can be considered equivalent to closing the window.
|
||||
if (
|
||||
@@ -5005,6 +5142,7 @@
|
||||
@@ -5072,6 +5222,7 @@
|
||||
if (lastToClose) {
|
||||
this.removeTab(lastToClose, aParams);
|
||||
}
|
||||
@@ -544,7 +563,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
@@ -5043,6 +5181,12 @@
|
||||
@@ -5110,6 +5261,12 @@
|
||||
aTab._closeTimeNoAnimTimerId = Glean.browserTabclose.timeNoAnim.start();
|
||||
}
|
||||
|
||||
@@ -557,7 +576,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
// Handle requests for synchronously removing an already
|
||||
// asynchronously closing tab.
|
||||
if (!animate && aTab.closing) {
|
||||
@@ -5057,6 +5201,9 @@
|
||||
@@ -5124,6 +5281,9 @@
|
||||
// state).
|
||||
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
|
||||
let isLastTab = this.#isLastTabInWindow(aTab);
|
||||
@@ -567,7 +586,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
if (
|
||||
!this._beginRemoveTab(aTab, {
|
||||
closeWindowFastpath: true,
|
||||
@@ -5105,7 +5252,13 @@
|
||||
@@ -5172,7 +5332,13 @@
|
||||
// We're not animating, so we can cancel the animation stopwatch.
|
||||
Glean.browserTabclose.timeAnim.cancel(aTab._closeTimeAnimTimerId);
|
||||
aTab._closeTimeAnimTimerId = null;
|
||||
@@ -582,7 +601,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5239,7 +5392,7 @@
|
||||
@@ -5306,7 +5472,7 @@
|
||||
closeWindowWithLastTab != null
|
||||
? closeWindowWithLastTab
|
||||
: !window.toolbar.visible ||
|
||||
@@ -591,7 +610,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
|
||||
if (closeWindow) {
|
||||
// We've already called beforeunload on all the relevant tabs if we get here,
|
||||
@@ -5263,6 +5416,7 @@
|
||||
@@ -5330,6 +5496,7 @@
|
||||
|
||||
newTab = true;
|
||||
}
|
||||
@@ -599,7 +618,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
aTab._endRemoveArgs = [closeWindow, newTab];
|
||||
|
||||
// swapBrowsersAndCloseOther will take care of closing the window without animation.
|
||||
@@ -5303,13 +5457,7 @@
|
||||
@@ -5370,13 +5537,7 @@
|
||||
aTab._mouseleave();
|
||||
|
||||
if (newTab) {
|
||||
@@ -614,7 +633,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
} else {
|
||||
TabBarVisibility.update();
|
||||
}
|
||||
@@ -5442,6 +5590,7 @@
|
||||
@@ -5509,6 +5670,7 @@
|
||||
this.tabs[i]._tPos = i;
|
||||
}
|
||||
|
||||
@@ -622,7 +641,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
if (!this._windowIsClosing) {
|
||||
// update tab close buttons state
|
||||
this.tabContainer._updateCloseButtons();
|
||||
@@ -5663,6 +5812,7 @@
|
||||
@@ -5732,6 +5894,7 @@
|
||||
}
|
||||
|
||||
let excludeTabs = new Set(aExcludeTabs);
|
||||
@@ -630,7 +649,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
|
||||
// If this tab has a successor, it should be selectable, since
|
||||
// hiding or closing a tab removes that tab as a successor.
|
||||
@@ -5675,13 +5825,13 @@
|
||||
@@ -5744,13 +5907,13 @@
|
||||
!excludeTabs.has(aTab.owner) &&
|
||||
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
|
||||
) {
|
||||
@@ -646,7 +665,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
);
|
||||
|
||||
let tab = this.tabContainer.findNextTab(aTab, {
|
||||
@@ -5697,7 +5847,7 @@
|
||||
@@ -5766,7 +5929,7 @@
|
||||
}
|
||||
|
||||
if (tab) {
|
||||
@@ -655,7 +674,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
}
|
||||
|
||||
// If no qualifying visible tab was found, see if there is a tab in
|
||||
@@ -5718,7 +5868,7 @@
|
||||
@@ -5787,7 +5950,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
@@ -664,7 +683,47 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
}
|
||||
|
||||
_blurTab(aTab) {
|
||||
@@ -6124,10 +6274,10 @@
|
||||
@@ -5798,7 +5961,7 @@
|
||||
* @returns {boolean}
|
||||
* False if swapping isn't permitted, true otherwise.
|
||||
*/
|
||||
- swapBrowsersAndCloseOther(aOurTab, aOtherTab) {
|
||||
+ swapBrowsersAndCloseOther(aOurTab, aOtherTab, zenCloseOther = true) {
|
||||
// Do not allow transfering a private tab to a non-private window
|
||||
// and vice versa.
|
||||
if (
|
||||
@@ -5852,6 +6015,7 @@
|
||||
// fire the beforeunload event in the process. Close the other
|
||||
// window if this was its last tab.
|
||||
if (
|
||||
+ zenCloseOther &&
|
||||
!remoteBrowser._beginRemoveTab(aOtherTab, {
|
||||
adoptedByTab: aOurTab,
|
||||
closeWindowWithLastTab: true,
|
||||
@@ -5863,7 +6027,7 @@
|
||||
// If this is the last tab of the window, hide the window
|
||||
// immediately without animation before the docshell swap, to avoid
|
||||
// about:blank being painted.
|
||||
- let [closeWindow] = aOtherTab._endRemoveArgs;
|
||||
+ let [closeWindow] = !zenCloseOther ? [false] : aOtherTab._endRemoveArgs;
|
||||
if (closeWindow) {
|
||||
let win = aOtherTab.ownerGlobal;
|
||||
win.windowUtils.suppressAnimation(true);
|
||||
@@ -5987,11 +6151,13 @@
|
||||
}
|
||||
|
||||
// Finish tearing down the tab that's going away.
|
||||
+ if (zenCloseOther) {
|
||||
if (closeWindow) {
|
||||
aOtherTab.ownerGlobal.close();
|
||||
} else {
|
||||
remoteBrowser._endRemoveTab(aOtherTab);
|
||||
}
|
||||
+ }
|
||||
|
||||
this.setTabTitle(aOurTab);
|
||||
|
||||
@@ -6193,10 +6359,10 @@
|
||||
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
|
||||
}
|
||||
|
||||
@@ -677,15 +736,33 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
aTab.selected ||
|
||||
aTab.closing ||
|
||||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
|
||||
@@ -6186,6 +6336,7 @@
|
||||
@@ -6254,7 +6420,8 @@
|
||||
*
|
||||
* @param {MozTabbrowserTab|MozTabbrowserTabGroup|MozTabbrowserTabGroup.labelElement} aTab
|
||||
*/
|
||||
replaceTabWithWindow(aTab, aOptions) {
|
||||
- replaceTabWithWindow(aTab, aOptions) {
|
||||
+ replaceTabWithWindow(aTab, aOptions, zenForceSync = false) {
|
||||
+ if (!this.isTab(aTab)) return; // TODO: Handle tab groups
|
||||
if (this.tabs.length == 1) {
|
||||
return null;
|
||||
}
|
||||
@@ -6319,7 +6470,7 @@
|
||||
@@ -6278,12 +6445,14 @@
|
||||
}
|
||||
|
||||
// tell a new window to take the "dropped" tab
|
||||
- return window.openDialog(
|
||||
+ let win = window.openDialog(
|
||||
AppConstants.BROWSER_CHROME_URL,
|
||||
"_blank",
|
||||
options,
|
||||
aTab
|
||||
);
|
||||
+ win._zenStartupSyncFlag = zenForceSync ? 'synced' : 'unsynced';
|
||||
+ return win;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6388,7 +6557,7 @@
|
||||
* `true` if element is a `<tab-group>`
|
||||
*/
|
||||
isTabGroup(element) {
|
||||
@@ -694,7 +771,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6404,8 +6555,8 @@
|
||||
@@ -6473,8 +6642,8 @@
|
||||
}
|
||||
|
||||
// Don't allow mixing pinned and unpinned tabs.
|
||||
@@ -705,7 +782,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
} else {
|
||||
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
|
||||
}
|
||||
@@ -6431,10 +6582,16 @@
|
||||
@@ -6500,10 +6669,16 @@
|
||||
this.#handleTabMove(
|
||||
element,
|
||||
() => {
|
||||
@@ -724,7 +801,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
if (neighbor && this.isTab(element) && tabIndex > element._tPos) {
|
||||
neighbor.after(element);
|
||||
} else {
|
||||
@@ -6492,23 +6649,28 @@
|
||||
@@ -6561,23 +6736,31 @@
|
||||
#moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) {
|
||||
if (this.isTabGroupLabel(targetElement)) {
|
||||
targetElement = targetElement.group;
|
||||
@@ -745,6 +822,9 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
|
||||
// Don't allow mixing pinned and unpinned tabs.
|
||||
+ targetElement = gZenGlanceManager.getTabOrGlanceParent(targetElement);
|
||||
+ if (targetElement?.classList.contains('tab-group-label-container')) {
|
||||
+ targetElement = targetElement.parentElement;
|
||||
+ }
|
||||
+ if (element.hasAttribute('zen-essential') && !targetElement?.hasAttribute('zen-essential')) {
|
||||
+ targetElement = this.tabsWithoutGlance[this._numZenEssentials - 1];
|
||||
+ } else
|
||||
@@ -759,7 +839,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
} 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
|
||||
@@ -6521,14 +6683,34 @@
|
||||
@@ -6590,14 +6773,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.
|
||||
@@ -795,7 +875,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
element.pinned
|
||||
? this.tabContainer.pinnedTabsContainer
|
||||
: this.tabContainer;
|
||||
@@ -6537,7 +6719,7 @@
|
||||
@@ -6606,7 +6809,7 @@
|
||||
element,
|
||||
() => {
|
||||
if (moveBefore) {
|
||||
@@ -804,10 +884,10 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
} else if (targetElement) {
|
||||
targetElement.after(element);
|
||||
} else {
|
||||
@@ -6607,10 +6789,10 @@
|
||||
@@ -6676,10 +6879,10 @@
|
||||
* @param {TabMetricsContext} [metricsContext]
|
||||
*/
|
||||
moveTabToGroup(aTab, aGroup, metricsContext) {
|
||||
moveTabToExistingGroup(aTab, aGroup, metricsContext) {
|
||||
- if (!this.isTab(aTab)) {
|
||||
+ if (!this.isTab(aTab) && !aTab.hasAttribute('split-view-group')) {
|
||||
throw new Error("Can only move a tab into a tab group");
|
||||
@@ -817,7 +897,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
return;
|
||||
}
|
||||
if (aTab.group && aTab.group.id === aGroup.id) {
|
||||
@@ -6656,6 +6838,7 @@
|
||||
@@ -6751,6 +6954,7 @@
|
||||
|
||||
let state = {
|
||||
tabIndex: tab._tPos,
|
||||
@@ -825,7 +905,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
};
|
||||
if (tab.visible) {
|
||||
state.elementIndex = tab.elementIndex;
|
||||
@@ -6682,7 +6865,7 @@
|
||||
@@ -6777,7 +6981,7 @@
|
||||
let changedTabGroup =
|
||||
previousTabState.tabGroupId != currentTabState.tabGroupId;
|
||||
|
||||
@@ -834,7 +914,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
tab.dispatchEvent(
|
||||
new CustomEvent("TabMove", {
|
||||
bubbles: true,
|
||||
@@ -6723,6 +6906,10 @@
|
||||
@@ -6818,6 +7022,10 @@
|
||||
|
||||
moveActionCallback();
|
||||
|
||||
@@ -845,7 +925,16 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
// Clear tabs cache after moving nodes because the order of tabs may have
|
||||
// changed.
|
||||
this.tabContainer._invalidateCachedTabs();
|
||||
@@ -7623,7 +7810,7 @@
|
||||
@@ -6910,6 +7118,8 @@
|
||||
params.userContextId = aTab.getAttribute("usercontextid");
|
||||
}
|
||||
let newTab = this.addWebTab("about:blank", params);
|
||||
+ newTab._zenContentsVisible = true;
|
||||
+ newTab.zenStaticLabel = aTab.zenStaticLabel;
|
||||
let newBrowser = this.getBrowserForTab(newTab);
|
||||
|
||||
aTab.container.tabDragAndDrop.finishAnimateTabMove();
|
||||
@@ -7718,7 +7928,7 @@
|
||||
// preventDefault(). It will still raise the window if appropriate.
|
||||
break;
|
||||
}
|
||||
@@ -854,7 +943,7 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
window.focus();
|
||||
aEvent.preventDefault();
|
||||
break;
|
||||
@@ -7640,7 +7827,6 @@
|
||||
@@ -7735,7 +7945,6 @@
|
||||
}
|
||||
case "TabGroupCollapse":
|
||||
aEvent.target.tabs.forEach(tab => {
|
||||
@@ -862,7 +951,17 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
});
|
||||
break;
|
||||
case "TabGroupCreateByUser":
|
||||
@@ -8589,6 +8775,7 @@
|
||||
@@ -7895,7 +8104,9 @@
|
||||
|
||||
let filter = this._tabFilters.get(tab);
|
||||
if (filter) {
|
||||
+ try {
|
||||
browser.webProgress.removeProgressListener(filter);
|
||||
+ } catch {}
|
||||
|
||||
let listener = this._tabListeners.get(tab);
|
||||
if (listener) {
|
||||
@@ -8698,6 +8909,7 @@
|
||||
aWebProgress.isTopLevel
|
||||
) {
|
||||
this.mTab.setAttribute("busy", "true");
|
||||
@@ -870,7 +969,15 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
gBrowser._tabAttrModified(this.mTab, ["busy"]);
|
||||
this.mTab._notselectedsinceload = !this.mTab.selected;
|
||||
}
|
||||
@@ -9623,7 +9810,7 @@ var TabContextMenu = {
|
||||
@@ -8778,6 +8990,7 @@
|
||||
// known defaults. Note we use the original URL since about:newtab
|
||||
// redirects to a prerendered page.
|
||||
const shouldRemoveFavicon =
|
||||
+ !this.mTab.zenStaticIcon &&
|
||||
!this.mBrowser.mIconURL &&
|
||||
!ignoreBlank &&
|
||||
!(originalLocation.spec in FAVICON_DEFAULTS);
|
||||
@@ -9803,7 +10016,7 @@ var TabContextMenu = {
|
||||
);
|
||||
contextUnpinSelectedTabs.hidden =
|
||||
!this.contextTab.pinned || !this.multiselected;
|
||||
@@ -879,11 +986,3 @@ index 42027bfa55eab8ea9298a7d425f2ded45188f7f3..6aa725c0e5a6a29dc33fcb162f83522f
|
||||
// Build Ask Chat items
|
||||
TabContextMenu.GenAI.buildTabMenu(
|
||||
document.getElementById("context_askChat"),
|
||||
@@ -9943,6 +10130,7 @@ var TabContextMenu = {
|
||||
)
|
||||
);
|
||||
} else {
|
||||
+ gZenPinnedTabManager._removePinnedAttributes(this.contextTab, true);
|
||||
gBrowser.removeTab(this.contextTab, {
|
||||
animate: true,
|
||||
...gBrowser.TabMetrics.userTriggeredContext(
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js
|
||||
index 394b2af2e187b82bb3e98ebcdc6e66b63036e20d..4757555c7654a14578a5d057323057ebc71c2f5f 100644
|
||||
index 9abf115062e7c86196d7cb6b8ac82a9bb63b5a65..9a38d7dc10403c1ee721b6abf33d525a4aa1f821 100644
|
||||
--- a/browser/components/tabbrowser/content/tabgroup.js
|
||||
+++ b/browser/components/tabbrowser/content/tabgroup.js
|
||||
@@ -14,11 +14,11 @@
|
||||
@@ -68,17 +68,30 @@ index 394b2af2e187b82bb3e98ebcdc6e66b63036e20d..4757555c7654a14578a5d057323057eb
|
||||
- return false;
|
||||
- });
|
||||
+ this.appendChild = function (child) {
|
||||
+ this.querySelector(".tab-group-container").appendChild(child);
|
||||
+ this.groupContainer.appendChild(child);
|
||||
+ for (let tab of this.tabs) {
|
||||
+ if (tab.hasAttribute("zen-empty-tab") && tab.group === this) {
|
||||
+ this.querySelector(".zen-tab-group-start").after(tab);
|
||||
+ this.groupStartElement.after(tab);
|
||||
+ }
|
||||
+ }
|
||||
+ };
|
||||
|
||||
this.#updateLabelAriaAttributes();
|
||||
|
||||
@@ -143,6 +162,8 @@
|
||||
@@ -132,17 +151,21 @@
|
||||
let tabGroupCreateDetail = this.#wasCreatedByAdoption
|
||||
? { isAdoptingGroup: true }
|
||||
: {};
|
||||
+ if (!this.hasAttribute('drag-image')) {
|
||||
this.dispatchEvent(
|
||||
new CustomEvent("TabGroupCreate", {
|
||||
bubbles: true,
|
||||
detail: tabGroupCreateDetail,
|
||||
})
|
||||
);
|
||||
+ }
|
||||
// Reset `wasCreatedByAdoption` to default of false so that we only
|
||||
// claim that a tab group was created by adoption the first time it
|
||||
// mounts after getting created by `Tabbrowser.adoptTabGroup`.
|
||||
this.#wasCreatedByAdoption = false;
|
||||
}
|
||||
@@ -87,19 +100,19 @@ index 394b2af2e187b82bb3e98ebcdc6e66b63036e20d..4757555c7654a14578a5d057323057eb
|
||||
|
||||
resetDefaultGroupName = () => {
|
||||
this.#defaultGroupName = "";
|
||||
@@ -211,7 +232,10 @@
|
||||
@@ -211,7 +234,10 @@
|
||||
}
|
||||
});
|
||||
}
|
||||
- this.#tabChangeObserver.observe(this, { childList: true });
|
||||
+ const container = this.querySelector(".tab-group-container");
|
||||
+ const container = this.groupContainer;
|
||||
+ if (container) {
|
||||
+ this.#tabChangeObserver.observe(container, { childList: true });
|
||||
+ }
|
||||
}
|
||||
|
||||
get color() {
|
||||
@@ -305,6 +329,9 @@
|
||||
@@ -305,6 +331,9 @@
|
||||
}
|
||||
|
||||
set collapsed(val) {
|
||||
@@ -109,7 +122,7 @@ index 394b2af2e187b82bb3e98ebcdc6e66b63036e20d..4757555c7654a14578a5d057323057eb
|
||||
if (!!val == this.collapsed) {
|
||||
return;
|
||||
}
|
||||
@@ -391,7 +418,6 @@
|
||||
@@ -391,7 +420,6 @@
|
||||
tabGroupName,
|
||||
})
|
||||
.then(result => {
|
||||
@@ -117,7 +130,7 @@ index 394b2af2e187b82bb3e98ebcdc6e66b63036e20d..4757555c7654a14578a5d057323057eb
|
||||
});
|
||||
}
|
||||
|
||||
@@ -466,13 +492,57 @@
|
||||
@@ -466,13 +494,65 @@
|
||||
* @returns {MozTabbrowserTab[]}
|
||||
*/
|
||||
get tabs() {
|
||||
@@ -126,20 +139,29 @@ index 394b2af2e187b82bb3e98ebcdc6e66b63036e20d..4757555c7654a14578a5d057323057eb
|
||||
- if (childrenArray[i].tagName == "tab-split-view-wrapper") {
|
||||
- childrenArray.splice(i, 1, ...childrenArray[i].tabs);
|
||||
+ // add other group tabs if they are under this group
|
||||
+ let childs = Array.from(this.querySelector(".tab-group-container")?.children ?? []);
|
||||
+ let childs = Array.from(this.groupContainer?.children ?? []);
|
||||
+ const tabsCollect = [];
|
||||
+ for (let item of childs) {
|
||||
+ tabsCollect.push(item);
|
||||
+ if (gBrowser.isTabGroup(item)) {
|
||||
+ tabsCollect.push(...item.tabs);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
- return childrenArray.filter(node => node.matches("tab"));
|
||||
+ return tabsCollect.filter(node => node.matches("tab"));
|
||||
+ }
|
||||
+
|
||||
+ get groupContainer() {
|
||||
+ return this.querySelector(".tab-group-container");
|
||||
+ }
|
||||
+
|
||||
+ get groupStartElement() {
|
||||
+ return this.querySelector(".zen-tab-group-start");
|
||||
+ }
|
||||
+
|
||||
+ get childGroupsAndTabs() {
|
||||
+ const result = [];
|
||||
+ const container = this.querySelector(".tab-group-container");
|
||||
+ const container = this.groupContainer;
|
||||
+
|
||||
+ for (const item of Array.from(container.children)) {
|
||||
+ if (gBrowser.isTab(item)) {
|
||||
@@ -169,9 +191,8 @@ index 394b2af2e187b82bb3e98ebcdc6e66b63036e20d..4757555c7654a14578a5d057323057eb
|
||||
+ currentGroup = currentGroup?.group;
|
||||
+ if (currentGroup.collapsed) {
|
||||
+ return false;
|
||||
}
|
||||
}
|
||||
- return childrenArray.filter(node => node.matches("tab"));
|
||||
+ }
|
||||
+ }
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
@@ -180,15 +201,15 @@ index 394b2af2e187b82bb3e98ebcdc6e66b63036e20d..4757555c7654a14578a5d057323057eb
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -553,7 +623,6 @@
|
||||
addTabs(tabs, metricsContext) {
|
||||
for (let tab of tabs) {
|
||||
if (tab.pinned) {
|
||||
- tab.ownerGlobal.gBrowser.unpinTab(tab);
|
||||
}
|
||||
let tabToMove =
|
||||
this.ownerGlobal === tab.ownerGlobal
|
||||
@@ -616,7 +685,7 @@
|
||||
@@ -560,7 +640,6 @@
|
||||
);
|
||||
} else {
|
||||
if (tabOrSplitView.pinned) {
|
||||
- tabOrSplitView.ownerGlobal.gBrowser.unpinTab(tabOrSplitView);
|
||||
}
|
||||
let tabToMove =
|
||||
this.ownerGlobal === tabOrSplitView.ownerGlobal
|
||||
@@ -625,7 +704,7 @@
|
||||
*/
|
||||
on_click(event) {
|
||||
let isToggleElement =
|
||||
@@ -197,7 +218,7 @@ index 394b2af2e187b82bb3e98ebcdc6e66b63036e20d..4757555c7654a14578a5d057323057eb
|
||||
event.target === this.#overflowCountLabel;
|
||||
if (isToggleElement && event.button === 0) {
|
||||
event.preventDefault();
|
||||
@@ -687,5 +756,6 @@
|
||||
@@ -696,5 +775,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
|
||||
index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac8793422474052f476573 100644
|
||||
index a61b4e7af40f1404bf3555a7011c6211de917635..bb3c822ad14c4ebf0b8792665ff8242f97e501d9 100644
|
||||
--- a/browser/components/tabbrowser/content/tabs.js
|
||||
+++ b/browser/components/tabbrowser/content/tabs.js
|
||||
@@ -436,7 +436,7 @@
|
||||
@@ -240,7 +240,7 @@
|
||||
true
|
||||
)
|
||||
? new window.TabStacking(this)
|
||||
- : new window.TabDragAndDrop(this);
|
||||
+ : Services.prefs.getBoolPref("zen.tabs.use-legacy-drag-and-drop") ? new window.TabDragAndDrop(this) : new window.ZenDragAndDrop(this);
|
||||
this.tabDragAndDrop.init();
|
||||
}
|
||||
|
||||
@@ -453,7 +453,7 @@
|
||||
// and we're not hitting the scroll buttons.
|
||||
if (
|
||||
event.button != 0 ||
|
||||
@@ -11,7 +20,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
event.composedTarget.localName == "toolbarbutton"
|
||||
) {
|
||||
return;
|
||||
@@ -517,7 +517,6 @@
|
||||
@@ -534,7 +534,6 @@
|
||||
});
|
||||
}
|
||||
} else if (isTabGroupLabel(event.target)) {
|
||||
@@ -19,7 +28,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
} else if (
|
||||
event.originalTarget.closest("scrollbox") &&
|
||||
!Services.prefs.getBoolPref(
|
||||
@@ -553,6 +552,9 @@
|
||||
@@ -570,6 +569,9 @@
|
||||
}
|
||||
|
||||
on_keydown(event) {
|
||||
@@ -29,7 +38,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
let { altKey, shiftKey } = event;
|
||||
let [accel, nonAccel] =
|
||||
AppConstants.platform == "macosx"
|
||||
@@ -747,7 +749,6 @@
|
||||
@@ -764,7 +766,6 @@
|
||||
this._updateCloseButtons();
|
||||
|
||||
if (!this.#animatingGroups.size) {
|
||||
@@ -37,7 +46,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
}
|
||||
|
||||
document
|
||||
@@ -808,7 +809,7 @@
|
||||
@@ -825,7 +826,7 @@
|
||||
}
|
||||
|
||||
get newTabButton() {
|
||||
@@ -46,7 +55,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
}
|
||||
|
||||
get verticalMode() {
|
||||
@@ -824,6 +825,7 @@
|
||||
@@ -841,6 +842,7 @@
|
||||
}
|
||||
|
||||
get overflowing() {
|
||||
@@ -54,7 +63,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
return this.hasAttribute("overflow");
|
||||
}
|
||||
|
||||
@@ -837,29 +839,54 @@
|
||||
@@ -854,29 +856,56 @@
|
||||
if (pinnedChildren?.at(-1)?.id == "pinned-tabs-container-periphery") {
|
||||
pinnedChildren.pop();
|
||||
}
|
||||
@@ -81,8 +90,10 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
+ tabs.splice(i, 1);
|
||||
+ // add the tabs in the group to the list
|
||||
+ tabs.splice(i, 0, ...tab.tabs);
|
||||
+ } else if (tab.classList.contains("zen-tab-group-start")) {
|
||||
+ tabs.splice(i, 1);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
+ };
|
||||
+ expandTabs(pinnedTabs);
|
||||
+ expandTabs(unpinnedChildren);
|
||||
@@ -103,7 +114,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
+ // remove the separator from the list
|
||||
+ allTabs.splice(i, 1);
|
||||
+ i--;
|
||||
}
|
||||
+ }
|
||||
+ i++;
|
||||
}
|
||||
-
|
||||
@@ -119,42 +130,55 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -926,17 +953,10 @@
|
||||
|
||||
let elementIndex = 0;
|
||||
@@ -944,29 +973,28 @@
|
||||
return this.#focusableItems;
|
||||
}
|
||||
|
||||
- let unpinnedChildren = Array.from(this.arrowScrollbox.children);
|
||||
- let pinnedChildren = Array.from(this.pinnedTabsContainer.children);
|
||||
+ let elementIndex = 0;
|
||||
+ let children = gZenWorkspaces.tabboxChildrenWithoutEmpty;
|
||||
|
||||
let focusableItems = [];
|
||||
- for (let child of pinnedChildren) {
|
||||
- if (isTab(child)) {
|
||||
- child.elementIndex = elementIndex++;
|
||||
- focusableItems.push(child);
|
||||
- }
|
||||
- }
|
||||
- for (let child of unpinnedChildren) {
|
||||
+ for (let child of [...gZenWorkspaces.getCurrentEssentialsContainer().children, ...this.pinnedTabsContainer.children, ...children]) {
|
||||
+ for (let child of [...gZenWorkspaces.getCurrentEssentialsContainer().children, ...(gZenWorkspaces.activeWorkspaceElement?.hasCollapsedPinnedTabs ? [] : this.pinnedTabsContainer.children), ...children]) {
|
||||
if (isTab(child) && child.visible) {
|
||||
child.elementIndex = elementIndex++;
|
||||
focusableItems.push(child);
|
||||
@@ -944,11 +964,13 @@
|
||||
child.labelElement.elementIndex = elementIndex++;
|
||||
} else if (isTabGroup(child)) {
|
||||
focusableItems.push(child.labelElement);
|
||||
|
||||
-
|
||||
- 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 => {
|
||||
@@ -992,6 +1014,7 @@
|
||||
focusableItems.push(...visibleTabsInSplitView);
|
||||
}
|
||||
}
|
||||
-
|
||||
+ focusableItems.forEach(item => {
|
||||
+ item.elementIndex = elementIndex++;
|
||||
+ });
|
||||
this.#focusableItems = focusableItems;
|
||||
|
||||
return this.#focusableItems;
|
||||
@@ -979,6 +1007,7 @@
|
||||
* focusable (ex, we don't want the splitview container to be focusable, only its children).
|
||||
*/
|
||||
get dragAndDropElements() {
|
||||
+ return this.ariaFocusableItems;
|
||||
if (this.#dragAndDropElements) {
|
||||
return this.#dragAndDropElements;
|
||||
}
|
||||
@@ -1050,6 +1079,7 @@
|
||||
_invalidateCachedTabs() {
|
||||
this.#allTabs = null;
|
||||
this._invalidateCachedVisibleTabs();
|
||||
@@ -162,7 +186,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
}
|
||||
|
||||
_invalidateCachedVisibleTabs() {
|
||||
@@ -1095,7 +1118,7 @@
|
||||
@@ -1154,7 +1184,7 @@
|
||||
|
||||
if (node == null) {
|
||||
// We have a container for non-tab elements at the end of the scrollbox.
|
||||
@@ -171,7 +195,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
}
|
||||
|
||||
node.before(tab);
|
||||
@@ -1193,7 +1216,7 @@
|
||||
@@ -1252,7 +1282,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.
|
||||
@@ -180,7 +204,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
const newTab2 = this.newTabButton;
|
||||
const newTabVertical = document.getElementById(
|
||||
"vertical-tabs-newtab-button"
|
||||
@@ -1294,8 +1317,10 @@
|
||||
@@ -1353,8 +1383,10 @@
|
||||
*/
|
||||
_handleTabSelect(aInstant) {
|
||||
let selectedTab = this.selectedItem;
|
||||
@@ -191,7 +215,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
selectedTab._notselectedsinceload = false;
|
||||
}
|
||||
|
||||
@@ -1304,7 +1329,7 @@
|
||||
@@ -1363,7 +1395,7 @@
|
||||
* @param {boolean} [shouldScrollInstantly=false]
|
||||
*/
|
||||
#ensureTabIsVisible(tab, shouldScrollInstantly = false) {
|
||||
@@ -200,7 +224,7 @@ index 6b6c04599fe80983d13d2069ca62b99d8ad70271..a765f2decc3a565226ac879342247405
|
||||
if (arrowScrollbox?.overflowing) {
|
||||
arrowScrollbox.ensureElementIsVisible(tab, shouldScrollInstantly);
|
||||
}
|
||||
@@ -1437,7 +1462,7 @@
|
||||
@@ -1496,7 +1528,7 @@
|
||||
}
|
||||
|
||||
_notifyBackgroundTab(aTab) {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarController.sys.mjs b/browser/components/urlbar/UrlbarController.sys.mjs
|
||||
index 09c1a7d4e156fe5e606f097277420333efe88976..f31e183e7b92c616d81dae509ef0448c4d507cc7 100644
|
||||
index dc8ca021feff9e5c623dd2e9b3e3a8d6f55aa461..b6382bdcfef0cf6c2975fdb6f1a3c9b5c53f81af 100644
|
||||
--- a/browser/components/urlbar/UrlbarController.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarController.sys.mjs
|
||||
@@ -296,7 +296,6 @@ export class UrlbarController {
|
||||
@@ -302,7 +302,6 @@ export class UrlbarController {
|
||||
const isMac = AppConstants.platform == "macosx";
|
||||
// Handle readline/emacs-style navigation bindings on Mac.
|
||||
if (
|
||||
@@ -10,7 +10,7 @@ index 09c1a7d4e156fe5e606f097277420333efe88976..f31e183e7b92c616d81dae509ef0448c
|
||||
this.view.isOpen &&
|
||||
event.ctrlKey &&
|
||||
(event.key == "n" || event.key == "p")
|
||||
@@ -445,6 +444,8 @@ export class UrlbarController {
|
||||
@@ -451,6 +450,8 @@ export class UrlbarController {
|
||||
});
|
||||
}
|
||||
event.preventDefault();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarPrefs.sys.mjs b/browser/components/urlbar/UrlbarPrefs.sys.mjs
|
||||
index 0cc0db4889d66872bce2aa775a79a4c68e8cec51..604106e328843b3a6eb0922cc8663474ddb008f4 100644
|
||||
index 41e8aa0ee37fef0d24d41f2c4e776c39ed3895f6..293e993175bbbd67fa1541db6b9419b687de7fcd 100644
|
||||
--- a/browser/components/urlbar/UrlbarPrefs.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarPrefs.sys.mjs
|
||||
@@ -763,6 +763,7 @@ function makeResultGroups({ showSearchSuggestionsFirst }) {
|
||||
@@ -759,6 +759,7 @@ function makeResultGroups({ showSearchSuggestionsFirst }) {
|
||||
*/
|
||||
let rootGroup = {
|
||||
children: [
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
|
||||
index 4db61038e5e476bad3a61dbdb707e5222c1f08f8..9eca13d9cfac3b762917aaaa942267effb743cf7 100644
|
||||
--- a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
|
||||
@@ -45,11 +45,13 @@ function defaultQuery(conditions = "") {
|
||||
let query = `
|
||||
SELECT h.url, h.title, ${SQL_BOOKMARK_TAGS_FRAGMENT}, h.id, t.open_count,
|
||||
${lazy.PAGES_FRECENCY_FIELD} AS frecency, t.userContextId,
|
||||
- h.last_visit_date, NULLIF(t.groupId, '') groupId
|
||||
+ h.last_visit_date, NULLIF(t.groupId, '') groupId, zp.url AS pinned_url, zp.title AS pinned_title
|
||||
FROM moz_places h
|
||||
LEFT JOIN moz_openpages_temp t
|
||||
ON t.url = h.url
|
||||
AND (t.userContextId = :userContextId OR (t.userContextId <> -1 AND :userContextId IS NULL))
|
||||
+ LEFT JOIN zen_pins zp
|
||||
+ ON zp.url = h.url
|
||||
WHERE (
|
||||
(:switchTabsEnabled AND t.open_count > 0) OR
|
||||
${lazy.PAGES_FRECENCY_FIELD} <> 0
|
||||
@@ -63,7 +65,7 @@ function defaultQuery(conditions = "") {
|
||||
:matchBehavior, :searchBehavior, NULL)
|
||||
ELSE
|
||||
AUTOCOMPLETE_MATCH(:searchString, h.url,
|
||||
- h.title, '',
|
||||
+ IFNULL(zp.title, h.title), '',
|
||||
h.visit_count, h.typed,
|
||||
0, t.open_count,
|
||||
:matchBehavior, :searchBehavior, NULL)
|
||||
@@ -1176,11 +1178,13 @@ class Search {
|
||||
? lazy.PlacesUtils.toDate(lastVisitPRTime).getTime()
|
||||
: undefined;
|
||||
let tabGroup = row.getResultByName("groupId");
|
||||
+ let pinnedTitle = row.getResultByIndex(12);
|
||||
+ let pinnedUrl = row.getResultByIndex("pinned_url");
|
||||
|
||||
let match = {
|
||||
placeId,
|
||||
- value: url,
|
||||
- comment: bookmarkTitle || historyTitle,
|
||||
+ value: pinnedUrl || url,
|
||||
+ comment: pinnedTitle || bookmarkTitle || historyTitle,
|
||||
icon: UrlbarUtils.getIconForUrl(url),
|
||||
frecency: frecency || FRECENCY_DEFAULT,
|
||||
userContextId,
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
|
||||
index 15dd29152cf349b5ed23f1bae0a74a8d7dbe4c3d..f44f5dd87f778f432b0028969ca5732305c98915 100644
|
||||
index 3a9cb4735185691df021157e42f8b9cc93f14aa1..00d7eaf3177d27df1e0db5303405ce28f3031d34 100644
|
||||
--- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
|
||||
@@ -883,6 +883,7 @@ export class Query {
|
||||
@@ -893,6 +893,7 @@ export class Query {
|
||||
if (
|
||||
result.heuristic &&
|
||||
this.context.searchMode &&
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarUtils.sys.mjs b/browser/components/urlbar/UrlbarUtils.sys.mjs
|
||||
index 7e9ede3dae5c2099c45e0221ad1cb8ebd622fc39..f82db27dbd07961ad6af7dbe2cb5d79e5f7a9828 100644
|
||||
index b97fa81cef276e4bb22414b7c182e00b4bb835dc..1f489eceead0aa331ace59281cb777db5e635366 100644
|
||||
--- a/browser/components/urlbar/UrlbarUtils.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarUtils.sys.mjs
|
||||
@@ -79,6 +79,7 @@ export var UrlbarUtils = {
|
||||
@@ -81,6 +81,7 @@ export var UrlbarUtils = {
|
||||
RESTRICT_SEARCH_KEYWORD: "restrictSearchKeyword",
|
||||
SUGGESTED_INDEX: "suggestedIndex",
|
||||
TAIL_SUGGESTION: "tailSuggestion",
|
||||
@@ -10,7 +10,7 @@ index 7e9ede3dae5c2099c45e0221ad1cb8ebd622fc39..f82db27dbd07961ad6af7dbe2cb5d79e
|
||||
}),
|
||||
|
||||
// Defines provider types.
|
||||
@@ -138,6 +139,7 @@ export var UrlbarUtils = {
|
||||
@@ -140,6 +141,7 @@ export var UrlbarUtils = {
|
||||
OTHER_NETWORK: 6,
|
||||
ADDON: 7,
|
||||
ACTIONS: 8,
|
||||
@@ -18,7 +18,7 @@ index 7e9ede3dae5c2099c45e0221ad1cb8ebd622fc39..f82db27dbd07961ad6af7dbe2cb5d79e
|
||||
}),
|
||||
|
||||
// Per-result exposure telemetry.
|
||||
@@ -549,6 +551,8 @@ export var UrlbarUtils = {
|
||||
@@ -552,6 +554,8 @@ export var UrlbarUtils = {
|
||||
return this.RESULT_GROUP.HEURISTIC_FALLBACK;
|
||||
case "UrlbarProviderHistoryUrlHeuristic":
|
||||
return this.RESULT_GROUP.HEURISTIC_HISTORY_URL;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
|
||||
index 307b3cac259c05e616cf7d5eb1ce50a146550cd9..72252a6363154b6c5f926bf2acf3282e8396d2ad 100644
|
||||
index 3a8c233dd1e05c070e497ec9877e65b9d8a3e87b..dd2a7aac6945331a3a50a0d7f6d62aeda396b560 100644
|
||||
--- a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
|
||||
@@ -76,7 +76,7 @@ export class UrlbarValueFormatter {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
|
||||
index c58bc4871fbfb5ca924df822a09d783f21db616a..68fd73055d30ec4f4128fb8639369f07b167955a 100644
|
||||
index 6d6cc27e203a5799683a4e6eae1007ff30a69cd0..953c5cd09bcfd832d8ad11016977509f55935eb7 100644
|
||||
--- a/browser/components/urlbar/UrlbarView.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
|
||||
@@ -620,7 +620,7 @@ export class UrlbarView {
|
||||
@@ -618,7 +618,7 @@ export class UrlbarView {
|
||||
!this.input.value ||
|
||||
this.input.getAttribute("pageproxystate") == "valid"
|
||||
) {
|
||||
@@ -11,7 +11,7 @@ index c58bc4871fbfb5ca924df822a09d783f21db616a..68fd73055d30ec4f4128fb8639369f07
|
||||
// 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.
|
||||
@@ -2855,6 +2855,8 @@ export class UrlbarView {
|
||||
@@ -2852,6 +2852,8 @@ export class UrlbarView {
|
||||
if (row?.hasAttribute("row-selectable")) {
|
||||
row?.toggleAttribute("selected", true);
|
||||
}
|
||||
@@ -24,7 +24,7 @@ index c58bc4871fbfb5ca924df822a09d783f21db616a..68fd73055d30ec4f4128fb8639369f07
|
||||
}
|
||||
|
||||
#enableOrDisableRowWrap() {
|
||||
- let wrap = getBoundsWithoutFlushing(this.input.textbox).width < 650;
|
||||
- let wrap = getBoundsWithoutFlushing(this.input).width < 650;
|
||||
+ let wrap = false;
|
||||
this.#rows.toggleAttribute("wrap", wrap);
|
||||
this.oneOffSearchButtons?.container.toggleAttribute("wrap", wrap);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
|
||||
index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f5f45accf 100644
|
||||
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
|
||||
diff --git a/browser/components/urlbar/content/UrlbarInput.mjs b/browser/components/urlbar/content/UrlbarInput.mjs
|
||||
index edb0482f0bfb22c70a585b0770e5b0437983779e..545f65db4fe8b807b388d5552842cd9e56a72eb3 100644
|
||||
--- a/browser/components/urlbar/content/UrlbarInput.mjs
|
||||
+++ b/browser/components/urlbar/content/UrlbarInput.mjs
|
||||
@@ -68,6 +68,13 @@ const lazy = XPCOMUtils.declareLazy({
|
||||
logger: () => lazy.UrlbarUtils.getLogger({ prefix: "Input" }),
|
||||
});
|
||||
@@ -13,10 +13,10 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
+ 'default'
|
||||
+);
|
||||
+
|
||||
const DEFAULT_FORM_HISTORY_NAME = "searchbar-history";
|
||||
|
||||
const UNLIMITED_MAX_RESULTS = 99;
|
||||
@@ -445,7 +452,16 @@ export class UrlbarInput {
|
||||
|
||||
let getBoundsWithoutFlushing = element =>
|
||||
@@ -630,7 +637,16 @@ export class UrlbarInput extends HTMLElement {
|
||||
// See _on_select(). HTMLInputElement.select() dispatches a "select"
|
||||
// event but does not set the primary selection.
|
||||
this._suppressPrimaryAdjustment = true;
|
||||
@@ -33,10 +33,10 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
this._suppressPrimaryAdjustment = false;
|
||||
}
|
||||
|
||||
@@ -521,6 +537,10 @@ export class UrlbarInput {
|
||||
@@ -704,6 +720,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
hideSearchTerms = false,
|
||||
isSameDocument = false
|
||||
) {
|
||||
isSameDocument = false,
|
||||
} = {}) {
|
||||
+ if (this.hasAttribute("zen-newtab")) {
|
||||
+ return;
|
||||
+ }
|
||||
@@ -44,7 +44,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
if (!this.#isAddressbar) {
|
||||
throw new Error(
|
||||
"Cannot set URI for UrlbarInput that is not an address bar"
|
||||
@@ -798,8 +818,16 @@ export class UrlbarInput {
|
||||
@@ -985,8 +1005,16 @@ export class UrlbarInput extends HTMLElement {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1215,7 +1243,11 @@ export class UrlbarInput {
|
||||
@@ -1405,7 +1433,11 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
|
||||
if (!this.#providesSearchMode(result)) {
|
||||
@@ -75,7 +75,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
}
|
||||
|
||||
if (isCanonized) {
|
||||
@@ -2335,6 +2367,32 @@ export class UrlbarInput {
|
||||
@@ -2529,6 +2561,32 @@ export class UrlbarInput extends HTMLElement {
|
||||
await this.#updateLayoutBreakoutDimensions();
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
startLayoutExtend() {
|
||||
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
|
||||
// Do not expand if the Urlbar does not support being expanded or it is
|
||||
@@ -2349,6 +2407,13 @@ export class UrlbarInput {
|
||||
@@ -2543,6 +2601,13 @@ export class UrlbarInput extends HTMLElement {
|
||||
|
||||
this.setAttribute("breakout-extend", "true");
|
||||
|
||||
@@ -122,7 +122,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
// 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")) {
|
||||
@@ -2368,6 +2433,24 @@ export class UrlbarInput {
|
||||
@@ -2562,6 +2627,24 @@ export class UrlbarInput extends HTMLElement {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -147,7 +147,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
this.removeAttribute("breakout-extend");
|
||||
this.#updateTextboxPosition();
|
||||
}
|
||||
@@ -2398,7 +2481,7 @@ export class UrlbarInput {
|
||||
@@ -2592,7 +2675,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
forceUnifiedSearchButtonAvailable = false
|
||||
) {
|
||||
let prevState = this.getAttribute("pageproxystate");
|
||||
@@ -156,12 +156,12 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
this.setAttribute("pageproxystate", state);
|
||||
this._inputContainer.setAttribute("pageproxystate", state);
|
||||
this._identityBox?.setAttribute("pageproxystate", state);
|
||||
@@ -2635,10 +2718,12 @@ export class UrlbarInput {
|
||||
@@ -2846,10 +2929,12 @@ export class UrlbarInput extends HTMLElement {
|
||||
return;
|
||||
}
|
||||
this.textbox.style.top = px(
|
||||
this.style.top = px(
|
||||
+ this.window.gZenVerticalTabsManager._hasSetSingleToolbar ?
|
||||
this.textbox.parentNode.getBoxQuads({
|
||||
this.parentNode.getBoxQuads({
|
||||
ignoreTransforms: true,
|
||||
flush: false,
|
||||
})[0].p1.y
|
||||
@@ -169,19 +169,19 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2698,9 +2783,10 @@ export class UrlbarInput {
|
||||
@@ -2908,9 +2993,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
return;
|
||||
}
|
||||
|
||||
+ this.window.gZenVerticalTabsManager.recalculateURLBarHeight();
|
||||
this.textbox.parentNode.style.setProperty(
|
||||
this.parentNode.style.setProperty(
|
||||
"--urlbar-container-height",
|
||||
- px(getBoundsWithoutFlushing(this.textbox.parentNode).height)
|
||||
+ px(getBoundsWithoutFlushing(this.textbox.parentNode).height + 8)
|
||||
- px(getBoundsWithoutFlushing(this.parentNode).height)
|
||||
+ px(getBoundsWithoutFlushing(this.parentNode).height + 8)
|
||||
);
|
||||
this.textbox.style.setProperty(
|
||||
this.style.setProperty(
|
||||
"--urlbar-height",
|
||||
@@ -3134,6 +3220,7 @@ export class UrlbarInput {
|
||||
@@ -3344,6 +3430,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
|
||||
_toggleActionOverride(event) {
|
||||
@@ -189,7 +189,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
if (
|
||||
event.keyCode == KeyEvent.DOM_VK_SHIFT ||
|
||||
event.keyCode == KeyEvent.DOM_VK_ALT ||
|
||||
@@ -3237,8 +3324,8 @@ export class UrlbarInput {
|
||||
@@ -3447,8 +3534,8 @@ export class UrlbarInput extends HTMLElement {
|
||||
if (!this.#isAddressbar) {
|
||||
return val;
|
||||
}
|
||||
@@ -200,7 +200,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
: val;
|
||||
// Only trim value if the directionality doesn't change to RTL and we're not
|
||||
// showing a strikeout https protocol.
|
||||
@@ -3544,6 +3631,7 @@ export class UrlbarInput {
|
||||
@@ -3754,6 +3841,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
resultDetails = null,
|
||||
browser = this.window.gBrowser.selectedBrowser
|
||||
) {
|
||||
@@ -208,7 +208,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
if (this.#isAddressbar) {
|
||||
this.#prepareAddressbarLoad(
|
||||
url,
|
||||
@@ -3651,6 +3739,10 @@ export class UrlbarInput {
|
||||
@@ -3861,6 +3949,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
reuseEmpty = true;
|
||||
}
|
||||
@@ -219,7 +219,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
if (
|
||||
where == "tab" &&
|
||||
reuseEmpty &&
|
||||
@@ -3658,6 +3750,9 @@ export class UrlbarInput {
|
||||
@@ -3868,6 +3960,9 @@ export class UrlbarInput extends HTMLElement {
|
||||
) {
|
||||
where = "current";
|
||||
}
|
||||
@@ -229,7 +229,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
return where;
|
||||
}
|
||||
|
||||
@@ -3909,6 +4004,7 @@ export class UrlbarInput {
|
||||
@@ -4122,6 +4217,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
this.setResultForCurrentValue(null);
|
||||
this.handleCommand();
|
||||
this.controller.clearLastQueryContextCache();
|
||||
@@ -237,7 +237,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
|
||||
this._suppressStartQuery = false;
|
||||
});
|
||||
@@ -3916,7 +4012,6 @@ export class UrlbarInput {
|
||||
@@ -4129,7 +4225,6 @@ export class UrlbarInput extends HTMLElement {
|
||||
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.
|
||||
@@ -245,7 +245,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
|
||||
let controller =
|
||||
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
|
||||
@@ -4026,7 +4121,11 @@ export class UrlbarInput {
|
||||
@@ -4239,7 +4334,11 @@ export class UrlbarInput extends HTMLElement {
|
||||
if (!engineName && !source && !this.hasAttribute("searchmode")) {
|
||||
return;
|
||||
}
|
||||
@@ -258,27 +258,27 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
if (this._searchModeIndicatorTitle) {
|
||||
this._searchModeIndicatorTitle.textContent = "";
|
||||
this._searchModeIndicatorTitle.removeAttribute("data-l10n-id");
|
||||
@@ -4338,6 +4437,7 @@ export class UrlbarInput {
|
||||
@@ -4549,6 +4648,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
|
||||
this.document.l10n.setAttributes(
|
||||
this.inputField,
|
||||
+ this.window.gZenVerticalTabsManager._hasSetSingleToolbar ? 'zen-singletoolbar-urlbar-placeholder-with-name' :
|
||||
l10nId,
|
||||
l10nId == "urlbar-placeholder-with-name" ? { name } : undefined
|
||||
);
|
||||
@@ -4449,6 +4549,11 @@ export class UrlbarInput {
|
||||
l10nId == "urlbar-placeholder-with-name"
|
||||
? { name: engineName }
|
||||
@@ -4662,6 +4762,11 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
|
||||
_on_click(event) {
|
||||
+ if (event.target == this.inputField) {
|
||||
+ event.zenOriginalTarget = this.textbox;
|
||||
+ event.zenOriginalTarget = this;
|
||||
+ this._on_mousedown(event);
|
||||
+ }
|
||||
+
|
||||
if (
|
||||
event.target == this.inputField ||
|
||||
event.target == this._inputContainer
|
||||
@@ -4521,7 +4626,7 @@ export class UrlbarInput {
|
||||
switch (event.target) {
|
||||
case this.inputField:
|
||||
case this._inputContainer:
|
||||
@@ -4740,7 +4845,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -287,13 +287,13 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
this.view.autoOpen({ event });
|
||||
} else {
|
||||
if (this._untrimOnFocusAfterKeydown) {
|
||||
@@ -4561,9 +4666,16 @@ export class UrlbarInput {
|
||||
@@ -4780,9 +4885,16 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
|
||||
_on_mousedown(event) {
|
||||
- switch (event.currentTarget) {
|
||||
+ switch (event.zenOriginalTarget || event.currentTarget) {
|
||||
case this.textbox: {
|
||||
case this: {
|
||||
this._mousedownOnUrlbarDescendant = true;
|
||||
+ const isProbablyFloating =
|
||||
+ (this.zenUrlbarBehavior == "floating-on-type" &&
|
||||
@@ -302,10 +302,10 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
+ if (event.type != "click" && isProbablyFloating || event.type == "click" && !isProbablyFloating) {
|
||||
+ return true;
|
||||
+ }
|
||||
|
||||
if (
|
||||
event.target != this.inputField &&
|
||||
@@ -4574,6 +4686,10 @@ export class UrlbarInput {
|
||||
event.composedTarget != this.inputField &&
|
||||
event.composedTarget != this._inputContainer
|
||||
@@ -4792,6 +4904,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
|
||||
this.focusedViaMousedown = !this.focused;
|
||||
this._preventClickSelectsAll = this.focused;
|
||||
@@ -316,7 +316,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
|
||||
// Keep the focus status, since the attribute may be changed
|
||||
// upon calling this.focus().
|
||||
@@ -4609,7 +4725,7 @@ export class UrlbarInput {
|
||||
@@ -4827,7 +4943,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
// 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.
|
||||
@@ -325,7 +325,7 @@ index 6ad064710da20f7a13fda3517780c2f38b3d2865..58a01eef024d8b9992068a6a5b7be68f
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -4930,7 +5046,7 @@ export class UrlbarInput {
|
||||
@@ -5155,7 +5271,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
// When we are in actions search mode we can show more results so
|
||||
// increase the limit.
|
||||
let maxResults =
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user