Compare commits

...

8 Commits
1.17.6b ... dev

122 changed files with 1783 additions and 1630 deletions

View File

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

View File

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

View File

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

View File

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

3
src/.hgignore Normal file
View File

@@ -0,0 +1,3 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js
index 79b4f6f8fb2f7dd8784920038784e6bb0c967e2d..4db983dad9bea10c17b5ac166ba58b93fa2a4d56 100644
index 3bd7b8f6025a7df4ce5cfb66916125bce9ef3991..c408ef829b7540aec72b2307e5d4bfa34109d6cd 100644
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -252,6 +252,8 @@ var StarUI = {
@@ -249,6 +249,8 @@ var StarUI = {
});
}
@@ -11,7 +11,7 @@ index 79b4f6f8fb2f7dd8784920038784e6bb0c967e2d..4db983dad9bea10c17b5ac166ba58b93
let onPanelReady = fn => {
let target = this.panel;
if (target.parentNode) {
@@ -303,6 +305,21 @@ var StarUI = {
@@ -300,6 +302,21 @@ var StarUI = {
}
},
@@ -33,7 +33,7 @@ index 79b4f6f8fb2f7dd8784920038784e6bb0c967e2d..4db983dad9bea10c17b5ac166ba58b93
removeBookmarkButtonCommand: function SU_removeBookmarkButtonCommand() {
this._removeBookmarksOnPopupHidden = true;
this.panel.hidePopup();
@@ -1800,6 +1817,7 @@ var BookmarkingUI = {
@@ -1797,6 +1814,7 @@ var BookmarkingUI = {
document.getElementById("context-bookmarkpage"),
PanelMultiView.getViewNode(document, "panelMenuBookmarkThisPage"),
document.getElementById("pageAction-panel-bookmark"),

View File

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

View File

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

View File

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

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/navigator-toolbox.js b/browser/base/content/navigator-toolbox.js
index 413bad2a62058a1c434d6a44e927e44eb397289d..d28116ffacb0ddb6fdb421db5d6498e455356b4a 100644
index 7b776b15d52367a008ce6bf53dcfcbbe007b7453..d9a3404905b73db7c8f202ab166d5f3c625351f6 100644
--- a/browser/base/content/navigator-toolbox.js
+++ b/browser/base/content/navigator-toolbox.js
@@ -8,7 +8,7 @@
@@ -6,7 +6,7 @@
document.addEventListener(
"DOMContentLoaded",
() => {
@@ -11,7 +11,7 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..d28116ffacb0ddb6fdb421db5d6498e4
const widgetOverflow = document.getElementById("widget-overflow");
function onPopupShowing(event) {
@@ -187,6 +187,7 @@ document.addEventListener(
@@ -185,6 +185,7 @@ document.addEventListener(
#reload-button ,
#urlbar-go-button,
#reader-mode-button,
@@ -19,7 +19,7 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..d28116ffacb0ddb6fdb421db5d6498e4
#picture-in-picture-button,
#urlbar-zoom-button,
#star-button-box,
@@ -208,6 +209,7 @@ document.addEventListener(
@@ -206,6 +207,7 @@ document.addEventListener(
case "vertical-tabs-newtab-button":
case "tabs-newtab-button":
case "new-tab-button":
@@ -27,7 +27,7 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..d28116ffacb0ddb6fdb421db5d6498e4
gBrowser.handleNewTabMiddleClick(element, event);
break;
@@ -317,7 +319,7 @@ document.addEventListener(
@@ -315,7 +317,7 @@ document.addEventListener(
#pageActionButton,
#downloads-button,
#fxa-toolbar-menu-button,
@@ -36,7 +36,7 @@ index 413bad2a62058a1c434d6a44e927e44eb397289d..d28116ffacb0ddb6fdb421db5d6498e4
#library-button
`);
if (!element) {
@@ -396,7 +398,7 @@ document.addEventListener(
@@ -394,7 +396,7 @@ document.addEventListener(
gSync.toggleAccountPanel(element, event);
break;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,10 +1,10 @@
diff --git a/browser/installer/windows/nsis/uninstaller.nsi b/browser/installer/windows/nsis/uninstaller.nsi
old mode 100755
new mode 100644
index 559c8b46ee06bc42c91da49b5d9e397fe8ff6126..62094a5d98712a41a607ba01ca2adfa1e4f51ccd
index fd104f8ab0bd51d6a99c121b60e2695a54b0dfd0..9b117e5a1f5e8adac7d22cd65154529418fd2e5b
--- a/browser/installer/windows/nsis/uninstaller.nsi
+++ b/browser/installer/windows/nsis/uninstaller.nsi
@@ -507,6 +507,7 @@ Section "Uninstall"
@@ -519,6 +519,7 @@ Section "Uninstall"
${un.RegCleanFileHandler} ".svg" "FirefoxHTML-$AppUserModelID"
${un.RegCleanFileHandler} ".webp" "FirefoxHTML-$AppUserModelID"
${un.RegCleanFileHandler} ".avif" "FirefoxHTML-$AppUserModelID"

View File

@@ -1,17 +1,17 @@
diff --git a/browser/modules/BrowserDOMWindow.sys.mjs b/browser/modules/BrowserDOMWindow.sys.mjs
index 534d23b3e66176ea77f3ef577bf9630626948b9d..752e229bbe725ae394b7648adb949635f2bd70e4 100644
index e951af5edb966718ee20422c8e46d868c177cd1c..cd41305a4da8e675417eca7df5cd4a1ecee90c3d 100644
--- a/browser/modules/BrowserDOMWindow.sys.mjs
+++ b/browser/modules/BrowserDOMWindow.sys.mjs
@@ -374,7 +374,7 @@ export class BrowserDOMWindow {
@@ -437,7 +437,7 @@ export class BrowserDOMWindow {
// Passing a null-URI to only create the content window,
// and pass true for aSkipLoad to prevent loading of
// about:blank
- return this.getContentWindowOrOpenURIInFrame(
+ let res = this.getContentWindowOrOpenURIInFrame(
- return this.#getContentWindowOrOpenURIInFrame(
+ let res = this.#getContentWindowOrOpenURIInFrame(
null,
aParams,
aWhere,
@@ -382,6 +382,10 @@ export class BrowserDOMWindow {
@@ -445,6 +445,10 @@ export class BrowserDOMWindow {
aName,
true
);
@@ -21,4 +21,4 @@ index 534d23b3e66176ea77f3ef577bf9630626948b9d..752e229bbe725ae394b7648adb949635
+ return res;
}
openURIInFrame(aURI, aParams, aWhere, aFlags, aName) {
/**

View File

@@ -1,8 +1,8 @@
diff --git a/browser/modules/ExtensionsUI.sys.mjs b/browser/modules/ExtensionsUI.sys.mjs
index 17cad7b3fbdd6dff862483892f37f72c00792c88..90ea4d95738eb50d1a4a67ee7df087e7c2a68b3d 100644
index 31229b3bc1b93565a57c2c0b0307ceeb594c3936..30456ef5d3c58e96717cd292f861a04a790d0ee1 100644
--- a/browser/modules/ExtensionsUI.sys.mjs
+++ b/browser/modules/ExtensionsUI.sys.mjs
@@ -478,7 +478,7 @@ export var ExtensionsUI = {
@@ -480,7 +480,7 @@ export var ExtensionsUI = {
eventCallback,
removeOnDismissal: true,
popupOptions: {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/modules/URILoadingHelper.sys.mjs b/browser/modules/URILoadingHelper.sys.mjs
index f7a3e8272f1f22286a26bf50d78b23aa82b49df8..a690732012331dfc40cc08fef4453c28c6587a24 100644
index 04d0b47099648cfd00e72ef260d44628718809ee..49cd0215778a33a80d1f45b8e2701410d016a5a3 100644
--- a/browser/modules/URILoadingHelper.sys.mjs
+++ b/browser/modules/URILoadingHelper.sys.mjs
@@ -541,7 +541,7 @@ export const URILoadingHelper = {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css
index b1062108c6f6174a680e9b235ee9cb2037f94924..31aac7bdee4ebb07e9de58e7c3e5e6833c94e968 100644
index 0a15e3d60d408f119bd03007567d5dd1fa178c36..443901657296d0d15a95e1d39e826b1c008aac4d 100644
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -38,7 +38,7 @@

View File

@@ -1,17 +1,17 @@
diff --git a/browser/themes/shared/browser-shared.css b/browser/themes/shared/browser-shared.css
index c77a0e6388c4061d9e6ee5f396a3e3af8867e4fe..3da164d2414e8726675ac0184310c9363365387f 100644
index 2b013ee77bb50db11e73152bd0265dd86e40b726..dc0ba2c8651470bcd81439953adbaca26a4a5b8c 100644
--- a/browser/themes/shared/browser-shared.css
+++ b/browser/themes/shared/browser-shared.css
@@ -102,7 +102,7 @@ body {
--toolbarbutton-border-radius: 4px;
--toolbarbutton-border-radius: var(--button-border-radius);
--identity-box-margin-inline: 4px;
--urlbar-min-height: max(32px, 1.4em);
- --urlbar-icon-padding: calc((var(--urlbar-min-height) - 2px /* border */ - 2px /* padding */ - 16px /* icon */) / 2);
+ --urlbar-icon-padding: calc((var(--urlbar-min-height) - 2px /* border */ - 14px /* icon */) / 2);
/* This should be used for icons and chiclets inside the input field. It makes
the gap around them more uniform when they are close to the field edges */
@@ -170,8 +170,6 @@ body {
/* This should be used for icons and chiclets inside the input field, as well
as result rows. It makes the gap around them more uniform when they are
@@ -171,8 +171,6 @@ body {
*/
&.fullscreen-with-menubar {
z-index: var(--browser-area-z-index-toolbox-while-animating);
@@ -20,7 +20,7 @@ index c77a0e6388c4061d9e6ee5f396a3e3af8867e4fe..3da164d2414e8726675ac0184310c936
}
/* Themes define a set of toolbox foreground and background colors which we
@@ -281,13 +279,13 @@ body {
@@ -282,13 +280,13 @@ body {
@media (-moz-platform: macos) and (not (-moz-mac-rtl)) {
&:-moz-locale-dir(ltr) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/identity-block/identity-block.css b/browser/themes/shared/identity-block/identity-block.css
index 8edca63dc52ec207475ed9965559d28c06e27971..a5a949be1868af5d0bb04747a9f5b737c00ae49c 100644
index d542e962d42b17140888e299ed43a838047ee48c..5e0b72f147687924c48dfed0318f53b765a4d497 100644
--- a/browser/themes/shared/identity-block/identity-block.css
+++ b/browser/themes/shared/identity-block/identity-block.css
@@ -81,13 +81,6 @@
@@ -11,7 +11,7 @@ index 8edca63dc52ec207475ed9965559d28c06e27971..a5a949be1868af5d0bb04747a9f5b737
- background-color: var(--urlbar-box-bgcolor);
- color: var(--urlbar-box-text-color);
- padding-inline: 8px;
- border-radius: var(--urlbar-icon-border-radius);
- border-radius: var(--urlbar-inner-border-radius);
-}
#urlbar[focused] {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
index 94036d036a64c8845c02d4ffbcf3f99b5d88576e..2ab3f060c9952f1b0c7bee3d5c3a1d7035e6736a 100644
index 6085ce0614c9ea7d650c9526b295953f46b30cb6..06b4af758d9ae033dd0b7436f08e6748047c8bbe 100644
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -316,3 +316,5 @@
@@ -317,3 +317,5 @@
skin/classic/browser/illustrations/market-opt-in.svg (../shared/illustrations/market-opt-in.svg)
skin/classic/browser/illustrations/yelpRealtime-opt-in.svg (../shared/illustrations/yelpRealtime-opt-in.svg)

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/tabbrowser/content-area.css b/browser/themes/shared/tabbrowser/content-area.css
index e06addf1602dc26ff4e75a8db6251231690f3f80..ffac005d5040852eda8f574f65f2eadf5ecbd642 100644
index db68a04d85c12a383ed33b459b9c8d942fe916f7..2941cf4010e24b31a3d9b2194fe9536f23063dbd 100644
--- a/browser/themes/shared/tabbrowser/content-area.css
+++ b/browser/themes/shared/tabbrowser/content-area.css
@@ -134,7 +134,6 @@
@@ -140,7 +140,6 @@
}
browser:is([blank], [pendingpaint]) {
@@ -10,7 +10,7 @@ index e06addf1602dc26ff4e75a8db6251231690f3f80..ffac005d5040852eda8f574f65f2eadf
}
browser[type="content"] {
@@ -276,7 +275,7 @@
@@ -323,7 +322,7 @@
.dialogStack {
z-index: var(--browser-stack-z-index-dialog-stack);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/tabbrowser/ctrlTab.css b/browser/themes/shared/tabbrowser/ctrlTab.css
index aaeae8fd0e999aecda02bf287b39c4d96ad73f3c..d8196d9b1b5491d73b18a7c7d7fef55bc11fe31b 100644
index 259e11f3c9a761e158dc32a3ecb9ee90c11d27c6..c5e30314090fe8f33b37c809bcf871c7b8c4d3da 100644
--- a/browser/themes/shared/tabbrowser/ctrlTab.css
+++ b/browser/themes/shared/tabbrowser/ctrlTab.css
@@ -11,6 +11,7 @@

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d85fc4c91a 100644
index 13edfa4a6975828ab8dbdce15215f2e4ee548249..9fc2cd93235eb14d8d8d5a7611ec8f2bff889716 100644
--- a/browser/themes/shared/tabbrowser/tabs.css
+++ b/browser/themes/shared/tabbrowser/tabs.css
@@ -21,7 +21,7 @@
@@ -23,7 +23,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
--tab-selected-bgcolor: var(--toolbar-bgcolor);
--tab-selected-color-scheme: var(--toolbar-color-scheme);
&[lwt-tab-selected="light"] {
@@ -259,7 +259,6 @@
@@ -267,7 +267,6 @@
}
:root:not([uidensity="compact"], [sidebar-expand-on-hover]) &[pinned] {
@@ -31,7 +31,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
}
&:is([selected], [multiselected]) {
@@ -273,6 +272,7 @@
@@ -281,6 +280,7 @@
border-radius: inherit;
position: relative;
overflow: hidden;
@@ -39,7 +39,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
&::before {
position: absolute;
@@ -472,14 +472,11 @@
@@ -480,14 +480,11 @@
.tab-icon-image {
-moz-context-properties: fill, stroke;
fill: currentColor;
@@ -55,7 +55,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -496,10 +493,6 @@
@@ -504,10 +501,6 @@
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("browser.tabs.fadeOutExplicitlyUnloadedTabs") {
&[pending][discarded] {
@@ -66,7 +66,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -572,7 +565,7 @@
@@ -575,7 +568,7 @@
z-index: 1; /* Overlay tab title */
#tabbrowser-tabs[orient="vertical"] & {
@@ -75,7 +75,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
}
&[crashed] {
@@ -580,7 +573,7 @@
@@ -583,7 +576,7 @@
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]),
@@ -84,7 +84,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
&[soundplaying] {
list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg");
}
@@ -637,7 +630,7 @@
@@ -640,7 +633,7 @@
}
}
@@ -93,7 +93,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
&[crashed] {
display: revert;
}
@@ -738,7 +731,7 @@
@@ -741,7 +734,7 @@
has not been added to root. There are certain scenarios when that attribute is temporarily
removed from root such as when toggling the sidebar to expand with the toolbar button. */
#tabbrowser-tabs[orient="horizontal"] &:not([pinned]):not([crashed]),
@@ -102,7 +102,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
&:is([soundplaying], [muted], [activemedia-blocked]) {
display: flex;
}
@@ -1226,7 +1219,7 @@ tab-group {
@@ -1245,7 +1238,7 @@ tab-group {
}
#tabbrowser-tabs[orient="vertical"][expanded] {
@@ -111,7 +111,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
&[movingtab][movingtab-addToGroup]:not([movingtab-group], [movingtab-ungroup]) .tabbrowser-tab:is(:active, [multiselected]) {
margin-inline-start: var(--space-medium);
}
@@ -1685,7 +1678,7 @@ tab-group {
@@ -1692,7 +1685,7 @@ tab-group {
}
}
@@ -120,7 +120,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
#vertical-tabs-newtab-button {
appearance: none;
min-height: var(--tab-min-height);
@@ -1696,7 +1689,7 @@ tab-group {
@@ -1703,7 +1696,7 @@ tab-group {
margin-inline: var(--tab-inner-inline-margin);
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text {
@@ -129,7 +129,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
}
&:hover {
@@ -1720,7 +1713,7 @@ tab-group {
@@ -1727,7 +1720,7 @@ tab-group {
* flex container. #tabs-newtab-button is a child of the arrowscrollbox where
* we don't want a gap (between tabs), so we have to add some margin.
*/
@@ -138,7 +138,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
margin-block: var(--tab-block-margin);
}
@@ -1913,7 +1906,6 @@ tab-group {
@@ -1915,7 +1908,6 @@ tab-group {
&:not([expanded]) {
.tabbrowser-tab[pinned] {
@@ -146,7 +146,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
}
.tab-background {
@@ -1953,8 +1945,8 @@ tab-group {
@@ -1955,8 +1947,8 @@ tab-group {
display: block;
position: absolute;
inset: auto;
@@ -157,7 +157,7 @@ index 8a7499426a718a56c74daea562a50de20db706e7..7ee8d7e0bd98733341e1da0d2ff965d8
&:-moz-window-inactive {
background-image:
@@ -2073,7 +2065,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
@@ -2075,7 +2067,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
list-style-image: url(chrome://global/skin/icons/plus.svg);
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css
index 1744e627bbcfc69ccccb207ad1cbf0c262afb9be..50cc9da2076d946771fb5aca1402f1cbe6a531c8 100644
index 15dcfbc95afab9f28bd58379da0ef3e24d1b4595..73827cc5cffe47099feea36cbeffb547e955b37e 100644
--- a/browser/themes/shared/urlbar-searchbar.css
+++ b/browser/themes/shared/urlbar-searchbar.css
@@ -6,7 +6,7 @@
@@ -20,7 +20,7 @@ index 1744e627bbcfc69ccccb207ad1cbf0c262afb9be..50cc9da2076d946771fb5aca1402f1cb
}
/* When rich suggestions are enabled the urlbar identity icon is given extra padding to
@@ -321,10 +321,14 @@
@@ -320,10 +320,14 @@
.urlbar[breakout][breakout-extend] {
height: auto;

View File

@@ -1,17 +1,17 @@
diff --git a/browser/themes/shared/urlbarView.css b/browser/themes/shared/urlbarView.css
index ec849fc792572e75d12b9e7cd7e6b7f32c799fa9..17c7d442854b774817ef5b3b96e732c19bebef9d 100644
index e0a05846eb0a329fc58b660f806912a1afe7c6c9..0d02e227a84ff4229104dd9cf9cd20f50a8d136c 100644
--- a/browser/themes/shared/urlbarView.css
+++ b/browser/themes/shared/urlbarView.css
@@ -20,7 +20,7 @@
--urlbarView-small-font-size: 0.85em;
- --urlbarView-results-padding: 4px;
- --urlbarView-results-padding: 7px;
+ --urlbarView-results-padding: 8px;
--urlbarView-row-gutter: 2px;
--urlbarView-item-inline-padding: var(--urlbar-icon-padding);
--urlbarView-item-block-padding: 6px;
@@ -173,7 +173,6 @@
@@ -171,7 +171,6 @@
min-height: 32px;
}
:root[uidensity="touch"] & {

View File

@@ -0,0 +1,18 @@
diff --git a/devtools/client/locales/en-US/toolbox.properties b/devtools/client/locales/en-US/toolbox.properties
index d4f986b024d3505b8c151f8e0166a20ff1862c5d..b2fb69e8897abdacb090d5a6faca203656e7cd44 100644
--- a/devtools/client/locales/en-US/toolbox.properties
+++ b/devtools/client/locales/en-US/toolbox.properties
@@ -66,11 +66,11 @@ toolbox.androidElementPicker.mac.tooltip=Pick an element from the Android phone
# LOCALIZATION NOTE (toolbox.elementPicker.key)
# Key shortcut used to toggle the element picker.
-toolbox.elementPicker.key=CmdOrCtrl+Shift+C
+toolbox.elementPicker.key=CmdOrCtrl+Shift+L
# LOCALIZATION NOTE (toolbox.elementPicker.mac.key)
# Key shortcut used to toggle the element picker for macOS.
-toolbox.elementPicker.mac.key=Cmd+Opt+C
+toolbox.elementPicker.mac.key=Cmd+Opt+L
# LOCALIZATION NOTE (toolbox.viewCssSourceInStyleEditor.label)
# Used as a message in either tooltips or contextual menu items to open the

View File

@@ -1,8 +1,8 @@
diff --git a/devtools/server/actors/animation-type-longhand.js b/devtools/server/actors/animation-type-longhand.js
index ea27f1209ddb9b33ae044186c2b795685a0bde67..6d808a760885f0e26ff307a39d6977228359fe71 100644
index a0026f953e8383741221d60ed5c02d0c12740f09..fd5c49d0b8997f29d3dee8dc23e2c373341eb972 100644
--- a/devtools/server/actors/animation-type-longhand.js
+++ b/devtools/server/actors/animation-type-longhand.js
@@ -344,6 +344,7 @@ exports.ANIMATION_TYPE_FOR_LONGHANDS = [
@@ -342,6 +342,7 @@ exports.ANIMATION_TYPE_FOR_LONGHANDS = [
"transform-origin",
"translate",
"-moz-window-transform",

View File

@@ -1,5 +1,5 @@
diff --git a/devtools/startup/DevToolsStartup.sys.mjs b/devtools/startup/DevToolsStartup.sys.mjs
index 95de0614e392e00036500a5b3ef9976041f37ec6..2c842055ce1d7ffd94c8f21a82305a3a13d493e0 100644
index 7d26af162be5620649ff36d7cf7d3835a8ac7a20..c0fbd46c22f1eacc82058919714174d15e8106f1 100644
--- a/devtools/startup/DevToolsStartup.sys.mjs
+++ b/devtools/startup/DevToolsStartup.sys.mjs
@@ -816,6 +816,7 @@ DevToolsStartup.prototype = {

View File

@@ -1,8 +1,8 @@
diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp
index 83d84537f94863d47a30887362fa1ce5a9809427..104d170d5e5114f965b7698fc59d2bad12265261 100644
index 625640eef45baba74255c00c603f0834e1f0aa2c..8b7893cf3848edf9121f7cbefcc3a1c76894fa37 100644
--- a/docshell/base/nsAboutRedirector.cpp
+++ b/docshell/base/nsAboutRedirector.cpp
@@ -108,7 +108,7 @@ static const RedirEntry kRedirMap[] = {
@@ -118,7 +118,7 @@ static const RedirEntry kRedirMap[] = {
{"crashes", "chrome://global/content/crashes.html",
nsIAboutModule::IS_SECURE_CHROME_UI},
#endif

View File

@@ -1,8 +1,8 @@
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
index 0c2ef36f9765b6904659ac0ed4329468ca89225f..d06552e8d4ac102dd50a1afea10938ca32aeb788 100644
index 55d24fe16311a286813f7668a227d2ef0cc7e5d7..1a7c2352daf1e04e38a8fb81f80a1f9a58ba2cb5 100644
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -466,6 +466,7 @@
@@ -465,6 +465,7 @@
#include "prtime.h"
#include "prtypes.h"
#include "xpcpublic.h"
@@ -10,7 +10,7 @@ index 0c2ef36f9765b6904659ac0ed4329468ca89225f..d06552e8d4ac102dd50a1afea10938ca
// clang-format off
#include "mozilla/Encoding.h"
@@ -3428,6 +3429,10 @@ void Document::FillStyleSetUserAndUASheets() {
@@ -3442,6 +3443,10 @@ void Document::FillStyleSetUserAndUASheets() {
for (StyleSheet* sheet : *sheetService->UserStyleSheets()) {
styleSet.AppendStyleSheet(*sheet);
}

View File

@@ -1,8 +1,8 @@
diff --git a/dom/base/use_counter_metrics.yaml b/dom/base/use_counter_metrics.yaml
index 157d46c37d0a465f02f794eda4323f7e344c5e63..aec8b819dbcf853c2e6d5513000149449fae36fd 100644
index 81d73c33af8c95e6f687c05354fb8a0e894dcd44..775742e1e4f84618dce45cbcb14229dc6c4f2b64 100644
--- a/dom/base/use_counter_metrics.yaml
+++ b/dom/base/use_counter_metrics.yaml
@@ -21154,6 +21154,22 @@ use.counter.css.page:
@@ -21086,6 +21086,22 @@ use.counter.css.page:
send_in_pings:
- use-counters
@@ -25,7 +25,7 @@ index 157d46c37d0a465f02f794eda4323f7e344c5e63..aec8b819dbcf853c2e6d551300014944
css_transform_origin:
type: counter
description: >
@@ -33175,6 +33191,22 @@ use.counter.css.doc:
@@ -33056,6 +33072,22 @@ use.counter.css.doc:
send_in_pings:
- use-counters

View File

@@ -1,5 +1,5 @@
diff --git a/dom/media/mediaelement/HTMLMediaElement.cpp b/dom/media/mediaelement/HTMLMediaElement.cpp
index 741a8f1744f48e7db4dbda64c856efaf9f3564b0..f9a2c0878f8a923903ed8eb65cbd355d40b41715 100644
index 3cb7a43dd9535ccf6ffaa60df39b487f07760208..ed3632e9f38ee88df39500356777ae5b3ba7202a 100644
--- a/dom/media/mediaelement/HTMLMediaElement.cpp
+++ b/dom/media/mediaelement/HTMLMediaElement.cpp
@@ -453,6 +453,7 @@ class HTMLMediaElement::MediaControlKeyListener final
@@ -10,7 +10,7 @@ index 741a8f1744f48e7db4dbda64c856efaf9f3564b0..f9a2c0878f8a923903ed8eb65cbd355d
NotifyAudibleStateChanged(mIsOwnerAudible
? MediaAudibleState::eAudible
: MediaAudibleState::eInaudible);
@@ -7191,6 +7192,9 @@ void HTMLMediaElement::FireTimeUpdate(TimeupdateType aType) {
@@ -7234,6 +7235,9 @@ void HTMLMediaElement::FireTimeUpdate(TimeupdateType aType) {
QueueTask(std::move(runner));
mQueueTimeUpdateRunnerTime = TimeStamp::Now();
mLastCurrentTime = CurrentTime();

View File

@@ -1,336 +0,0 @@
diff --git a/mfbt/tests/TestUniquePtr.cpp b/mfbt/tests/TestUniquePtr.cpp
--- a/mfbt/tests/TestUniquePtr.cpp
+++ b/mfbt/tests/TestUniquePtr.cpp
@@ -314,43 +314,45 @@
gADestructorCalls = 0;
gBDestructorCalls = 0;
return true;
}
-typedef void (&FreeSignature)(void*);
+struct Free {
+ void operator()(void* aPtr) { free(aPtr); }
+};
static size_t DeleteIntFunctionCallCount = 0;
+struct DeleteIntFunction {
+ void operator()(void* aPtr) {
+ DeleteIntFunctionCallCount++;
+ delete[] static_cast<int*>(aPtr);
+ }
+};
-static void DeleteIntFunction(void* aPtr) {
- DeleteIntFunctionCallCount++;
- delete[] static_cast<int*>(aPtr);
-}
-
-static void SetMallocedInt(UniquePtr<int, FreeSignature>& aPtr, int aI) {
+static void SetMallocedInt(UniquePtr<int, Free>& aPtr, int aI) {
int* newPtr = static_cast<int*>(malloc(sizeof(int)));
*newPtr = aI;
aPtr.reset(newPtr);
}
-static UniquePtr<int, FreeSignature> MallocedInt(int aI) {
- UniquePtr<int, FreeSignature> ptr(static_cast<int*>(malloc(sizeof(int))),
- free);
+static UniquePtr<int, Free> MallocedInt(int aI) {
+ UniquePtr<int, Free> ptr(static_cast<int*>(malloc(sizeof(int))), Free{});
*ptr = aI;
return ptr;
}
static bool TestFunctionReferenceDeleter() {
// Look for allocator mismatches and leaks to verify these bits
- UniquePtr<int, FreeSignature> i1(MallocedInt(17));
+ UniquePtr<int, Free> i1(MallocedInt(17));
CHECK(*i1 == 17);
SetMallocedInt(i1, 42);
CHECK(*i1 == 42);
// These bits use a custom deleter so we can instrument deletion.
{
- UniquePtr<int, FreeSignature> i2 =
- UniquePtr<int, FreeSignature>(new int[42], DeleteIntFunction);
+ UniquePtr<int, DeleteIntFunction> i2 =
+ UniquePtr<int, DeleteIntFunction>(new int[42], DeleteIntFunction{});
CHECK(DeleteIntFunctionCallCount == 0);
i2.reset(new int[76]);
CHECK(DeleteIntFunctionCallCount == 1);
}
diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
--- a/build/moz.configure/toolchain.configure
+++ b/build/moz.configure/toolchain.configure
@@ -231,11 +231,11 @@
nargs=1,
help="Location of platform SDK to use",
)
def mac_sdk_min_version():
- return "15.5"
+ return "26.0"
@depends(
"--with-macos-sdk",
host,
bootstrap_path(
diff --git a/browser/themes/osx/places/organizer.css b/browser/themes/osx/places/organizer.css
index 60e3d65d9ea5..730aa23aed6c 100644
--- a/browser/themes/osx/places/organizer.css
+++ b/browser/themes/osx/places/organizer.css
@@ -11,13 +11,15 @@
padding: 4px 4px 3px;
border-bottom: 1px solid ThreeDShadow;
- &::after {
- content: "";
- position: absolute;
- inset: 0;
- appearance: auto;
- -moz-default-appearance: -moz-window-titlebar;
- z-index: -1;
+ @media not (-moz-mac-tahoe-theme) {
+ &::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ appearance: auto;
+ -moz-default-appearance: -moz-window-titlebar;
+ z-index: -1;
+ }
}
}
diff --git a/browser/themes/shared/pageInfo.css b/browser/themes/shared/pageInfo.css
index 92259765b92f..e7bf5a299abe 100644
--- a/browser/themes/shared/pageInfo.css
+++ b/browser/themes/shared/pageInfo.css
@@ -14,13 +14,15 @@
align-items: center;
justify-content: center;
- &::after {
- content: "";
- position: absolute;
- inset: 0;
- appearance: auto;
- -moz-default-appearance: -moz-window-titlebar;
- z-index: -1;
+ @media not (-moz-mac-tahoe-theme) {
+ &::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ appearance: auto;
+ -moz-default-appearance: -moz-window-titlebar;
+ z-index: -1;
+ }
}
}
}
diff --git a/layout/style/test/chrome/chrome-only-media-queries.js b/layout/style/test/chrome/chrome-only-media-queries.js
index e200152ba41b..88ba56525e99 100644
--- a/layout/style/test/chrome/chrome-only-media-queries.js
+++ b/layout/style/test/chrome/chrome-only-media-queries.js
@@ -4,6 +4,7 @@ const CHROME_ONLY_TOGGLES = [
"-moz-print-preview",
"-moz-overlay-scrollbars",
"-moz-mac-big-sur-theme",
+ "-moz-mac-tahoe-theme",
"-moz-menubar-drag",
"-moz-windows-accent-color-in-titlebar",
"-moz-swipe-animation-enabled",
diff --git a/servo/components/style/gecko/media_features.rs b/servo/components/style/gecko/media_features.rs
index b0082951254a..ddbcd495260b 100644
--- a/servo/components/style/gecko/media_features.rs
+++ b/servo/components/style/gecko/media_features.rs
@@ -645,7 +645,7 @@ macro_rules! lnf_int_feature {
/// to support new types in these entries and (2) ensuring that either
/// nsPresContext::MediaFeatureValuesChanged is called when the value that
/// would be returned by the evaluator function could change.
-pub static MEDIA_FEATURES: [QueryFeatureDescription; 58] = [
+pub static MEDIA_FEATURES: [QueryFeatureDescription; 59] = [
feature!(
atom!("width"),
AllowsRanges::Yes,
@@ -918,6 +918,7 @@ pub static MEDIA_FEATURES: [QueryFeatureDescription; 58] = [
),
lnf_int_feature!(atom!("-moz-menubar-drag"), MenuBarDrag),
lnf_int_feature!(atom!("-moz-mac-big-sur-theme"), MacBigSurTheme),
+ lnf_int_feature!(atom!("-moz-mac-tahoe-theme"), MacTahoeTheme),
feature!(
atom!("-moz-mac-rtl"),
AllowsRanges::No,
diff --git a/toolkit/themes/shared/menu.css b/toolkit/themes/shared/menu.css
index f1330e7dd7a3..23c04a931ae0 100644
--- a/toolkit/themes/shared/menu.css
+++ b/toolkit/themes/shared/menu.css
@@ -31,6 +31,11 @@ panel {
}
@media (-moz-platform: macos) {
--menuitem-padding: 3px 9px;
+
+ @media (-moz-mac-tahoe-theme) {
+ --menuitem-padding: 4px 11px;
+ --menuitem-border-radius: 7px;
+ }
}
@media (-moz-platform: windows) {
diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h
index fc1e28206ac2..1661476a75f0 100644
--- a/widget/LookAndFeel.h
+++ b/widget/LookAndFeel.h
@@ -117,6 +117,12 @@ class LookAndFeel {
*/
MacBigSurTheme,
+ /*
+ * A Boolean value to determine whether the macOS Tahoe-specific
+ * theming should be used.
+ */
+ MacTahoeTheme,
+
/*
* AlertNotificationOrigin indicates from which corner of the
* screen alerts slide in, and from which direction (horizontal/vertical).
diff --git a/widget/cocoa/nsCocoaWindow.h b/widget/cocoa/nsCocoaWindow.h
index 38aca9f32590..9484ef078900 100644
--- a/widget/cocoa/nsCocoaWindow.h
+++ b/widget/cocoa/nsCocoaWindow.h
@@ -111,6 +111,9 @@ class TextInputHandler;
- (void)setEffectViewWrapperForStyle:(mozilla::WindowShadow)aStyle;
@property(nonatomic) mozilla::WindowShadow shadowStyle;
+- (void)updateTitlebarTransparency;
+- (void)setTitlebarSeparatorStyle:(NSTitlebarSeparatorStyle)aStyle API_AVAILABLE(macos(11.0));
+
- (void)releaseJSObjects;
@end
diff --git a/widget/cocoa/nsCocoaWindow.mm b/widget/cocoa/nsCocoaWindow.mm
index c9991df86dc6..c746a78b8440 100644
--- a/widget/cocoa/nsCocoaWindow.mm
+++ b/widget/cocoa/nsCocoaWindow.mm
@@ -7611,6 +7611,15 @@ - (id)initWithContentRect:(NSRect)aContentRect
// vibrancy effect and window border.
- (void)setEffectViewWrapperForStyle:(WindowShadow)aStyle {
NSView* wrapper = [&]() -> NSView* {
+ if (@available(macOS 26.0, *)) {
+ if (aStyle == WindowShadow::Menu) {
+ // Menus on macOS 26 use glass instead of vibrancy.
+ auto* effectView =
+ [[NSGlassEffectView alloc] initWithFrame:self.contentView.frame];
+ effectView.cornerRadius = 12.0f;
+ return effectView;
+ }
+ }
if (aStyle == WindowShadow::Menu || aStyle == WindowShadow::Tooltip) {
const bool isMenu = aStyle == WindowShadow::Menu;
auto* effectView =
@@ -7721,6 +7730,7 @@ - (void)setDrawsContentsIntoWindowFrame:(BOOL)aState {
mDrawsIntoWindowFrame = aState;
if (changed) {
[self reflowTitlebarElements];
+ [self updateTitlebarTransparency];
}
}
@@ -7850,6 +7860,32 @@ - (void)reflowTitlebarElements {
}
}
+- (void)updateTitlebarTransparency {
+ if (self.drawsContentsIntoWindowFrame) {
+ // Hide the titlebar if we are drawing into it
+ self.titlebarAppearsTransparent = true;
+ return;
+ }
+
+ if (@available(macOS 26.0, *)) {
+ // On macOS 26, the titlebar must be transparent to hide the separator.
+ // This does not affect the titlebar background on macOS 26, as it
+ // already matches the window background even when not transparent.
+ if (self.titlebarSeparatorStyle == NSTitlebarSeparatorStyleNone) {
+ self.titlebarAppearsTransparent = true;
+ return;
+ }
+ }
+
+ // Show the titlebar otherwise.
+ self.titlebarAppearsTransparent = false;
+}
+
+- (void)setTitlebarSeparatorStyle:(NSTitlebarSeparatorStyle)aStyle {
+ [super setTitlebarSeparatorStyle:aStyle];
+ [self updateTitlebarTransparency];
+}
+
- (BOOL)respondsToSelector:(SEL)aSelector {
// Claim the window doesn't respond to this so that the system
// doesn't steal keyboard equivalents for it. Bug 613710.
@@ -8166,8 +8202,6 @@ - (void)setDrawsContentsIntoWindowFrame:(BOOL)aState {
BOOL stateChanged = self.drawsContentsIntoWindowFrame != aState;
[super setDrawsContentsIntoWindowFrame:aState];
if (stateChanged && [self.delegate isKindOfClass:[WindowDelegate class]]) {
- // Hide the titlebar if we are drawing into it
- self.titlebarAppearsTransparent = aState;
self.titleVisibility = aState ? NSWindowTitleHidden : NSWindowTitleVisible;
// Here we extend / shrink our mainChildView.
diff --git a/widget/cocoa/nsLookAndFeel.mm b/widget/cocoa/nsLookAndFeel.mm
index 16cf2ed9b0ea..579b2445adfe 100644
--- a/widget/cocoa/nsLookAndFeel.mm
+++ b/widget/cocoa/nsLookAndFeel.mm
@@ -458,6 +458,9 @@ static bool PrefersNonBlinkingTextInsertionIndicator() {
case IntID::MacBigSurTheme:
aResult = nsCocoaFeatures::OnBigSurOrLater();
break;
+ case IntID::MacTahoeTheme:
+ aResult = nsCocoaFeatures::OnTahoeOrLater();
+ break;
case IntID::AlertNotificationOrigin:
aResult = NS_ALERT_TOP;
break;
diff --git a/widget/cocoa/nsNativeThemeCocoa.mm b/widget/cocoa/nsNativeThemeCocoa.mm
index 6ddd495b73f9..b94b8331be87 100644
--- a/widget/cocoa/nsNativeThemeCocoa.mm
+++ b/widget/cocoa/nsNativeThemeCocoa.mm
@@ -191,6 +191,10 @@ static NSControlSize ControlSizeForEnum(CocoaSize enumControlSize) {
static void InflateControlRect(NSRect* rect, NSControlSize cocoaControlSize,
const CellMarginArray& marginSet) {
+ if (nsCocoaFeatures::OnTahoeOrLater()) {
+ // Controls on macOS 26 fill the entire frame and do not require inflation.
+ return;
+ }
auto controlSize = EnumSizeForCocoaSize(cocoaControlSize);
const IntMargin& buttonMargins = marginSet[controlSize];
rect->origin.x -= buttonMargins.left;
diff --git a/widget/nsXPLookAndFeel.cpp b/widget/nsXPLookAndFeel.cpp
index c0dde6e1c04a..24b6f83930a7 100644
--- a/widget/nsXPLookAndFeel.cpp
+++ b/widget/nsXPLookAndFeel.cpp
@@ -121,6 +121,7 @@ static const char sIntPrefs[][45] = {
"ui.windowsMica",
"ui.windowsMicaPopups",
"ui.macBigSurTheme",
+ "ui.macTahoeTheme",
"ui.alertNotificationOrigin",
"ui.scrollToClick",
"ui.IMERawInputUnderlineStyle",
diff --git a/xpcom/ds/StaticAtoms.py b/xpcom/ds/StaticAtoms.py
index e1a0497dc0b9..ec88f0496378 100644
--- a/xpcom/ds/StaticAtoms.py
+++ b/xpcom/ds/StaticAtoms.py
@@ -2283,6 +2283,7 @@ STATIC_ATOMS = [
Atom("_moz_windows_mica", "-moz-windows-mica"),
Atom("_moz_windows_mica_popups", "-moz-windows-mica-popups"),
Atom("_moz_mac_big_sur_theme", "-moz-mac-big-sur-theme"),
+ Atom("_moz_mac_tahoe_theme", "-moz-mac-tahoe-theme"),
Atom("_moz_mac_rtl", "-moz-mac-rtl"),
Atom("_moz_mac_titlebar_height", "-moz-mac-titlebar-height"),
Atom("_moz_platform", "-moz-platform"),

View File

@@ -1,8 +1,8 @@
diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp
index 7c8f9c8c8ea4cc43825b388e7dd655a2ef34e75f..da5f48bb2d55ae306c72b062169a9758ad10c014 100644
index a7b60e40e6947754374dcda2fc69cdb329c337ac..c7e025109c4c43865205cbd445d9d20305974974 100644
--- a/layout/generic/nsIFrame.cpp
+++ b/layout/generic/nsIFrame.cpp
@@ -11912,6 +11912,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const {
@@ -11899,6 +11899,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const {
gfx::Matrix4x4 matrix = nsStyleTransformMatrix::ReadTransforms(
uiReset->mMozWindowTransform, refBox, float(appUnitsPerDevPixel));

View File

@@ -1,8 +1,8 @@
diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp
index 2413696f643246a825e184732bfba6eb33f606fd..932d3c316ee60c59b5f999e5ddd65c6acee3129d 100644
index 9f86fdfe6a70394c5fcd9e07177e5f325c2e4951..f9b3bc2e366f0cee2fbc992c4babce068b954413 100644
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -3273,6 +3273,9 @@ nsStyleUIReset::nsStyleUIReset()
@@ -3233,6 +3233,9 @@ nsStyleUIReset::nsStyleUIReset()
mWindowShadow(StyleWindowShadow::Auto),
mWindowOpacity(1.0),
mMozWindowInputRegionMargin(StyleLength::Zero()),
@@ -12,7 +12,7 @@ index 2413696f643246a825e184732bfba6eb33f606fd..932d3c316ee60c59b5f999e5ddd65c6a
mTransitions(
nsStyleAutoArray<StyleTransition>::WITH_SINGLE_INITIAL_ELEMENT),
mTransitionTimingFunctionCount(1),
@@ -3317,6 +3320,7 @@ nsStyleUIReset::nsStyleUIReset(const nsStyleUIReset& aSource)
@@ -3277,6 +3280,7 @@ nsStyleUIReset::nsStyleUIReset(const nsStyleUIReset& aSource)
mWindowOpacity(aSource.mWindowOpacity),
mMozWindowInputRegionMargin(aSource.mMozWindowInputRegionMargin),
mMozWindowTransform(aSource.mMozWindowTransform),

View File

@@ -1,8 +1,8 @@
diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h
index f40f005606946b1149bfb7b67d1df9be04ddaf07..64da397ceb4192aacd24c4cd9fb0efbad2d363ed 100644
index 46f9312292b6f332947e68586ae770acffe8c418..2408eb06ab466faba99e83b5c92759cf3277edad 100644
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -2094,6 +2094,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleUIReset {
@@ -2055,6 +2055,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleUIReset {
// The margin of the window region that should be transparent to events.
mozilla::StyleLength mMozWindowInputRegionMargin;
mozilla::StyleTransform mMozWindowTransform;

View File

@@ -1,8 +1,8 @@
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
index 86dc55502b05eed6e4bb0a2ed489e1e8e76840cb..2c2918b2d3c76063662fe59d7fde745a36a92ab6 100644
index 34f519ad1107736f47719679be7f4fa20cd718c1..7f886071259d6ddd971ca5c92180de0cca9a0f5d 100644
--- a/modules/libpref/init/StaticPrefList.yaml
+++ b/modules/libpref/init/StaticPrefList.yaml
@@ -19316,6 +19316,7 @@
@@ -19496,6 +19496,7 @@
mirror: always
#endif

View File

@@ -1,8 +1,8 @@
diff --git a/netwerk/protocol/http/moz.build b/netwerk/protocol/http/moz.build
index 906a2fcdcc2684ff4326aeb7f22f3441add7e56c..37e16b62d012498c66bc3a38f4ce48972298b6be 100644
index d2330003caf35c43d6831fb0d356ece513906f78..76c2faf822ddaf645eb03d93380c58b4e3b510c0 100644
--- a/netwerk/protocol/http/moz.build
+++ b/netwerk/protocol/http/moz.build
@@ -225,7 +225,7 @@ LOCAL_INCLUDES += [
@@ -227,7 +227,7 @@ LOCAL_INCLUDES += [
"/netwerk/url-classifier",
]

View File

@@ -1,5 +1,5 @@
diff --git a/servo/components/style/gecko/media_features.rs b/servo/components/style/gecko/media_features.rs
index b0082951254ad592c73caaa16c5b5c57127831a9..9b3566b08aacfcf2cfbf9941b2b3ca91a31ade59 100644
index ddbcd495260b5bcc4f55ebf7c06fcb6b5dc595c7..c629ac40f4fe3e03ffc765d3b65f3d348f4b05c6 100644
--- a/servo/components/style/gecko/media_features.rs
+++ b/servo/components/style/gecko/media_features.rs
@@ -13,6 +13,9 @@ use crate::values::computed::{CSSPixelLength, Context, Ratio, Resolution};

View File

@@ -1,37 +1,30 @@
diff --git a/testing/mochitest/browser-test.js b/testing/mochitest/browser-test.js
index 979c6a0960cb8c490b612649d0fac55cd7b7d0f7..f149f248f705484b3572ca462660932dd792e312 100644
index d5f320c5e97aae9bfd43d28e3d4a274d9bbc0787..24dc32a5bf6ae9abaa8f3fe8c37b031a76fb4d60 100644
--- a/testing/mochitest/browser-test.js
+++ b/testing/mochitest/browser-test.js
@@ -440,11 +440,11 @@ Tester.prototype = {
this.currentTest &&
window.gBrowser &&
AppConstants.MOZ_APP_NAME != "thunderbird" &&
- gBrowser.tabs.length > 1
+ gBrowser.tabs.length > 2
) {
let lastURI = "";
let lastURIcount = 0;
- while (gBrowser.tabs.length > 1) {
+ while (gBrowser.tabs.length > 2) {
let lastTab = gBrowser.tabs[gBrowser.tabs.length - 1];
if (!lastTab.closing) {
// Report the stale tab as an error only when they're not closing.
@@ -479,12 +479,12 @@ Tester.prototype = {
@@ -438,10 +438,10 @@ Tester.prototype = {
// But not the Thunderbird window, it doesn't have these things!
if (AppConstants.MOZ_APP_NAME != "thunderbird") {
// Remove stale tabs
- if (this.currentTest && window.gBrowser && gBrowser.tabs.length > 1) {
+ if (this.currentTest && window.gBrowser && gBrowser.tabs.length > 2) {
let lastURI = "";
let lastURIcount = 0;
- while (gBrowser.tabs.length > 1) {
+ while (gBrowser.tabs.length > 2) {
let lastTab = gBrowser.tabs[gBrowser.tabs.length - 1];
if (!lastTab.closing) {
// Report the stale tab as an error only when they're not closing.
@@ -476,12 +476,6 @@ Tester.prototype = {
// Replace the last tab with a fresh one
if (window.gBrowser && AppConstants.MOZ_APP_NAME != "thunderbird") {
- gBrowser.addTab("about:blank", {
- skipAnimation: true,
- triggeringPrincipal:
- Services.scriptSecurityManager.getSystemPrincipal(),
- });
- gBrowser.removeTab(gBrowser.selectedTab, { skipPermitUnload: true });
+ // gBrowser.addTab("about:blank", {
+ // skipAnimation: true,
+ // triggeringPrincipal:
+ // Services.scriptSecurityManager.getSystemPrincipal(),
+ // });
+ // gBrowser.removeTab(gBrowser.selectedTab, { skipPermitUnload: true });
gBrowser.stop();
}
// Replace the last tab with a fresh one
if (window.gBrowser) {
- gBrowser.addTab("about:blank", {
- skipAnimation: true,
- triggeringPrincipal:
- Services.scriptSecurityManager.getSystemPrincipal(),
- });
- gBrowser.removeTab(gBrowser.selectedTab, { skipPermitUnload: true });
gBrowser.stop();
}

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/actors/PictureInPictureChild.sys.mjs b/toolkit/actors/PictureInPictureChild.sys.mjs
index 21b6295bf46336a70ed0a3797cf3210c8c0cb545..5a7018f1f923e977f63fae296ffdff1730ad1218 100644
index ea47bd1029de4571a045c1ee17c313dc9d62cad8..0f8afca693e0fc112839cfb998fd8baa20227f06 100644
--- a/toolkit/actors/PictureInPictureChild.sys.mjs
+++ b/toolkit/actors/PictureInPictureChild.sys.mjs
@@ -292,6 +292,7 @@ export class PictureInPictureLauncherChild extends JSWindowActorChild {
@@ -295,6 +295,7 @@ export class PictureInPictureLauncherChild extends JSWindowActorChild {
if (
video &&
PictureInPictureChild.videoIsPlaying(video) &&

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/content/widgets/findbar.js b/toolkit/content/widgets/findbar.js
index 8ca512e0b212bb6e25ed37e7edb4f8e2587d5bb0..5abfff92b3a8df5d138082af96419668a2c8a9bb 100644
index 589d96886b1c9a1bd0e819957978a8968402e98b..4df4be8dbbe67063f0e1920baa2db3f5b909b11b 100644
--- a/toolkit/content/widgets/findbar.js
+++ b/toolkit/content/widgets/findbar.js
@@ -1188,6 +1188,7 @@

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/content/widgets/tabbox.js b/toolkit/content/widgets/tabbox.js
index 70afbfc87d543971e6f8a0661a44b682920a7bc4..2035222f4680e2eaa27b3072a12a9163b914adec 100644
index cfe2da6e199667bd668f117cc8972212c7f57da2..bdd7dcc26139202e6e31afde47dc4d877f3db3c5 100644
--- a/toolkit/content/widgets/tabbox.js
+++ b/toolkit/content/widgets/tabbox.js
@@ -213,7 +213,7 @@
@@ -11,7 +11,7 @@ index 70afbfc87d543971e6f8a0661a44b682920a7bc4..2035222f4680e2eaa27b3072a12a9163
this._selectedPanel?.classList.add("deck-selected");
}
this.setAttribute("selectedIndex", val);
@@ -610,7 +610,7 @@
@@ -697,7 +697,7 @@
if (!tab) {
return;
}
@@ -20,7 +20,7 @@ index 70afbfc87d543971e6f8a0661a44b682920a7bc4..2035222f4680e2eaa27b3072a12a9163
if (otherTab != tab && otherTab.selected) {
otherTab._selected = false;
}
@@ -646,6 +646,7 @@
@@ -733,6 +733,7 @@
* @param {MozTab|null} [val]
*/
set selectedItem(val) {
@@ -28,7 +28,7 @@ index 70afbfc87d543971e6f8a0661a44b682920a7bc4..2035222f4680e2eaa27b3072a12a9163
if (val && !val.selected) {
// The selectedIndex setter ignores invalid values
// such as -1 if |val| isn't one of our child nodes.
@@ -823,7 +824,7 @@
@@ -910,7 +911,7 @@
if (tab == startTab) {
return null;
}
@@ -37,7 +37,7 @@ index 70afbfc87d543971e6f8a0661a44b682920a7bc4..2035222f4680e2eaa27b3072a12a9163
return tab;
}
}
@@ -885,10 +886,11 @@
@@ -972,10 +973,11 @@
* @param {boolean} [aWrap]
*/
advanceSelectedTab(aDir, aWrap) {

View File

@@ -1,11 +1,11 @@
diff --git a/toolkit/content/xul.css b/toolkit/content/xul.css
index badef34e6072da6e0e1180f5f08ab201a89fa195..2842eee9d5655444ccac8c085f19df0247886d64 100644
index 57dd6042d2620dd64c55e0e966913047a6c3502f..40d016a0a13596439046e2bbcfa59daa30f10b2d 100644
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -461,7 +461,8 @@ deck > *|*:not(:-moz-native-anonymous) {
}
@@ -463,7 +463,8 @@ deck > *|*:not(:-moz-native-anonymous) {
tabpanels > .deck-selected,
tabpanels > .split-view-panel,
tabpanels > .split-view-splitter,
-deck > .deck-selected {
+deck > .deck-selected,
+tabpanels > [zen-split="true"] {

View File

@@ -1,16 +1,8 @@
diff --git a/toolkit/modules/ShortcutUtils.sys.mjs b/toolkit/modules/ShortcutUtils.sys.mjs
index 3e796cb6586ad39257a29c2a6da1d0415f4c2676..98b639c726efee850456a3af8a01f0ce66423ba0 100644
index e52e88a09a281e69ecf15e7b84b8b98736e1dbdd..f47fbe24e0860195e11fe5231ab27e52aad96d0b 100644
--- a/toolkit/modules/ShortcutUtils.sys.mjs
+++ b/toolkit/modules/ShortcutUtils.sys.mjs
@@ -140,6 +140,7 @@ export var ShortcutUtils = {
key = keyCode.replace(/^VK_/, "");
}
} else {
+ if (!keyAttribute) return "";
key = keyAttribute.toUpperCase();
}
@@ -373,13 +374,11 @@ export var ShortcutUtils = {
@@ -414,13 +414,11 @@ export var ShortcutUtils = {
}
break;
case event.DOM_VK_UP: // fall through

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
index e43870b10c5b35165fd21b48065980060104dc52..71e3db5618c834bc4ff9d481b1e667f2b02b183e 100644
index a17e15c74c8e627cf805d1f026438759af7e4a97..fc6e1e6b2711e474d65a688b2481b7a26cad2a71 100644
--- a/toolkit/modules/moz.build
+++ b/toolkit/modules/moz.build
@@ -280,6 +280,7 @@ for var in (

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/moz.configure b/toolkit/moz.configure
index 2fdcf62bde7805e52737cb06ec67908fa40524c9..b9f9e3abeb5cf770b29e1354615184fce2162ec7 100644
index f3032042d34766b0e94c56872f91271f307ffc89..8c8540e8bf8d3df5b33e2f0da6b94a32e75684b5 100644
--- a/toolkit/moz.configure
+++ b/toolkit/moz.configure
@@ -22,6 +22,7 @@ def check_moz_app_id(moz_app_id, build_project):

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/mozapps/extensions/AddonManager.sys.mjs b/toolkit/mozapps/extensions/AddonManager.sys.mjs
index 2c1e187d14bae0dcc17a1fa2de768e7c949b3776..c322b770bdc1a0786d8e3bf1af618e3d3d3dd26e 100644
index 3562dfc61f6462a4e46ff321d4df4df23f48949d..2afc42cae98a24ecfd129c8a3dd1e7e0a94882ab 100644
--- a/toolkit/mozapps/extensions/AddonManager.sys.mjs
+++ b/toolkit/mozapps/extensions/AddonManager.sys.mjs
@@ -1227,12 +1227,12 @@ var AddonManagerInternal = {
@@ -1243,12 +1243,12 @@ var AddonManagerInternal = {
ITEM_VERSION: aAddon.version,
ITEM_STATUS: addonStatus,
APP_ID: Services.appinfo.ID,

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/themes/shared/aboutReader.css b/toolkit/themes/shared/aboutReader.css
index 1eb2c44694bb4970134fb5d290e32c7053103461..8d8237029976960048cb9aceede918c9e20c523b 100644
index e9dedcacb868fb0908c3432e1ccf3956b383aea7..6418c08550b9b4876df20ca5f93d093be0583f83 100644
--- a/toolkit/themes/shared/aboutReader.css
+++ b/toolkit/themes/shared/aboutReader.css
@@ -1181,3 +1181,43 @@ pre code {

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/themes/shared/in-content/common-shared.css b/toolkit/themes/shared/in-content/common-shared.css
index 96129498de63153704711bf7a21fb10922e80917..83f7b5ee2f15197dc42ec02ec1a73cc2bfc19a4d 100644
index 2d068aa3472887e089254834d92f75b9f6d9894b..1a6d5b87fdcfb338222475bb6362820e3915955d 100644
--- a/toolkit/themes/shared/in-content/common-shared.css
+++ b/toolkit/themes/shared/in-content/common-shared.css
@@ -4,7 +4,7 @@

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/themes/shared/menulist.css b/toolkit/themes/shared/menulist.css
index 8f9c006945e67f668075bd36ce83d5a772a9a796..08d68c015b001233548cd6c7babad17f3a638702 100644
index 73149025f13e8805774c004820d57755d2bf89a9..f503e6bcd1c466757fc58e033aa0d68343685e28 100644
--- a/toolkit/themes/shared/menulist.css
+++ b/toolkit/themes/shared/menulist.css
@@ -53,7 +53,7 @@
@@ -9,5 +9,5 @@ index 8f9c006945e67f668075bd36ce83d5a772a9a796..08d68c015b001233548cd6c7babad17f
- background-color: var(--button-background-color);
+ background-color: light-dark(rgba(0,0,0,.1), rgba(255,255,255,.1));
color: var(--button-text-color);
border-radius: var(--border-radius-small);
border-radius: var(--button-border-radius);
padding-block: 4px;

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/themes/shared/pictureinpicture/player.css b/toolkit/themes/shared/pictureinpicture/player.css
index 33b10bebcdfe636d7ff0f61a11d5fa4664a31f78..83b53817c53f43cca3be40b490300109b4949f5b 100644
index 12dba9ec5eee93476034b1e8b503a301fc18dbcb..b81c9e997d85e78cdf6ab460e14a5128117639bd 100644
--- a/toolkit/themes/shared/pictureinpicture/player.css
+++ b/toolkit/themes/shared/pictureinpicture/player.css
@@ -738,3 +738,17 @@ input:checked + .slider::before {

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