mirror of
https://github.com/zen-browser/desktop.git
synced 2026-07-29 19:37:48 +00:00
chore: Update Firefox version to 128.0!
This commit is contained in:
@@ -54,6 +54,17 @@ var ZenWorkspaces = {
|
||||
|
||||
// Workspaces management
|
||||
|
||||
_createWorkspaceData(windowID) {
|
||||
let window = Services.wm.getOuterWindowWithId(windowID);
|
||||
let tabs = Array.from(window.gBrowser.tabs).map(tab => ({
|
||||
url: tab.linkedBrowser.currentURI.spec,
|
||||
title: tab.label,
|
||||
}));
|
||||
return {
|
||||
tabs,
|
||||
};
|
||||
},
|
||||
|
||||
async saveCurrentWorkspace(windowID) {
|
||||
let workspaceData = this._createWorkspaceData(windowID);
|
||||
await this.saveWorkspace(workspaceData, windowID);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css
|
||||
index 6e776a9ce7c525e510b6466065daf755b21567a4..8668b27ec2126ed772a11aa77809b6f22ceab7e2 100644
|
||||
index cdd08ec8f3d3cd652be9fcf6d4fb5b50dcf270ba..6cb35378aea2e7967dff0c91d09201b053645fbd 100644
|
||||
--- a/browser/base/content/browser.css
|
||||
+++ b/browser/base/content/browser.css
|
||||
@@ -2,6 +2,8 @@
|
||||
@@ -10,32 +10,8 @@ index 6e776a9ce7c525e510b6466065daf755b21567a4..8668b27ec2126ed772a11aa77809b6f2
|
||||
+
|
||||
@namespace html url("http://www.w3.org/1999/xhtml");
|
||||
|
||||
:root,
|
||||
@@ -157,8 +159,6 @@ panelview:not([visible]) {
|
||||
flex: 100 100;
|
||||
max-width: 225px;
|
||||
min-width: var(--tab-min-width);
|
||||
- transition: min-width 100ms ease-out,
|
||||
- max-width 100ms ease-out;
|
||||
}
|
||||
|
||||
:root[uidensity=touch] .tabbrowser-tab:not([pinned]) {
|
||||
@@ -647,12 +647,12 @@ toolbar:not(#TabsToolbar) > #personal-bookmarks {
|
||||
margin-inline-start: 0;
|
||||
}
|
||||
|
||||
-#urlbar-input-container[pageproxystate=invalid] > #page-action-buttons > .urlbar-page-action,
|
||||
+#urlbar-input-container[pageproxystate=invalid] > #page-action-buttons > .urlbar-page-action:not(#zen-split-views-box),
|
||||
#identity-box.chromeUI ~ #page-action-buttons > .urlbar-page-action:not(#star-button-box),
|
||||
#urlbar[usertyping] > #urlbar-input-container > #page-action-buttons > #urlbar-zoom-button,
|
||||
#urlbar:not([usertyping]) > #urlbar-input-container > #urlbar-go-button,
|
||||
#urlbar:not([focused]) > #urlbar-input-container > #urlbar-go-button {
|
||||
- display: none;
|
||||
+ display: none !important;
|
||||
}
|
||||
|
||||
#nav-bar:not([keyNav=true]) #identity-box,
|
||||
@@ -1237,13 +1237,13 @@ printpreview-pagination:focus-within,
|
||||
panelmultiview {
|
||||
@@ -566,9 +568,9 @@ printpreview-pagination:focus-within,
|
||||
|
||||
|
||||
#sidebar-box {
|
||||
@@ -47,15 +23,11 @@ index 6e776a9ce7c525e510b6466065daf755b21567a4..8668b27ec2126ed772a11aa77809b6f2
|
||||
}
|
||||
|
||||
/* WebExtension Sidebars */
|
||||
-#sidebar-box[sidebarcommand$="-sidebar-action"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
|
||||
+#sidebar-box[sidebarcommand$="-sidebar-action"] #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
|
||||
list-style-image: var(--webextension-menuitem-image, inherit);
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
@@ -1444,3 +1444,42 @@ toolbar[keyNav=true]:not([collapsed=true], [customizing=true]) toolbartabstop {
|
||||
/**
|
||||
* End Dialogs
|
||||
*/
|
||||
@@ -583,3 +585,43 @@ printpreview-pagination:focus-within,
|
||||
toolbar[keyNav=true]:not([collapsed=true], [customizing=true]) toolbartabstop {
|
||||
-moz-user-focus: normal;
|
||||
}
|
||||
+
|
||||
+
|
||||
+/**
|
||||
+ *
|
||||
|
||||
@@ -1,33 +1,13 @@
|
||||
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
|
||||
index 0717ce21386b73fc3399c97b34c6892a674cca77..f20e8a43fdd1d885f917948a26f1c3a1bd917707 100644
|
||||
index a79a9734619f89639c15087fe28e9615354a7209..212628c6fb2bed5ba17a3d2908f5d4b2376fa95e 100644
|
||||
--- a/browser/base/content/browser-init.js
|
||||
+++ b/browser/base/content/browser-init.js
|
||||
@@ -230,6 +230,12 @@ var gBrowserInit = {
|
||||
@@ -230,6 +230,8 @@ var gBrowserInit = {
|
||||
gURLBar.readOnly = true;
|
||||
}
|
||||
|
||||
+ Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", this);
|
||||
+
|
||||
+ // ZEN: Propagate the current profile used to the browser UI, such as
|
||||
+ // showing the avatar and profile info to the side bar
|
||||
+ zenUpdateBrowserProfiles();
|
||||
+
|
||||
+
|
||||
// Misc. inits.
|
||||
gUIDensity.init();
|
||||
TabletModeUpdater.init();
|
||||
@@ -1105,3 +1111,15 @@ var gBrowserInit = {
|
||||
};
|
||||
|
||||
gBrowserInit.idleTasksFinishedPromise = gBrowserInit.idleTasksFinished.promise;
|
||||
+
|
||||
+function zenUpdateBrowserProfiles() {
|
||||
+ const mainWindowEl = document.documentElement;
|
||||
+ // Dont override the sync avatar if it's already set
|
||||
+ if (mainWindowEl.style.hasOwnProperty("--avatar-image-url")) {
|
||||
+ return;
|
||||
+ }
|
||||
+ let profile = ProfileService.currentProfile;
|
||||
+ if (!profile || profile.zenAvatarPath == "") return;
|
||||
+ // TODO: actually use profile data to generate the avatar, instead of just using the name
|
||||
+ mainWindowEl.style.setProperty("--avatar-image-url", `url(${profile.zenAvatarPath})`);
|
||||
+}
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
diff --git a/browser/base/content/tabbrowser.js b/browser/base/content/tabbrowser.js
|
||||
index 3bca0b6d30468dc3a755219723f673ec80dfce6e..200a609ea31a8c904e2d3e39a3a06ff67fb313ed 100644
|
||||
--- a/browser/base/content/tabbrowser.js
|
||||
+++ b/browser/base/content/tabbrowser.js
|
||||
@@ -7623,6 +7623,11 @@ var TabContextMenu = {
|
||||
this.contextTab.linkedBrowser,
|
||||
document.getElementById("context_sendTabToDevice")
|
||||
);
|
||||
+
|
||||
+ document
|
||||
+ .getElementById("context_zenSplitTabs")
|
||||
+ .setAttribute("data-l10n-args", tabCountInfo);
|
||||
+ document.getElementById("context_zenSplitTabs").disabled = !gZenViewSplitter.contextCanSplitTabs();
|
||||
},
|
||||
|
||||
handleEvent(aEvent) {
|
||||
@@ -1,284 +0,0 @@
|
||||
diff --git a/browser/base/content/tabbrowser-tabs.js b/browser/base/content/tabbrowser-tabs.js
|
||||
index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c992624170bde0e63 100644
|
||||
--- a/browser/base/content/tabbrowser-tabs.js
|
||||
+++ b/browser/base/content/tabbrowser-tabs.js
|
||||
@@ -538,19 +538,36 @@
|
||||
}
|
||||
dt.setDragImage(toDrag, dragImageOffset, dragImageOffset);
|
||||
|
||||
+ const zenVerticalTabs = Services.prefs.getBoolPref(
|
||||
+ "zen.tabs.vertical",
|
||||
+ false
|
||||
+ );
|
||||
+
|
||||
// _dragData.offsetX/Y give the coordinates that the mouse should be
|
||||
// positioned relative to the corner of the new window created upon
|
||||
// dragend such that the mouse appears to have the same position
|
||||
// relative to the corner of the dragged tab.
|
||||
function clientX(ele) {
|
||||
+ if (zenVerticalTabs) {
|
||||
+ return 0;
|
||||
+ }
|
||||
return ele.getBoundingClientRect().left;
|
||||
}
|
||||
+ function clientY(ele) {
|
||||
+ if (!zenVerticalTabs) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ return ele.getBoundingClientRect().top;
|
||||
+ }
|
||||
let tabOffsetX = clientX(tab) - clientX(this);
|
||||
+ let tabOffsetY = clientY(tab) - clientY(this);
|
||||
tab._dragData = {
|
||||
offsetX: event.screenX - window.screenX - tabOffsetX,
|
||||
- offsetY: event.screenY - window.screenY,
|
||||
+ offsetY: event.screenY - window.screenY - tabOffsetY,
|
||||
scrollX: this.arrowScrollbox.scrollbox.scrollLeft,
|
||||
+ scrollY: this.arrowScrollbox.scrollbox.scrollTop,
|
||||
screenX: event.screenX,
|
||||
+ screenY: event.screenY,
|
||||
movingTabs: (tab.multiselected ? gBrowser.selectedTabs : [tab]).filter(
|
||||
t => t.pinned == tab.pinned
|
||||
),
|
||||
@@ -637,21 +654,30 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ const verticalTabs = Services.prefs.getBoolPref(
|
||||
+ "zen.tabs.vertical",
|
||||
+ false
|
||||
+ );
|
||||
+ const left = verticalTabs ? "top" : "left";
|
||||
+ const right = verticalTabs ? "bottom" : "right";
|
||||
+ const width = verticalTabs ? "height" : "width";
|
||||
+ const clientWidth = verticalTabs ? "clientHeight" : "clientWidth";
|
||||
+
|
||||
var rect = arrowScrollbox.getBoundingClientRect();
|
||||
var newMargin;
|
||||
if (pixelsToScroll) {
|
||||
// if we are scrolling, put the drop indicator at the edge
|
||||
// so that it doesn't jump while scrolling
|
||||
let scrollRect = arrowScrollbox.scrollClientRect;
|
||||
- let minMargin = scrollRect.left - rect.left;
|
||||
+ let minMargin = scrollRect[left] - rect[left];
|
||||
let maxMargin = Math.min(
|
||||
- minMargin + scrollRect.width,
|
||||
- scrollRect.right
|
||||
+ minMargin + scrollRect[width],
|
||||
+ scrollRect[right]
|
||||
);
|
||||
if (RTL_UI) {
|
||||
[minMargin, maxMargin] = [
|
||||
- this.clientWidth - maxMargin,
|
||||
- this.clientWidth - minMargin,
|
||||
+ this[clientWidth] - maxMargin,,
|
||||
+ this[clientWidth] - minMargin,
|
||||
];
|
||||
}
|
||||
newMargin = pixelsToScroll > 0 ? maxMargin : minMargin;
|
||||
@@ -661,29 +687,38 @@
|
||||
if (newIndex == children.length) {
|
||||
let tabRect = this._getVisibleTabs().at(-1).getBoundingClientRect();
|
||||
if (RTL_UI) {
|
||||
- newMargin = rect.right - tabRect.left;
|
||||
+ newMargin = rect[right] - tabRect[left];
|
||||
} else {
|
||||
- newMargin = tabRect.right - rect.left;
|
||||
+ newMargin = tabRect[right] - rect[left];
|
||||
}
|
||||
} else {
|
||||
let tabRect = children[newIndex].getBoundingClientRect();
|
||||
if (RTL_UI) {
|
||||
- newMargin = rect.right - tabRect.right;
|
||||
+ newMargin = rect[right] - tabRect[right];
|
||||
} else {
|
||||
- newMargin = tabRect.left - rect.left;
|
||||
+ newMargin = tabRect[left] - rect[left];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ind.hidden = false;
|
||||
- newMargin += ind.clientWidth / 2;
|
||||
- if (RTL_UI) {
|
||||
+ newMargin += ind[clientWidth] / 2;
|
||||
+ if (RTL_UI && !verticalTabs) {
|
||||
newMargin *= -1;
|
||||
}
|
||||
ind.style.transform = "translate(" + Math.round(newMargin) + "px)";
|
||||
+
|
||||
+ ind.style.transform =
|
||||
+ "translate(" + verticalTabs
|
||||
+ ? "0, "
|
||||
+ : "" + Math.round(newMargin) + "px)";
|
||||
}
|
||||
|
||||
on_drop(event) {
|
||||
+ const verticalTabs = Services.prefs.getBoolPref(
|
||||
+ "zen.tabs.vertical",
|
||||
+ false
|
||||
+ );
|
||||
var dt = event.dataTransfer;
|
||||
var dropEffect = dt.dropEffect;
|
||||
var draggedTab;
|
||||
@@ -740,7 +775,7 @@
|
||||
incrementDropIndex = false;
|
||||
}
|
||||
|
||||
- if (oldTranslateX && oldTranslateX != newTranslateX && !gReduceMotion) {
|
||||
+ if (oldTranslateX && oldTranslateX != newTranslateX && !(gReduceMotion || verticalTabs)) {
|
||||
for (let tab of movingTabs) {
|
||||
tab.toggleAttribute("tabdrop-samewindow", true);
|
||||
tab.style.transform = "translateX(" + newTranslateX + "px)";
|
||||
@@ -1126,10 +1161,13 @@
|
||||
}
|
||||
|
||||
_initializeArrowScrollbox() {
|
||||
+ this.toggleAttribute("overflow", true);
|
||||
+
|
||||
let arrowScrollbox = this.arrowScrollbox;
|
||||
arrowScrollbox.shadowRoot.addEventListener(
|
||||
"underflow",
|
||||
event => {
|
||||
+ return;
|
||||
// Ignore underflow events:
|
||||
// - from nested scrollable elements
|
||||
// - for vertical orientation
|
||||
@@ -1492,19 +1530,30 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (!("animLastScreenX" in draggedTab._dragData)) {
|
||||
- draggedTab._dragData.animLastScreenX = draggedTab._dragData.screenX;
|
||||
- }
|
||||
-
|
||||
- let screenX = event.screenX;
|
||||
- if (screenX == draggedTab._dragData.animLastScreenX) {
|
||||
- return;
|
||||
+ const verticalTabs = Services.prefs.getBoolPref(
|
||||
+ "zen.tabs.vertical",
|
||||
+ false
|
||||
+ );
|
||||
+ const animLastScreen = verticalTabs
|
||||
+ ? "animLastScreenY"
|
||||
+ : "animLastScreenX";
|
||||
+ const screen = verticalTabs ? "screenY" : "screenX";
|
||||
+ const dimensions = verticalTabs ? "height" : "width";
|
||||
+ const scrollEdge = verticalTabs ? "scrollTop" : "scrollLeft";
|
||||
+ const scrollDimension = verticalTabs ? "scrollY" : "scrollX";
|
||||
+ const translate = verticalTabs ? "translateY" : "translateX";
|
||||
+ if (!(animLastScreen in draggedTab._dragData)) {
|
||||
+ draggedTab._dragData[animLastScreen] = draggedTab._dragData[screen];
|
||||
+ }
|
||||
+ let screenX = event[screen];
|
||||
+ if (screenX == draggedTab._dragData[animLastScreen]) {
|
||||
+ return;
|
||||
}
|
||||
|
||||
// Direction of the mouse movement.
|
||||
- let ltrMove = screenX > draggedTab._dragData.animLastScreenX;
|
||||
+ let ltrMove = screenX > draggedTab._dragData[animLastScreen];
|
||||
|
||||
- draggedTab._dragData.animLastScreenX = screenX;
|
||||
+ draggedTab._dragData[animLastScreen] = screenX;
|
||||
|
||||
let pinned = draggedTab.pinned;
|
||||
let numPinned = gBrowser._numPinnedTabs;
|
||||
@@ -1513,36 +1562,39 @@
|
||||
pinned ? numPinned : undefined
|
||||
);
|
||||
|
||||
- if (RTL_UI) {
|
||||
+ if (RTL_UI && !verticalTabs) {
|
||||
tabs.reverse();
|
||||
// Copy moving tabs array to avoid infinite reversing.
|
||||
movingTabs = [...movingTabs].reverse();
|
||||
}
|
||||
- let tabWidth = draggedTab.getBoundingClientRect().width;
|
||||
+ let tabWidth = draggedTab.getBoundingClientRect()[dimensions];
|
||||
let shiftWidth = tabWidth * movingTabs.length;
|
||||
+ // We want to store the output value as the width and the height to force
|
||||
+ // compatibility with code elsewhere
|
||||
draggedTab._dragData.tabWidth = tabWidth;
|
||||
+ draggedTab._dragData.tabHeight = tabWidth;
|
||||
|
||||
// Move the dragged tab based on the mouse position.
|
||||
|
||||
let leftTab = tabs[0];
|
||||
let rightTab = tabs[tabs.length - 1];
|
||||
- let rightMovingTabScreenX = movingTabs[movingTabs.length - 1].screenX;
|
||||
- let leftMovingTabScreenX = movingTabs[0].screenX;
|
||||
- let translateX = screenX - draggedTab._dragData.screenX;
|
||||
+ let rightMovingTabScreenX = movingTabs[movingTabs.length - 1][screen];
|
||||
+ let leftMovingTabScreenX = movingTabs[0][screen];
|
||||
+ let translateX = screenX - draggedTab._dragData[screen];
|
||||
if (!pinned) {
|
||||
translateX +=
|
||||
- this.arrowScrollbox.scrollbox.scrollLeft -
|
||||
- draggedTab._dragData.scrollX;
|
||||
+ this.arrowScrollbox.scrollbox[scrollEdge] -
|
||||
+ draggedTab._dragData[scrollDimension];
|
||||
}
|
||||
- let leftBound = leftTab.screenX - leftMovingTabScreenX;
|
||||
+ let leftBound = leftTab[screen] - leftMovingTabScreenX;
|
||||
let rightBound =
|
||||
- rightTab.screenX +
|
||||
- rightTab.getBoundingClientRect().width -
|
||||
+ rightTab[screen] +
|
||||
+ rightTab.getBoundingClientRect()[dimensions] -
|
||||
(rightMovingTabScreenX + tabWidth);
|
||||
translateX = Math.min(Math.max(translateX, leftBound), rightBound);
|
||||
|
||||
for (let tab of movingTabs) {
|
||||
- tab.style.transform = "translateX(" + translateX + "px)";
|
||||
+ tab.style.transform = translate + "(" + translateX + "px)";
|
||||
}
|
||||
|
||||
draggedTab._dragData.translateX = translateX;
|
||||
@@ -1575,11 +1627,11 @@
|
||||
if (tabs[mid] == draggedTab && ++mid > high) {
|
||||
break;
|
||||
}
|
||||
- screenX = tabs[mid].screenX + getTabShift(tabs[mid], oldIndex);
|
||||
+ screenX = tabs[mid][screen] + getTabShift(tabs[mid], oldIndex);
|
||||
if (screenX > tabCenter) {
|
||||
high = mid - 1;
|
||||
} else if (
|
||||
- screenX + tabs[mid].getBoundingClientRect().width <
|
||||
+ screenX + tabs[mid].getBoundingClientRect()[dimensions] <
|
||||
tabCenter
|
||||
) {
|
||||
low = mid + 1;
|
||||
@@ -1602,16 +1654,16 @@
|
||||
for (let tab of tabs) {
|
||||
if (tab != draggedTab) {
|
||||
let shift = getTabShift(tab, newIndex);
|
||||
- tab.style.transform = shift ? "translateX(" + shift + "px)" : "";
|
||||
+ tab.style.transform = shift ? translate + "(" + shift + "px)" : "";
|
||||
}
|
||||
}
|
||||
|
||||
function getTabShift(tab, dropIndex) {
|
||||
if (tab._tPos < draggedTab._tPos && tab._tPos >= dropIndex) {
|
||||
- return RTL_UI ? -shiftWidth : shiftWidth;
|
||||
+ return RTL_UI && !verticalTabs ? -shiftWidth : shiftWidth;
|
||||
}
|
||||
if (tab._tPos > draggedTab._tPos && tab._tPos < dropIndex) {
|
||||
- return RTL_UI ? shiftWidth : -shiftWidth;
|
||||
+ return RTL_UI && !verticalTabs ? shiftWidth : -shiftWidth;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1683,9 +1735,9 @@
|
||||
|
||||
// Slide the relevant tabs to their new position.
|
||||
for (let t of this._getVisibleTabs()) {
|
||||
- if (t.groupingTabsData && t.groupingTabsData.translateX) {
|
||||
- let translateX = (RTL_UI ? -1 : 1) * t.groupingTabsData.translateX;
|
||||
- t.style.transform = "translateX(" + translateX + "px)";
|
||||
+ if (t.groupingTabsData && t.groupingTabsData.translateY) {
|
||||
+ let translateX = (RTL_UI ? -1 : 1) * t.groupingTabsData.translateY;
|
||||
+ t.style.transform = "translateY(" + translateX + "px)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
|
||||
_zenInitBrowserLayout() {
|
||||
if (!this._inMainBrowserWindow) return;
|
||||
console.log("ZenThemeModifier: init browser layout");
|
||||
const kNavbarItems = [
|
||||
"nav-bar",
|
||||
"PersonalToolbar",
|
||||
@@ -116,7 +117,19 @@
|
||||
|
||||
// move the security button to the right
|
||||
const securityButton = document.getElementById("tracking-protection-icon-container");
|
||||
document.getElementById("urlbar-input-container").insertBefore(securityButton, document.getElementById("page-action-buttons"));
|
||||
document.getElementsByClassName("urlbar-input-container")[0].insertBefore(securityButton, document.getElementById("page-action-buttons"));
|
||||
|
||||
const mainWindowEl = document.documentElement;
|
||||
// Dont override the sync avatar if it's already set
|
||||
if (mainWindowEl.style.hasOwnProperty("--avatar-image-url")) {
|
||||
return;
|
||||
}
|
||||
let profile = ProfileService.currentProfile;
|
||||
if (!profile || profile.zenAvatarPath == "") return;
|
||||
// TODO: actually use profile data to generate the avatar, instead of just using the name
|
||||
console.log("ZenThemeModifier: setting avatar image to", profile.zenAvatarPath);
|
||||
mainWindowEl.style.setProperty("--zen-avatar-image-url", `url(${profile.zenAvatarPath})`);
|
||||
mainWindowEl.style.setProperty("--avatar-image-url", `var(--zen-avatar-image-url)`, "important");
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user