mirror of
https://github.com/zen-browser/desktop.git
synced 2025-12-22 06:15:37 +00:00
Compare commits
6 Commits
window-syn
...
1.17.15b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53d223b9c5 | ||
|
|
cf4c754e57 | ||
|
|
3e5c355543 | ||
|
|
59072ee932 | ||
|
|
ae2077ab7c | ||
|
|
02e0cd8717 |
1
locales/language-maps
Normal file
1
locales/language-maps
Normal file
@@ -0,0 +1 @@
|
|||||||
|
nb:nb-NO
|
||||||
8
package-lock.json
generated
8
package-lock.json
generated
@@ -9,7 +9,7 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@zen-browser/surfer": "^1.12.0"
|
"@zen-browser/surfer": "^1.12.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/preset-typescript": "^7.27.0",
|
"@babel/preset-typescript": "^7.27.0",
|
||||||
@@ -1115,9 +1115,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@zen-browser/surfer": {
|
"node_modules/@zen-browser/surfer": {
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.12.1.tgz",
|
||||||
"integrity": "sha512-I5nxDgGpFGtdOAC9DZkoQp9GJ4cAqCW+0p0DoQRjW/jdnQJUH20ygvPyPr+sgjXISPFclYX+KrVoT2kJqTdlTw==",
|
"integrity": "sha512-0KoJtT9awH0ZxC1G5i3gppL8SEkgqeOqxAYY7B5WOgaPv4uUyHfj8btQnmLasA7051iVn9EaCpUDOHV1JDs9pg==",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@resvg/resvg-js": "^1.4.0",
|
"@resvg/resvg-js": "^1.4.0",
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"sync:raw": "surfer update",
|
"sync:raw": "surfer update",
|
||||||
"sync:rc": "python3 scripts/update_ff.py --rc",
|
"sync:rc": "python3 scripts/update_ff.py --rc",
|
||||||
"sync:l10n": "python3 scripts/update_ff.py --just-l10n",
|
"sync:l10n": "python3 scripts/update_ff.py --just-l10n",
|
||||||
"pretty": "prettier . --write --cache && autopep8 -r --in-place scripts/ src/",
|
"pretty": "prettier . --write --cache && autopep8 -r --in-place scripts/ src/ --exclude */tests/*",
|
||||||
"lint": "npx eslint src/ && prettier . --check --cache",
|
"lint": "npx eslint src/ && prettier . --check --cache",
|
||||||
"lint:fix": "npm run pretty && npx eslint src/ --fix",
|
"lint:fix": "npm run pretty && npx eslint src/ --fix",
|
||||||
"prepare": "husky",
|
"prepare": "husky",
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/zen-browser/desktop#readme",
|
"homepage": "https://github.com/zen-browser/desktop#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@zen-browser/surfer": "^1.12.0"
|
"@zen-browser/surfer": "^1.12.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/preset-typescript": "^7.27.0",
|
"@babel/preset-typescript": "^7.27.0",
|
||||||
|
|||||||
@@ -10,13 +10,32 @@ import sys
|
|||||||
BROWSER_LOCALES = "engine/browser/locales"
|
BROWSER_LOCALES = "engine/browser/locales"
|
||||||
|
|
||||||
|
|
||||||
|
def get_language_code(lang_id: str) -> str:
|
||||||
|
"""
|
||||||
|
Retrieves the language code from the language-maps file.
|
||||||
|
|
||||||
|
:param lang_id: Language identifier (e.g., 'nb', 'fr', etc.)
|
||||||
|
:return: Corresponding language code (e.g., 'nb-NO', 'fr-FR', etc.)
|
||||||
|
"""
|
||||||
|
language_maps_path = os.path.join("locales", "language-maps")
|
||||||
|
if not os.path.exists(language_maps_path):
|
||||||
|
return lang_id # Return the original if the file doesn't exist
|
||||||
|
|
||||||
|
with open(language_maps_path, "r", encoding="utf-8") as f:
|
||||||
|
for line in f:
|
||||||
|
if line.startswith(f"{lang_id}:"):
|
||||||
|
return line.split(":", 1)[1].strip()
|
||||||
|
return lang_id # Return the original if no mapping is found
|
||||||
|
|
||||||
|
|
||||||
def copy_browser_locales(lang_id: str):
|
def copy_browser_locales(lang_id: str):
|
||||||
"""
|
"""
|
||||||
Copies language pack files to the specified browser locale directory.
|
Copies language pack files to the specified browser locale directory.
|
||||||
|
|
||||||
:param lang_id: Language identifier (e.g., 'en-US', 'fr', etc.)
|
:param lang_id: Language identifier (e.g., 'en-US', 'fr', etc.)
|
||||||
"""
|
"""
|
||||||
lang_path = os.path.join(BROWSER_LOCALES, lang_id)
|
lang_code = get_language_code(lang_id)
|
||||||
|
lang_path = os.path.join(BROWSER_LOCALES, lang_code)
|
||||||
|
|
||||||
# Create the directory for the language pack if it doesn't exist
|
# Create the directory for the language pack if it doesn't exist
|
||||||
os.makedirs(lang_path, exist_ok=True)
|
os.makedirs(lang_path, exist_ok=True)
|
||||||
|
|||||||
@@ -39,10 +39,20 @@ fi
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
update_language() {
|
get_code_for_language() {
|
||||||
|
# Get the language code from locales/language-maps
|
||||||
langId=$1
|
langId=$1
|
||||||
|
code=$(grep "^$langId:" ./locales/language-maps | cut -d':' -f2)
|
||||||
|
if [ -z "$code" ]; then
|
||||||
|
code=$langId
|
||||||
|
fi
|
||||||
|
echo $code
|
||||||
|
}
|
||||||
|
|
||||||
|
update_language() {
|
||||||
|
langId=$(get_code_for_language $1)
|
||||||
cd ./locales
|
cd ./locales
|
||||||
cd $langId
|
cd $1
|
||||||
|
|
||||||
echo "Updating $langId"
|
echo "Updating $langId"
|
||||||
# move the contents from ../firefox-l10n/$langId to ./locales/$langId
|
# move the contents from ../firefox-l10n/$langId to ./locales/$langId
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
|
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
|
||||||
index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..61bfa1b530c407dd1236543f785eb22176c60c4e 100644
|
index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..6894412f5dcf632c1d4c3dabeffabf9e5dd96222 100644
|
||||||
--- a/browser/components/sessionstore/SessionStore.sys.mjs
|
--- a/browser/components/sessionstore/SessionStore.sys.mjs
|
||||||
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
|
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
|
||||||
@@ -127,6 +127,8 @@ const TAB_EVENTS = [
|
@@ -127,6 +127,8 @@ const TAB_EVENTS = [
|
||||||
@@ -122,7 +122,15 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..61bfa1b530c407dd1236543f785eb221
|
|||||||
selectTab = Math.min(selectTab, winData.tabs.length);
|
selectTab = Math.min(selectTab, winData.tabs.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5809,6 +5820,8 @@ var SessionStoreInternal = {
|
@@ -5788,6 +5799,7 @@ var SessionStoreInternal = {
|
||||||
|
if (overwriteTabs) {
|
||||||
|
for (let i = tabbrowser.browsers.length - 1; i >= 0; i--) {
|
||||||
|
if (!tabbrowser.tabs[i].selected) {
|
||||||
|
+ aWindow.gZenWorkspaces._shouldOverrideTabs = true;
|
||||||
|
tabbrowser.removeTab(tabbrowser.tabs[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -5809,6 +5821,8 @@ var SessionStoreInternal = {
|
||||||
winData.tabs,
|
winData.tabs,
|
||||||
winData.groups ?? []
|
winData.groups ?? []
|
||||||
);
|
);
|
||||||
@@ -131,7 +139,7 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..61bfa1b530c407dd1236543f785eb221
|
|||||||
this._log.debug(
|
this._log.debug(
|
||||||
`restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs`
|
`restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs`
|
||||||
);
|
);
|
||||||
@@ -6372,6 +6385,25 @@ var SessionStoreInternal = {
|
@@ -6372,6 +6386,25 @@ var SessionStoreInternal = {
|
||||||
|
|
||||||
// Most of tabData has been restored, now continue with restoring
|
// Most of tabData has been restored, now continue with restoring
|
||||||
// attributes that may trigger external events.
|
// attributes that may trigger external events.
|
||||||
@@ -157,7 +165,7 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..61bfa1b530c407dd1236543f785eb221
|
|||||||
|
|
||||||
if (tabData.pinned) {
|
if (tabData.pinned) {
|
||||||
tabbrowser.pinTab(tab);
|
tabbrowser.pinTab(tab);
|
||||||
@@ -7290,7 +7322,7 @@ var SessionStoreInternal = {
|
@@ -7290,7 +7323,7 @@ var SessionStoreInternal = {
|
||||||
|
|
||||||
let groupsToSave = new Map();
|
let groupsToSave = new Map();
|
||||||
for (let tIndex = 0; tIndex < window.tabs.length; ) {
|
for (let tIndex = 0; tIndex < window.tabs.length; ) {
|
||||||
@@ -166,7 +174,7 @@ index 2c2f43bf743ef458b378e85e9ed44a971711e1d9..61bfa1b530c407dd1236543f785eb221
|
|||||||
// Adjust window.selected
|
// Adjust window.selected
|
||||||
if (tIndex + 1 < window.selected) {
|
if (tIndex + 1 < window.selected) {
|
||||||
window.selected -= 1;
|
window.selected -= 1;
|
||||||
@@ -7305,7 +7337,7 @@ var SessionStoreInternal = {
|
@@ -7305,7 +7338,7 @@ var SessionStoreInternal = {
|
||||||
);
|
);
|
||||||
// We don't want to increment tIndex here.
|
// We don't want to increment tIndex here.
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -1021,14 +1021,20 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature {
|
|||||||
let tab = window.gBrowser.getTabForBrowser(browser);
|
let tab = window.gBrowser.getTabForBrowser(browser);
|
||||||
const ignoreSplit = tab.hasAttribute('zen-dont-split-glance');
|
const ignoreSplit = tab.hasAttribute('zen-dont-split-glance');
|
||||||
tab.removeAttribute('zen-dont-split-glance');
|
tab.removeAttribute('zen-dont-split-glance');
|
||||||
|
let isGlanceTab = false;
|
||||||
if (tab.hasAttribute('zen-glance-tab') && !ignoreSplit) {
|
if (tab.hasAttribute('zen-glance-tab') && !ignoreSplit) {
|
||||||
// Extract from parent node so we are not selecting the wrong (current) tab
|
// Extract from parent node so we are not selecting the wrong (current) tab
|
||||||
tab = tab.parentNode.closest('.tabbrowser-tab');
|
tab = tab.parentNode.closest('.tabbrowser-tab');
|
||||||
|
isGlanceTab = true;
|
||||||
console.assert(tab, 'Tab not found for zen-glance-tab');
|
console.assert(tab, 'Tab not found for zen-glance-tab');
|
||||||
}
|
}
|
||||||
if (tab) {
|
if (tab) {
|
||||||
this.updateSplitView(tab);
|
this.updateSplitView(tab);
|
||||||
tab.linkedBrowser.docShellIsActive = true;
|
tab.linkedBrowser.docShellIsActive = true;
|
||||||
|
if (isGlanceTab) {
|
||||||
|
// See issues https://github.com/zen-browser/desktop/issues/11641
|
||||||
|
this.removeSplitters();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this._maybeRemoveFakeBrowser();
|
this._maybeRemoveFakeBrowser();
|
||||||
{
|
{
|
||||||
@@ -1168,7 +1174,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature {
|
|||||||
const oldView = this.currentView;
|
const oldView = this.currentView;
|
||||||
const newView = this._data.findIndex((group) => group.tabs.includes(tab));
|
const newView = this._data.findIndex((group) => group.tabs.includes(tab));
|
||||||
|
|
||||||
if (oldView === newView) return;
|
if (newView === oldView && oldView < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (newView < 0 && oldView >= 0) {
|
if (newView < 0 && oldView >= 0) {
|
||||||
this.deactivateCurrentSplitView();
|
this.deactivateCurrentSplitView();
|
||||||
return;
|
return;
|
||||||
@@ -1955,40 +1963,43 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature {
|
|||||||
this._data.push(data);
|
this._data.push(data);
|
||||||
this.activateSplitView(data);
|
this.activateSplitView(data);
|
||||||
gBrowser.selectedTab = emptyTab;
|
gBrowser.selectedTab = emptyTab;
|
||||||
window.addEventListener(
|
|
||||||
'ZenURLBarClosed',
|
|
||||||
(event) => {
|
|
||||||
const { onElementPicked, onSwitch } = event.detail;
|
|
||||||
const groupIndex = this._data.findIndex((group) => group.tabs.includes(emptyTab));
|
|
||||||
const newSelectedTab = gBrowser.selectedTab;
|
|
||||||
const cleanup = () => {
|
|
||||||
this.removeTabFromGroup(emptyTab, groupIndex, { changeTab: !onSwitch, forUnsplit: true });
|
|
||||||
const command = document.getElementById('cmd_zenNewEmptySplit');
|
|
||||||
command.removeAttribute('disabled');
|
|
||||||
};
|
|
||||||
if (onElementPicked) {
|
|
||||||
if (
|
|
||||||
newSelectedTab === emptyTab ||
|
|
||||||
newSelectedTab === selectedTab ||
|
|
||||||
selectedTab.getAttribute('zen-workspace-id') !==
|
|
||||||
newSelectedTab.getAttribute('zen-workspace-id')
|
|
||||||
) {
|
|
||||||
cleanup();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.removeTabFromGroup(emptyTab, groupIndex, { forUnsplit: true });
|
|
||||||
gBrowser.selectedTab = selectedTab;
|
|
||||||
this.resetTabState(emptyTab, false);
|
|
||||||
this.splitTabs([selectedTab, newSelectedTab], 'grid', 1);
|
|
||||||
} else {
|
|
||||||
cleanup();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ once: true }
|
|
||||||
);
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
window.addEventListener(
|
||||||
|
'ZenURLBarClosed',
|
||||||
|
(event) => {
|
||||||
|
const { onElementPicked, onSwitch } = event.detail;
|
||||||
|
const groupIndex = this._data.findIndex((group) => group.tabs.includes(emptyTab));
|
||||||
|
const newSelectedTab = gBrowser.selectedTab;
|
||||||
|
const cleanup = () => {
|
||||||
|
this.removeTabFromGroup(emptyTab, groupIndex, {
|
||||||
|
changeTab: !onSwitch,
|
||||||
|
forUnsplit: true,
|
||||||
|
});
|
||||||
|
const command = document.getElementById('cmd_zenNewEmptySplit');
|
||||||
|
command.removeAttribute('disabled');
|
||||||
|
};
|
||||||
|
if (onElementPicked) {
|
||||||
|
if (
|
||||||
|
newSelectedTab === emptyTab ||
|
||||||
|
newSelectedTab === selectedTab ||
|
||||||
|
selectedTab.getAttribute('zen-workspace-id') !==
|
||||||
|
newSelectedTab.getAttribute('zen-workspace-id')
|
||||||
|
) {
|
||||||
|
cleanup();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.removeTabFromGroup(emptyTab, groupIndex, { forUnsplit: true });
|
||||||
|
gBrowser.selectedTab = selectedTab;
|
||||||
|
this.resetTabState(emptyTab, false);
|
||||||
|
this.splitTabs([selectedTab, newSelectedTab], 'grid', 1);
|
||||||
|
} else {
|
||||||
|
cleanup();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ once: true }
|
||||||
|
);
|
||||||
gZenUIManager.handleNewTab(false, false, 'tab', true);
|
gZenUIManager.handleNewTab(false, false, 'tab', true);
|
||||||
}, 0);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
get splitViewBrowsers() {
|
get splitViewBrowsers() {
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
|
|
||||||
#tabbrowser-tabpanels[zen-split-view='true'] .browserSidebarContainer.deck-selected {
|
#tabbrowser-tabpanels[zen-split-view='true'] .browserSidebarContainer.deck-selected {
|
||||||
&:not(.zen-glance-overlay) {
|
&:not(.zen-glance-overlay) {
|
||||||
outline: 2px solid var(--zen-primary-color) !important;
|
outline: 2px solid light-dark(var(--zen-primary-color), var(--button-background-color-primary)) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.zen-glance-overlay {
|
&.zen-glance-overlay {
|
||||||
|
|||||||
@@ -141,7 +141,10 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 0 5px;
|
|
||||||
|
@media (-moz-platform: macos) {
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
& toolbarseparator {
|
& toolbarseparator {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
|
|||||||
@@ -973,6 +973,7 @@ class nsZenWorkspaces extends nsZenMultiWindowFeature {
|
|||||||
const cleanup = () => {
|
const cleanup = () => {
|
||||||
delete this._tabToSelect;
|
delete this._tabToSelect;
|
||||||
delete this._tabToRemoveForEmpty;
|
delete this._tabToRemoveForEmpty;
|
||||||
|
delete this._shouldOverrideTabs;
|
||||||
resolveSelectPromise();
|
resolveSelectPromise();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -988,7 +989,7 @@ class nsZenWorkspaces extends nsZenMultiWindowFeature {
|
|||||||
delete this._initialTab;
|
delete this._initialTab;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._tabToRemoveForEmpty && !removedEmptyTab) {
|
if (this._tabToRemoveForEmpty && !removedEmptyTab && !this._shouldOverrideTabs) {
|
||||||
const tabs = gBrowser.tabs.filter((tab) => !tab.collapsed);
|
const tabs = gBrowser.tabs.filter((tab) => !tab.collapsed);
|
||||||
if (
|
if (
|
||||||
typeof this._tabToSelect === 'number' &&
|
typeof this._tabToSelect === 'number' &&
|
||||||
|
|||||||
Reference in New Issue
Block a user