Compare commits

..

20 Commits
1.8b ... 1.8.1b

Author SHA1 Message Date
mr. m
59e8c120e2 Made rust compilation also use sscache and also display it's building time 2025-02-24 23:16:51 +01:00
mr. m
382dcc8d0c Started using sccache for all builds now 2025-02-24 23:05:50 +01:00
mr. m
beab1632b3 Merge pull request #5680 from zen-browser/stable
Fixed workspace indicator margin for windows
2025-02-24 21:06:14 +01:00
mr. m
e84cb34b8d Fixed workspace indicator margin for windows
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-02-24 21:05:56 +01:00
mr. m
457c2131e4 Fixed floating urlbar on 2 toolbar compact mode 2025-02-24 20:16:06 +01:00
mr. m
35f38a116a Fixed common issues when opening the settings page on the same workspace 2025-02-24 20:07:30 +01:00
mr. m
054f628192 Fixed default initialization of profile names 2025-02-24 19:41:11 +01:00
mr. m
b844859799 Fixed getting an empty tab user context ID 2025-02-24 13:48:54 +01:00
mr. m
ddaeec85d4 Fixed restoring session store tabs 2025-02-24 10:53:36 +01:00
mr. m
a84d62f307 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-02-24 10:49:36 +01:00
mr. m
b4724cff18 Fixed restoring essential tabs 2025-02-24 10:49:29 +01:00
mr. m
1e72461806 Bumped surfer release version
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-02-24 01:24:25 -08:00
mr. m
41617183ab Fixed reordering tabs with glance and hidden tabs in workspaces 2025-02-24 10:22:13 +01:00
mr. M
9aa48b2645 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-02-24 08:08:11 +01:00
mr. M
20ab35fbf9 Refactor pinned tab management to improve tab insertion logic and error handling 2025-02-24 08:08:01 +01:00
mr. m
de0884d654 Merge pull request #5642 from Tanay-Kar/patch-5
Fixed add color icon alignment issue
2025-02-24 07:54:46 +01:00
mr. m
c285427fe2 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-02-24 07:50:45 +01:00
mr. m
61bbcbda37 Bumped surfer release version 2025-02-24 07:50:43 +01:00
mr. m
7468f6304c Fixed workspaces not showing previous tabs 2025-02-24 07:49:53 +01:00
Tanay Kar
ac915b0373 Fixed add color icon alignment issue
Signed-off-by: Tanay Kar <93914273+Tanay-Kar@users.noreply.github.com>
2025-02-24 12:12:21 +05:30
17 changed files with 235 additions and 191 deletions

View File

@@ -26,6 +26,10 @@ jobs:
fail-fast: false
matrix:
arch: [x86_64, aarch64]
env:
SCCACHE_GHA_ENABLED: 'true'
CARGO_TERM_COLOR: always
RUSTC_WRAPPER: 'sccache'
name: Build Linux - ${{ matrix.arch }}
steps:
@@ -45,6 +49,9 @@ jobs:
with:
node-version-file: '.nvmrc'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.7
- name: Setup Git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
@@ -57,30 +64,6 @@ jobs:
sudo apt-get update
sudo apt-get install -y python3 python3-pip dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
- name: Configure sccache
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Setup sccache
env:
LINK: https://github.com/mozilla/sccache/releases/download
SCCACHE_VERSION: 0.2.13
run: |
SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl
mkdir -p $HOME/.local/bin
curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz
mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Save sccache
uses: actions/cache@v4
with:
path: /home/runner/.cache/sccache
key: ${{ runner.os }}-sccache
- name: Install dependencies
run: |
npm install
@@ -164,3 +147,7 @@ jobs:
retention-days: 5
name: linux_update_manifest_${{ matrix.arch }}
path: ./dist/update
- name: Run sccache stat for check
shell: bash
run: ${SCCACHE_PATH} --show-stats

View File

