Compare commits

..

37 Commits
1.8b ... 1.8.2b

Author SHA1 Message Date
mr. m
dc1c166ac2 Make sure to hide the URL bar when hiding it on multiple toolbar compact mode 2025-02-25 22:01:08 +01:00
mr. m
279849debe Make sure to properly align the urlbar when it's not floating on compact mode 2025-02-25 21:58:15 +01:00
mr. m
07c5474cf2 Increased margins on reset tab URL 2025-02-25 18:42:31 +01:00
mr. m
bd5fc861df For security reasons, dont trim the URL bar when it's not explicitly https 2025-02-25 18:15:44 +01:00
mr. m
6988060269 Ignore localhost URLs when trimming the URL in collapsed mode 2025-02-25 18:04:23 +01:00
mr. m
cf6ed8c382 Removed flatpak artifacts once build and commits has been done 2025-02-25 17:53:43 +01:00
mr. m
d536f3e93c Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-02-25 17:46:27 +01:00
mr. m
cc2262dbaf Common bug fixes 2025-02-25 17:46:20 +01:00
mr. m
f3fa0eb849 Merge pull request #5730 from ifdskfjsdkfjsd/dev
Native English proofread on README
2025-02-25 16:58:41 +01:00
ifdskfjsdkfjsd
7c9bca1325 Native English proofread
Signed-off-by: ifdskfjsdkfjsd <192259704+ifdskfjsdkfjsd@users.noreply.github.com>
2025-02-25 10:40:23 -05:00
mr. m
493f299cce Enabled compilation with sccache and disable rust incremental builds (formatted from 5d7248d4c7) 2025-02-25 15:24:41 +01:00
mr. m
5d7248d4c7 Enabled compilation with sccache and disable rust incremental builds 2025-02-25 15:23:15 +01:00
mr. m
d9e8fb3469 Disabled sccache temporarilly 2025-02-25 13:39:41 +01:00
mr. m
a5051e116a FIxed opening bookmarks not inheriting 2025-02-25 13:36:22 +01:00
mr. m
3358d0e3d7 Fixed tabs being reordered 2025-02-25 13:04:15 +01:00
mr. m
ca183c7de6 Common fixes and optimizations 2025-02-25 12:30:33 +01:00
mr. m
b39961e43e Fixed reordering tabs when having essentials 2025-02-25 09:07:22 +01:00
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
24 changed files with 290 additions and 214 deletions

View File

@@ -693,6 +693,7 @@ jobs:
rm -rf zen-browser
rm -rf archive.tar
rm -rf zen.linux-x86_64.tar.xz
rm -rf zen.linux-aarch64.tar.xz
- name: Upload Flatpak manifest
uses: actions/upload-artifact@v4

View File

@@ -26,6 +26,11 @@ jobs:
fail-fast: false
matrix:
arch: [x86_64, aarch64]
env:
SCCACHE_GHA_ENABLED: 'true'
CARGO_TERM_COLOR: always
RUSTC_WRAPPER: 'sccache'
CARGO_INCREMENTAL: 0
name: Build Linux - ${{ matrix.arch }}
steps:
@@ -45,6 +50,11 @@ jobs:
with:
node-version-file: '.nvmrc'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@main
with:
disable_annotations: true
- name: Setup Git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
@@ -57,30 +67,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

View File

@@ -25,7 +25,11 @@ jobs:
fail-fast: false
matrix:
arch: [x86_64, aarch64]
env:
SCCACHE_GHA_ENABLED: 'true'
CARGO_TERM_COLOR: always
RUSTC_WRAPPER: 'sccache'
CARGO_INCREMENTAL: 0
steps:
- name: Checkout repository
uses: actions/checkout@v4
@@ -38,6 +42,11 @@ jobs:
with:
node-version-file: '.nvmrc'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@main
with:
disable_annotations: true
- name: Setup Python
uses: actions/setup-python@v5
# note: This will use the version defined in '.python-version' by default
@@ -50,7 +59,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

@@ -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,11 @@ 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'
CARGO_INCREMENTAL: 0
strategy:
fail-fast: false
matrix:
@@ -52,6 +56,11 @@ jobs:
with:
node-version-file: '.nvmrc'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@main
with:
disable_annotations: true
- name: Setup Git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
@@ -79,13 +88,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: |

View File