@@ -25,7 +25,10 @@ jobs:
fail-fast: false
matrix:
arch: [x86_64, aarch64]
env:
SCCACHE_GHA_ENABLED: 'true'
CARGO_TERM_COLOR: always
RUSTC_WRAPPER: 'sccache'
steps:
- name: Checkout repository
uses: actions/checkout@v4
@@ -38,6 +41,9 @@ jobs:
with:
node-version-file: '.nvmrc'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.7
- name: Setup Python
uses: actions/setup-python@v5
# note: This will use the version defined in '.python-version' by default
@@ -50,7 +56,7 @@ jobs:
- name: Install system dependencies
run: |
brew update
brew install cairo sccache gnu-tar mercurial
brew install cairo gnu-tar mercurial
sudo pip install setuptools
brew uninstall --ignore-dependencies python3.12 -f
@@ -157,3 +163,7 @@ jobs:
retention-days: 1
name: platform.ini
path: ./platform.ini
- name: Run sccache stat for check
shell: bash
run: ${SCCACHE_PATH} --show-stats

View File

@@ -44,7 +44,7 @@ jobs:
- name: Install system dependencies
run: |
brew update
brew install cairo sccache gnu-tar mercurial
brew install cairo gnu-tar mercurial
sudo pip install setuptools
brew uninstall --ignore-dependencies python3.12 -f

View File

@@ -28,7 +28,10 @@ jobs:
name: Build Windows - ${{ matrix.arch }}
# aarch64 does not need full 16x, and we also dont use full LTO when generating GPO
runs-on: ${{ (inputs.release-branch == 'release' && !inputs.generate-gpo && matrix.arch == 'x86_64') && 'self-hosted' || 'ubuntu-latest' }}
env:
SCCACHE_GHA_ENABLED: 'true'
CARGO_TERM_COLOR: always
RUSTC_WRAPPER: 'sccache'
strategy:
fail-fast: false
matrix:
@@ -52,6 +55,9 @@ jobs:
with:
node-version-file: '.nvmrc'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.7
- name: Setup Git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
@@ -79,13 +85,6 @@ jobs:
path: ${HOME}/win-cross
key: win-cross
- name: Configure sccache
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Setup for Windows
if: steps.cache-win-cross.outputs.cache-hit != 'true' && !(inputs.generate-gpo && matrix.arch == 'aarch64')
run: |
@@ -313,3 +312,7 @@ jobs:
retention-days: 5
name: windows_update_manifest_${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
path: ./dist/update
- name: Run sccache stat for check
shell: bash
run: ${SCCACHE_PATH} --show-stats

View File

@@ -25,6 +25,12 @@ export MOZ_INCLUDE_SOURCE_INFO=1
ac_add_options --enable-application=browser
if test -x "$(command -v sccache)"; then
ac_add_options --with-ccache=sccache
elif test -f "$HOME/.mozbuild/sccache/sccache"; then
ac_add_options --with-ccache="$HOME"/.mozbuild/sccache/sccache
fi
if test "$ZEN_RELEASE"; then
ac_add_options --enable-clang-plugin

View File

@@ -59,12 +59,4 @@ if test "$ZEN_RELEASE"; then
ac_add_options --enable-install-strip
ac_add_options --enable-strip
export STRIP_FLAGS="--strip-debug --strip-unneeded"
# Using sccache if available
if [ -f /home/runner/.mozbuild/sccache/sccache ]; then
mk_add_options 'export RUSTC_WRAPPER=/home/runner/.mozbuild/sccache/sccache'
mk_add_options 'export CCACHE_CPP2=yes'
ac_add_options --with-ccache=/home/runner/.mozbuild/sccache/sccache
mk_add_options 'export SCCACHE_GHA_ENABLED=on'
fi
fi

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..89045fd46888d2a15ccee1b35ed83692faaad364 100644
index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..22dcf304591290d7a1b60f01998b6cf4782c0cdc 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -32,6 +32,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -51,13 +51,12 @@ index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..89045fd46888d2a15ccee1b35ed83692
for (let i = 0; i < browsers.length; i++) {
let browser = browsers[i];
let browserCompare = cleanURL(
@@ -6392,7 +6402,9 @@ function switchToTabHavingURI(
@@ -6392,7 +6402,7 @@ function switchToTabHavingURI(
}
if (!doAdopt) {
+ aWindow.ZenWorkspaces.switchIfNeeded(browser).then(() => {
aWindow.gBrowser.tabContainer.selectedIndex = i;
+ });
- aWindow.gBrowser.tabContainer.selectedIndex = i;
+ aWindow.ZenWorkspaces.switchIfNeeded(browser, i);
}
return true;

View File

@@ -311,11 +311,6 @@
position: relative !important;
}
& #urlbar {
transform: translateY(-50%);
transition: transform 0.1s ease-in-out;
}
@media (-moz-bool-pref: 'zen.view.compact.color-toolbar') {
background-attachment: fixed;
background: var(--zen-main-browser-background-toolbar);
@@ -336,10 +331,6 @@
overflow: initial;
max-height: unset;
& #urlbar {
transform: translateY(0);
}
&::before {
content: '';
position: absolute;

View File

@@ -47,8 +47,8 @@
#PanelUI-zen-gradient-generator-color-custom-add {
position: absolute;
right: 2px;
top: 4px;
right: 0px;
top: 0px;
cursor: pointer;
}

View File

@@ -460,7 +460,7 @@
position: absolute;
max-height: var(--zen-workspace-indicator-height);
min-height: var(--zen-workspace-indicator-height);
gap: 12px;
gap: var(--tab-icon-end-margin);
align-items: center;
flex-direction: row !important;
max-width: 100%;

View File

@@ -131,7 +131,6 @@
async _refreshPinnedTabs({ init = false } = {}) {
await ZenWorkspaces.promiseSectionsInitialized;
console.log('Refreshing pinned tabs');
await this._initializePinsCache();
await this._initializePinnedTabs(init);
}
@@ -220,79 +219,83 @@
// Third pass: create new tabs for pins that don't have tabs
for (let pin of pins) {
if (!pinsToCreate.has(pin.uuid)) {
continue; // Skip pins that already have tabs
}
try {
if (!pinsToCreate.has(pin.uuid)) {
continue; // Skip pins that already have tabs
}
let params = {
skipAnimation: true,
allowInheritPrincipal: false,
skipBackgroundNotify: true,
userContextId: pin.containerTabId || 0,
createLazyBrowser: true,
skipLoad: true,
noInitialLabel: false,
};
// Create and initialize the tab
let newTab = gBrowser.addTrustedTab(pin.url, params);
newTab.setAttribute('zenDefaultUserContextId', true);
// Set initial label/title
if (pin.title) {
gBrowser.setInitialTabTitle(newTab, pin.title);
}
// Set the icon if we have it cached
if (pin.iconUrl) {
gBrowser.setIcon(newTab, pin.iconUrl);
}
newTab.setAttribute('zen-pin-id', pin.uuid);
if (pin.workspaceUuid) {
newTab.setAttribute('zen-workspace-id', pin.workspaceUuid);
}
if (pin.isEssential) {
newTab.setAttribute('zen-essential', 'true');
}
if (pin.editedTitle) {
newTab.setAttribute('zen-has-static-label', 'true');
}
// Initialize browser state if needed
if (!newTab.linkedBrowser._remoteAutoRemoved) {
let state = {
entries: [
{
url: pin.url,
title: pin.title,
triggeringPrincipal_base64: E10SUtils.SERIALIZED_SYSTEMPRINCIPAL,
},
],
let params = {
skipAnimation: true,
allowInheritPrincipal: false,
skipBackgroundNotify: true,
userContextId: pin.containerTabId || 0,
image: pin.iconUrl,
createLazyBrowser: true,
skipLoad: true,
noInitialLabel: false,
};
SessionStore.setTabState(newTab, state);
}
// Create and initialize the tab
let newTab = gBrowser.addTrustedTab(pin.url, params);
newTab.setAttribute('zenDefaultUserContextId', true);
this.log(`Created new pinned tab for pin ${pin.uuid} (isEssential: ${pin.isEssential})`);
gBrowser.pinTab(newTab);
if (!pin.isEssential) {
const container = document.querySelector(
`#vertical-pinned-tabs-container .zen-workspace-tabs-section[zen-workspace-id="${pin.workspaceUuid}"]`
);
if (container) {
container.insertBefore(newTab, container.lastChild);
// Set initial label/title
if (pin.title) {
gBrowser.setInitialTabTitle(newTab, pin.title);
}
}
gBrowser.tabContainer._invalidateCachedTabs();
newTab.initialize();
if (!ZenWorkspaces.essentialShouldShowTab(newTab)) {
gBrowser.hideTab(newTab, undefined, true);
// Set the icon if we have it cached
if (pin.iconUrl) {
gBrowser.setIcon(newTab, pin.iconUrl);
}
newTab.setAttribute('zen-pin-id', pin.uuid);
if (pin.workspaceUuid) {
newTab.setAttribute('zen-workspace-id', pin.workspaceUuid);
}
if (pin.isEssential) {
newTab.setAttribute('zen-essential', 'true');
}
if (pin.editedTitle) {
newTab.setAttribute('zen-has-static-label', 'true');
}
// Initialize browser state if needed
if (!newTab.linkedBrowser._remoteAutoRemoved) {
let state = {
entries: [
{
url: pin.url,
title: pin.title,
triggeringPrincipal_base64: E10SUtils.SERIALIZED_SYSTEMPRINCIPAL,
},
],
userContextId: pin.containerTabId || 0,
image: pin.iconUrl,
};
SessionStore.setTabState(newTab, state);
}
this.log(`Created new pinned tab for pin ${pin.uuid} (isEssential: ${pin.isEssential})`);
gBrowser.pinTab(newTab);
if (!pin.isEssential) {
const container = document.querySelector(
`#vertical-pinned-tabs-container .zen-workspace-tabs-section[zen-workspace-id="${pin.workspaceUuid}"]`
);
if (container) {
container.insertBefore(newTab, container.lastChild);
}
}
gBrowser.tabContainer._invalidateCachedTabs();
newTab.initialize();
if (!ZenWorkspaces.essentialShouldShowTab(newTab)) {
gBrowser.hideTab(newTab, undefined, true);
}
} catch (ex) {
console.error('Failed to initialize pinned tabs:', ex);
}
}

View File

@@ -140,7 +140,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
_initializeEmptyTab() {
gBrowser._forZenEmptyTab = true;
this._emptyTab = gBrowser.addTrustedTab('about:blank', { inBackground: true });
this._emptyTab = gBrowser.addTrustedTab('about:blank', { inBackground: true, userContextId: 0 });
this._emptyTab.setAttribute('zen-empty-tab', 'true');
}
@@ -267,9 +267,9 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
// remove tab from list
tabs.splice(tabs.indexOf(tab), 1);
if (tab.pinned) {
pinnedSection.appendChild(tab);
pinnedSection.insertBefore(tab, pinnedSection.lastChild);
} else {
section.appendChild(tab);
section.insertBefore(tab, section.lastChild);
}
}
}
@@ -1805,6 +1805,16 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
// Fix ctrl+tab behavior. Note, we dont call it with "await" because we dont want to wait for it
this._fixCtrlTabBehavior();
// Bug: When updating from previous versions, we used to hide the tabs not used in the new workspace
// we now need to show them again
if (onInit) {
for (const tab of this.allStoredTabs) {
if (!tab.hasAttribute('zen-essential')) {
gBrowser.showTab(tab);
}
}
}
}
async _fixCtrlTabBehavior() {
@@ -2293,14 +2303,12 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}
}
switchIfNeeded(browser) {
return new Promise(async (resolve) => {
const tab = gBrowser.getTabForBrowser(browser);
const workspaceId = tab.getAttribute('zen-workspace-id');
if (!tab.hasAttribute('zen-essential') && workspaceId !== this.activeWorkspace) {
await this.changeWorkspace({ uuid: workspaceId });
}
resolve();
});
async switchIfNeeded(browser, i) {
const tab = gBrowser.getTabForBrowser(browser);
const workspaceId = tab.getAttribute('zen-workspace-id');
if (!tab.hasAttribute('zen-essential') && workspaceId !== this.activeWorkspace) {
await this.changeWorkspace({ uuid: workspaceId });
}
gBrowser.selectedTab = tab;
}
})();

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 334c041c1748564094c6a177bb24f146791d96d8..e301cc1df604e4a23fcf260d5952736f5b791803 100644
index 908743177d9f95e2e6549c689e7a493ca8668701..181c4819b052e444e56e75f1cb40b4bc299569fb 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -3848,6 +3848,7 @@ var SessionStoreInternal = {
@@ -27,3 +27,19 @@ index 334c041c1748564094c6a177bb24f146791d96d8..e301cc1df604e4a23fcf260d5952736f
continue;
}
let tabData = lazy.TabState.collect(tab, TAB_CUSTOM_VALUES.get(tab));
@@ -6042,6 +6043,15 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.
+ if (tabData.zenEssential) {
+ tab.setAttribute("zen-essential", "true");
+ }
+ if (tabData.zenIsEmpty) {
+ tab.setAttribute("zen-empty-tab", "true");
+ }
+ if (tabData.zenPinnedId) {
+ tab.setAttribute("zen-pin-id", tabData.zenPinnedId);
+ }
if (tabData.pinned) {
tabbrowser.pinTab(tab);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index d41c486c02a6f09dcff5741a59ad8b617294c481..efa900725f32d8606ba6d3bb8bff2d0dcb511e78 100644
index d41c486c02a6f09dcff5741a59ad8b617294c481..1c150fd8863335ee356601f7872c1fdc2086dcab 100644
--- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js
@@ -16,6 +16,7 @@
@@ -80,3 +80,12 @@ index d41c486c02a6f09dcff5741a59ad8b617294c481..efa900725f32d8606ba6d3bb8bff2d0d
}
on_dblclick(event) {
@@ -576,6 +590,8 @@
animate: true,
triggeringEvent: event,
});
+ } else if (this.hasAttribute('zen-essential')) {
+ gZenPinnedTabManager._onTabResetPinButton(event, this, 'reset');
}
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf32921591731291f8e9db 100644
index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..dd8fba935e26aa0f00b687f23b64935dfcf339fa 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -406,11 +406,52 @@
@@ -406,11 +406,50 @@
return this.tabContainer.visibleTabs;
}
@@ -38,9 +38,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
+ if (!tab.hasAttribute("zen-essential") && !tab.hasAttribute("zen-glance-tab")) {
+ break;
+ }
+ if (!tab.hidden) {
+ i += !tab.hasAttribute("zen-glance-tab");
+ }
+ i += !tab.hasAttribute("zen-glance-tab");
+ }
+ return i;
+ }
@@ -57,7 +55,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
}
return i;
}
@@ -807,7 +848,7 @@
@@ -807,7 +846,7 @@
this.showTab(aTab);
if (this.tabContainer.verticalMode) {
this._handleTabMove(aTab, () =>
@@ -66,7 +64,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
);
} else {
this.moveTabTo(aTab, this.pinnedTabCount, { forceStandaloneTab: true });
@@ -828,7 +869,7 @@
@@ -828,7 +867,7 @@
// the moving of a tab from the vertical pinned tabs container
// and back into arrowscrollbox.
aTab.removeAttribute("pinned");
@@ -75,7 +73,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
});
} else {
this.moveTabTo(aTab, this.pinnedTabCount - 1, {
@@ -1055,6 +1096,8 @@
@@ -1055,6 +1094,8 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
@@ -84,7 +82,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (
aIconURL &&
!aLoadingPrincipal &&
@@ -1065,6 +1108,9 @@
@@ -1065,6 +1106,9 @@
);
return;
}
@@ -94,7 +92,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL;
@@ -1310,6 +1356,7 @@
@@ -1310,6 +1354,7 @@
if (!this._previewMode) {
newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed();
@@ -102,7 +100,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -1462,6 +1509,9 @@
@@ -1462,6 +1507,9 @@
}
let activeEl = document.activeElement;
@@ -112,7 +110,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
// If focus is on the old tab, move it to the new tab.
if (activeEl == oldTab) {
newTab.focus();
@@ -1785,7 +1835,7 @@
@@ -1785,7 +1833,7 @@
}
_setTabLabel(aTab, aLabel, { beforeTabOpen, isContentTitle, isURL } = {}) {
@@ -121,7 +119,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
return false;
}
@@ -1888,7 +1938,7 @@
@@ -1888,7 +1936,7 @@
newIndex = this.selectedTab._tPos + 1;
}
@@ -130,7 +128,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
let browser;
if (targetTab) {
browser = this.getBrowserForTab(targetTab);
@@ -2222,7 +2272,8 @@
@@ -2222,7 +2270,8 @@
b.setAttribute("name", name);
}
@@ -140,7 +138,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
b.setAttribute("transparent", "true");
}
@@ -2387,7 +2438,7 @@
@@ -2387,7 +2436,7 @@
let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID();
@@ -149,7 +147,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary.
@@ -2446,8 +2497,8 @@
@@ -2446,8 +2495,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) {
@@ -160,7 +158,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
} else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
}
@@ -2679,6 +2730,12 @@
@@ -2679,6 +2728,12 @@
);
}
@@ -173,7 +171,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (!UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.start("browser.tabs.opening", "initting", window);
}
@@ -2742,6 +2799,12 @@
@@ -2742,6 +2797,12 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -186,7 +184,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (insertTab) {
// insert the tab into the tab container in the correct position
this._insertTabAtIndex(t, {
@@ -2885,6 +2948,9 @@
@@ -2885,6 +2946,9 @@
}
}
@@ -196,7 +194,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
// Additionally send pinned tab events
if (pinned) {
this._notifyPinnedStatus(t);
@@ -3403,6 +3469,24 @@
@@ -3403,6 +3467,24 @@
) {
tabWasReused = true;
tab = this.selectedTab;
@@ -221,7 +219,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (!tabData.pinned) {
this.unpinTab(tab);
} else {
@@ -3416,6 +3500,7 @@
@@ -3416,6 +3498,7 @@
restoreTabsLazily && !select && !tabData.pinned;
let url = "about:blank";
@@ -229,7 +227,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (tabData.entries?.length) {
let activeIndex = (tabData.index || tabData.entries.length) - 1;
// Ensure the index is in bounds.
@@ -3451,7 +3536,24 @@
@@ -3451,7 +3534,24 @@
skipLoad: true,
preferredRemoteType,
});
@@ -255,7 +253,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (select) {
tabToSelect = tab;
}
@@ -3464,8 +3566,8 @@
@@ -3464,8 +3564,8 @@
// inserted in the DOM. If the tab is not yet in the DOM,
// just insert it in the right place from the start.
if (!tab.parentNode) {
@@ -266,7 +264,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
tab.toggleAttribute("pinned", true);
this.tabContainer._invalidateCachedTabs();
// Then ensure all the tab open/pinning information is sent.
@@ -3729,7 +3831,7 @@
@@ -3729,7 +3829,7 @@
// Ensure we have an index if one was not provided.
if (typeof index != "number") {
// Move the new tab after another tab if needed, to the end otherwise.
@@ -275,7 +273,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (
!bulkOrderedOpen &&
((openerTab &&
@@ -3780,7 +3882,7 @@
@@ -3780,7 +3880,7 @@
}
/** @type {MozTabbrowserTab|undefined} */
@@ -284,7 +282,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
this.tabContainer._invalidateCachedTabs();
if (tabGroup) {
@@ -4095,6 +4197,9 @@
@@ -4095,6 +4195,9 @@
return;
}
@@ -294,7 +292,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
this.removeTabs(selectedTabs);
}
@@ -4427,6 +4532,7 @@
@@ -4427,6 +4530,7 @@
skipSessionStore,
} = {}
) {
@@ -302,7 +300,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.finish("browser.tabs.opening", window);
}
@@ -4443,6 +4549,12 @@
@@ -4443,6 +4547,12 @@
TelemetryStopwatch.start("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
}
@@ -315,7 +313,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
// Handle requests for synchronously removing an already
// asynchronously closing tab.
if (!animate && aTab.closing) {
@@ -4457,7 +4569,9 @@
@@ -4457,7 +4567,9 @@
// frame created for it (for example, by updating the visually selected
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
@@ -326,7 +324,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -4471,7 +4585,6 @@
@@ -4471,7 +4583,6 @@
TelemetryStopwatch.cancel("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
return;
}
@@ -334,7 +332,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
let lockTabSizing =
!this.tabContainer.verticalMode &&
!aTab.pinned &&
@@ -4610,14 +4723,14 @@
@@ -4610,14 +4721,14 @@
!!this.tabsInCollapsedTabGroups.length;
if (
aTab.visible &&
@@ -351,7 +349,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -4641,6 +4754,7 @@
@@ -4641,6 +4752,7 @@
newTab = true;
}
@@ -359,7 +357,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -4681,9 +4795,7 @@
@@ -4681,9 +4793,7 @@
aTab._mouseleave();
if (newTab) {
@@ -370,7 +368,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
} else {
TabBarVisibility.update();
}
@@ -4812,6 +4924,8 @@
@@ -4812,6 +4922,8 @@
this.tabs[i]._tPos = i;
}
@@ -379,7 +377,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (!this._windowIsClosing) {
if (wasPinned) {
this.tabContainer._positionPinnedTabs();
@@ -5025,7 +5139,7 @@
@@ -5025,7 +5137,7 @@
!excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) {
@@ -388,7 +386,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
}
// Try to find a remaining tab that comes after the given tab
@@ -5047,7 +5161,7 @@
@@ -5047,7 +5159,7 @@
}
if (tab) {
@@ -397,7 +395,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
}
// If no qualifying visible tab was found, see if there is a tab in
@@ -5465,10 +5579,10 @@
@@ -5465,10 +5577,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -410,28 +408,28 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -5706,9 +5820,9 @@
@@ -5706,9 +5818,9 @@
// Don't allow mixing pinned and unpinned tabs.
if (aTab.pinned) {
- aIndex = Math.min(aIndex, this.pinnedTabCount - 1);
+ aIndex = Math.min(aIndex, (aTab.hasAttribute('zen-essential') ? this._numZenEssentials : this._numVisiblePinTabsWithoutGlance) - 1);
+ aIndex = aTab.hasAttribute('zen-essential') ? Math.min(aIndex, this._numZenEssentials) : Math.min(aIndex, this._numVisiblePinTabs - 1);
} else {
- aIndex = Math.max(aIndex, this.pinnedTabCount);
+ aIndex = Math.max(aIndex, this._numVisiblePinTabsWithoutGlance);
+ aIndex = Math.max(aIndex, this._numVisiblePinTabsWithoutGlance + this._numZenEssentials);
}
if (aTab._tPos == aIndex) {
return;
@@ -5717,7 +5831,7 @@
@@ -5717,7 +5829,7 @@
this._lastRelatedTabMap = new WeakMap();
this._handleTabMove(aTab, () => {
- let neighbor = this.tabs[aIndex];
+ let neighbor = this.tabs.filter(tab => !tab.hasAttribute("zen-glance-tab"))[aIndex];
+ let neighbor = this.tabs.filter(tab => !tab.hasAttribute("zen-glance-tab") && !tab.hasAttribute("zen-empty-tab"))[aIndex];
if (forceStandaloneTab && neighbor.group) {
neighbor = neighbor.group;
}
@@ -5802,7 +5916,7 @@
@@ -5802,7 +5914,7 @@
createLazyBrowser,
};
@@ -440,7 +438,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
if (aIndex < numPinned || (aTab.pinned && aIndex == numPinned)) {
params.pinned = true;
}
@@ -7443,6 +7557,7 @@
@@ -7443,6 +7555,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
@@ -448,7 +446,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
gBrowser.syncThrobberAnimations(this.mTab);
@@ -8411,7 +8526,7 @@ var TabContextMenu = {
@@ -8411,7 +8524,7 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !multiselectionContext;
@@ -457,7 +455,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
// Move Tab items
let contextMoveTabOptions = document.getElementById(
"context_moveTabOptions"
@@ -8444,7 +8559,7 @@ var TabContextMenu = {
@@ -8444,7 +8557,7 @@ var TabContextMenu = {
let contextMoveTabToStart = document.getElementById("context_moveToStart");
let isFirstTab =
tabsToMove[0] == visibleTabs[0] ||
@@ -466,7 +464,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
contextMoveTabToStart.disabled = isFirstTab && allSelectedTabsAdjacent;
document.getElementById("context_openTabInWindow").disabled =
@@ -8677,6 +8792,7 @@ var TabContextMenu = {
@@ -8677,6 +8790,7 @@ var TabContextMenu = {
if (this.contextTab.multiselected) {
gBrowser.removeMultiSelectedTabs();
} else {

View File

@@ -0,0 +1,22 @@
diff --git a/toolkit/profile/nsToolkitProfileService.cpp b/toolkit/profile/nsToolkitProfileService.cpp
index b5510497e20b6d989c9dd8fff0c04b585bdc75bd..25fd837240fd849fd26b4cb8b8172423f6f7d8fc 100644
--- a/toolkit/profile/nsToolkitProfileService.cpp
+++ b/toolkit/profile/nsToolkitProfileService.cpp
@@ -82,6 +82,8 @@ using namespace mozilla;
#define INSTALL_PREFIX_LENGTH 7
#define STORE_ID_PREF "toolkit.profiles.storeID"
+#include "zenToolkitProfileServiceDefaultOverride.h"
+
struct KeyValue {
KeyValue(const char* aKey, const char* aValue) : key(aKey), value(aValue) {}
@@ -1409,7 +1411,7 @@ nsresult nsToolkitProfileService::CreateDefaultProfile(
if (mUseDevEditionProfile) {
name.AssignLiteral(DEV_EDITION_NAME);
} else if (mUseDedicatedProfile) {
- name.AppendPrintf("default-%s", mUpdateChannel.get());
+ name.AppendPrintf("Default (%s)", mUpdateChannel.get());
} else {
name.AssignLiteral(DEFAULT_NAME);
}

View File

@@ -19,7 +19,7 @@
"brandShortName": "Zen",
"brandFullName": "Zen Browser",
"release": {
"displayVersion": "1.8b",
"displayVersion": "1.8.1b",
"github": {
"repo": "zen-browser/desktop"
},
@@ -39,7 +39,7 @@
"brandShortName": "Twilight",
"brandFullName": "Zen Twilight",
"release": {
"displayVersion": "1.8t",
"displayVersion": "1.8.1t",
"github": {
"repo": "zen-browser/desktop"
}