@@ -28,9 +28,9 @@
## 🖥️ Compatibility
Zen is currently built using firefox version `135.0.1`! 🚀
Zen is currently built using Firefox version `135.0.1`! 🚀
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using firefox version `RC 135.0.1`!
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 135.0.1`!
- Check out the latest [release notes](https://zen-browser.app/release-notes)!
- Part of our mission is to keep Zen up-to-date with the latest version of Firefox, so you can enjoy the latest features and security updates!
@@ -40,11 +40,11 @@ Zen is an open-source project, and we welcome contributions from the community!
### Issue metrics
We keep track of how many issues are closed at the end of the month in [docs/issue-metrics](./docs/issue-metrics). This is to keep track of how many issues are being closed, because who doesn't like to see progress? 📈
We keep track of how many issues are closed at the end of the month in [docs/issue-metrics](./docs/issue-metrics). We use this to keep track of our issues and see our progress! 📈
### Versioning
Zen uses [Semantic Versioning](https://semver.org/) for versioning. Meaning, versions are displayed as `a.bc.d` where:
Zen uses [Semantic Versioning](https://semver.org/), meaning versions are displayed as `a.bc.d` where:
- `a` is the major version
- `b` is the minor version
@@ -67,7 +67,7 @@ Zen is built with performance in mind, and we have optimized the browser to be a
Zen is available for Linux, macOS, and Windows. You can download the latest version from the official website at [zen-browser.app](https://zen-browser.app/download), or from the [GitHub Releases](https://github.com/zen-browser/desktop/releases) page.
If you dont see your OS listed below, that's because we already have it in our [downloads page](https://zen-browser.app/download)! Make sure to check it out!
If you don't see your OS listed below, that's because we already have it in our [downloads page](https://zen-browser.app/download)! Make sure to check it out!
#### Windows
@@ -117,7 +117,7 @@ Some components used by @zen-browser as an attempt to make firefox forks a bette
#### `Run Locally`
In order to download and run zen locally, please follow [these instructions](https://docs.zen-browser.app/building).
In order to download and run Zen locally, please follow [these instructions](https://docs.zen-browser.app/building).
#### `Special Thanks`
@@ -133,10 +133,10 @@ Zen couldn't be in its current state without the help of these amazing projects!
### 🖥️ Comparison with other browsers
Thanks everyone for making zen stand out among these giants!
Thanks everyone for making Zen stand out among these giants!
[![Star History Chart](https://api.star-history.com/svg?repos=zen-browser/desktop,chromium/chromium,brave/brave-browser&type=Date)](https://star-history.com/#zen-browser/desktop&chromium/chromium&brave/brave-browser&Date)
## 📄 License
Zen browser is under the [MPL LICENSE](./LICENSE). All the code is open-source and free to use! Attributions are appreciated but not required.
Zen browser is under the [MPL LICENSE](./LICENSE). All the code is open-source and free to use! Attribution is appreciated but not required.

View File

@@ -25,10 +25,16 @@ 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
ac_add_options --enable-bootstrap
ac_add_options --enable-bootstrap=-sccache
ac_add_options --enable-release
ac_add_options --disable-debug

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

@@ -220,7 +220,7 @@ var gZenUIManager = {
urlbarTrim(aURL) {
if (gZenVerticalTabsManager._hasSetSingleToolbar) {
let url = BrowserUIUtils.removeSingleTrailingSlashFromURL(aURL);
return url.startsWith('http://') || url.startsWith('https://') ? url.split('/')[2] : url;
return url.startsWith('https://') ? url.split('/')[2] : url;
}
return BrowserUIUtils.trimURL(aURL);
},

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

@@ -95,6 +95,7 @@
position: relative;
background: var(--zen-dialog-background);
border: 1px solid var(--zen-colors-border-contrast);
width: calc(100% - var(--zen-toolbox-padding));
:root[zen-single-toolbar='true'] {
padding-top: 0 !important;
@@ -312,8 +313,7 @@
}
& #urlbar {
transform: translateY(-50%);
transition: transform 0.1s ease-in-out;
opacity: 0;
}
@media (-moz-bool-pref: 'zen.view.compact.color-toolbar') {
@@ -336,10 +336,6 @@
overflow: initial;
max-height: unset;
& #urlbar {
transform: translateY(0);
}
&::before {
content: '';
position: absolute;
@@ -353,6 +349,15 @@
opacity: var(--zen-grainy-background-opacity, 0);
mix-blend-mode: overlay;
}
& #urlbar {
opacity: 1;
}
& #urlbar[breakout-extend='true']:not([zen-floating-urlbar='true']) {
top: 2px !important;
opacity: 1;
}
}
}
}

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

@@ -847,8 +847,8 @@
position: relative;
height: calc(100% - var(--tab-block-margin) * 2);
margin-left: calc(-1 * var(--tab-inline-padding) + var(--tab-block-margin));
margin-right: 4px;
padding: 0 calc(var(--toolbarbutton-inner-padding)) 0 calc(var(--toolbarbutton-inner-padding) / 4 + var(--tab-inline-padding) - 2px);
margin-right: 8px;
padding: 0 calc(var(--toolbarbutton-inner-padding) - 2px) 0 calc(var(--toolbarbutton-inner-padding) / 4 + var(--tab-inline-padding) - 2px);
border-radius: 0;
border-top-left-radius: var(--border-radius-medium);
width: unset;
@@ -872,10 +872,10 @@
height: 16px;
background: light-dark(rgba(88, 79, 79, 0.02), rgba(255, 255, 255, 0.3));
position: absolute;
right: calc(var(--tab-inline-padding) / 2 - 1px);
right: 0;
top: 50%;
border-radius: 2px;
transform: rotate(10deg) translateY(-50%);
transform: rotate(15deg) translateY(-50%);
}
&:hover::after {

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

@@ -153,7 +153,8 @@ var gZenCompactModeManager = {
animateCompactMode() {
this._animating = true;
const isCompactMode = this.preference;
const canHideSidebar = Services.prefs.getBoolPref('zen.view.compact.hide-tabbar');
const canHideSidebar =
Services.prefs.getBoolPref('zen.view.compact.hide-tabbar') || gZenVerticalTabsManager._hasSetSingleToolbar;
const canAnimate =
lazyCompactMode.COMPACT_MODE_CAN_ANIMATE_SIDEBAR &&
!this.sidebar.hasAttribute('zen-user-show') &&

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.nextSibling);
} 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() {
@@ -1989,7 +1999,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
const contaienr = document.querySelector(
`#vertical-pinned-tabs-container .zen-workspace-tabs-section[zen-workspace-id="${workspaceId}"]`
);
contaienr.insertBefore(tab, contaienr.firstChild);
contaienr.insertBefore(tab, contaienr.lastChild);
changed = true;
}
if (changed) {
@@ -2293,14 +2303,25 @@ 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;
}
getDefaultContainer() {
if (!this.workspaceEnabled) {
return 0;
}
const workspaces = this._workspaceCache;
if (!workspaces) {
return 0;
}
const activeWorkspace = this.activeWorkspace;
const workspace = workspaces.workspaces.find((workspace) => workspace.uuid === activeWorkspace);
return workspace.containerTabId;
}
})();

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/places/PlacesUIUtils.sys.mjs b/browser/components/places/PlacesUIUtils.sys.mjs
index 0f79ba5dd42116d626445b86f6b24731d2fa8aad..76d692db1731e84b28d9035b03e34c176c12bd23 100644
index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..4d27f7fc108ca76e071707a737209bf5ea4ea07e 100644
--- a/browser/components/places/PlacesUIUtils.sys.mjs
+++ b/browser/components/places/PlacesUIUtils.sys.mjs
@@ -58,6 +58,7 @@ class BookmarkState {
@@ -157,3 +157,12 @@ index 0f79ba5dd42116d626445b86f6b24731d2fa8aad..76d692db1731e84b28d9035b03e34c17
/**
* Append transactions to update tags by given information.
*
@@ -902,7 +1011,7 @@ export var PlacesUIUtils = {
aNode,
aWhere,
aWindow,
- { aPrivate = false, userContextId = 0 } = {}
+ { aPrivate = false, userContextId = aWindow.ZenWorkspaces.getDefaultContainer() } = {}
) {
if (
aNode &&

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..8e902dcb3792c75238ac13a8bf9199b34451aa51 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') && !event.target.classList.contains("tab-icon-overlay")) {
+ 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..20c92611723587e4eeed5889b2b1741d86368263 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;
}
@@ -19,20 +19,18 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
+ return i;
+ }
+
+ get _numVisiblePinTabsWithoutGlance() {
+ get _numZenEssentials() {
+ let i = 0;
+ for (let tab of this.tabs) {
+ if (!tab.pinned) {
+ if (!tab.hasAttribute("zen-essential") && !tab.hasAttribute("zen-glance-tab")) {
+ break;
+ }
+ if (!tab.hidden && !tab.hasAttribute("zen-glance-tab")) {
+ i++;
+ }
+ i += !tab.hasAttribute("zen-glance-tab");
+ }
+ return i;
+ }
+
+ get _numZenEssentials() {
+ get _numZenVisibleEssentials() {
+ let i = 0;
+ for (let tab of this.tabs) {
+ if (!tab.hasAttribute("zen-essential") && !tab.hasAttribute("zen-glance-tab")) {
@@ -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,25 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..04056ab93316968babcf329215917312
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -5706,9 +5820,9 @@
@@ -5706,7 +5818,7 @@
// 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 - 1) : Math.min(aIndex, this.pinnedTabCount - 1);
} else {
- aIndex = Math.max(aIndex, this.pinnedTabCount);
+ aIndex = Math.max(aIndex, this._numVisiblePinTabsWithoutGlance);
aIndex = Math.max(aIndex, this.pinnedTabCount);
}
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 +435,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 +443,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 +452,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 +461,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

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2b437ce20 100644
index 8aeb244ffca9f48661805f5b7d860b5896055562..8300aa0533cb0037be26766acf1d82af295c7369 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -94,7 +94,7 @@
@@ -33,7 +33,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
// 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.visibleTabs.slice(0, gBrowser._numVisiblePinTabs);
+ let pinnedTabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(0, gBrowser._numZenVisibleEssentials);
let tabsPerRow = 0;
let position = 0;
for (let pinnedTab of pinnedTabs) {
@@ -325,7 +325,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..2b988219f279f7b6e1178518e436a7f2
}
- let tabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount);
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(0, gBrowser._numVisiblePinTabs);
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(0, gBrowser._numZenVisibleEssentials);
let directionX = screenX > dragData.animLastScreenX;
let directionY = screenY > dragData.animLastScreenY;

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.2b",
"github": {
"repo": "zen-browser/desktop"
},
@@ -39,7 +39,7 @@
"brandShortName": "Twilight",
"brandFullName": "Zen Twilight",
"release": {
"displayVersion": "1.8t",
"displayVersion": "1.8.2t",
"github": {
"repo": "zen-browser/desktop"
}