From bb14e5d66fab81e9a27327355c6f2e478b7b1d13 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Tue, 28 Apr 2026 00:49:18 +0200 Subject: [PATCH 01/33] no-bug: Make checks if boost css is undefined (gh-13451) --- src/zen/boosts/ZenBoostStyles.sys.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zen/boosts/ZenBoostStyles.sys.mjs b/src/zen/boosts/ZenBoostStyles.sys.mjs index cc6ca22e5..40c230f6f 100644 --- a/src/zen/boosts/ZenBoostStyles.sys.mjs +++ b/src/zen/boosts/ZenBoostStyles.sys.mjs @@ -88,7 +88,7 @@ export class nsZenBoostStyles { style += `}\n`; } - if (boostData.customCSS.trim() != "") { + if ((boostData.customCSS || "").trim() != "") { style += `/* USER CSS */\n`; style += `${boostData.customCSS || ""}\n`; } From 709691225a28c7f44c2eaf0dc628a81b7f0d11e4 Mon Sep 17 00:00:00 2001 From: Andre Nijman Date: Wed, 29 Apr 2026 02:36:32 +0800 Subject: [PATCH 02/33] gh-12142: Clear pending attribute on synced tabs (gh-13460) Co-authored-by: mr. m --- src/zen/sessionstore/ZenWindowSync.sys.mjs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/zen/sessionstore/ZenWindowSync.sys.mjs b/src/zen/sessionstore/ZenWindowSync.sys.mjs index 3a8eab4c6..bc90b80c2 100644 --- a/src/zen/sessionstore/ZenWindowSync.sys.mjs +++ b/src/zen/sessionstore/ZenWindowSync.sys.mjs @@ -1353,6 +1353,9 @@ class nsZenWindowSync { _forZenEmptyTab: tab.hasAttribute("zen-empty-tab"), }); newTab.id = tab.id; + if (!tab.hasAttribute("pending")) { + newTab.removeAttribute("pending"); + } this.#syncItemWithOriginal( tab, newTab, From c939ee4a3d80ba6fa944f94eb99f40f643eb9924 Mon Sep 17 00:00:00 2001 From: sporocyst Date: Wed, 29 Apr 2026 02:37:19 +0800 Subject: [PATCH 03/33] gh-7094: Fixed topbar dropping down when titlebar is enabled (gh-13468) --- src/zen/common/styles/zen-browser-container.css | 2 +- src/zen/tabs/zen-tabs/vertical-tabs-topbar.inc.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zen/common/styles/zen-browser-container.css b/src/zen/common/styles/zen-browser-container.css index fb820d695..6568ae089 100644 --- a/src/zen/common/styles/zen-browser-container.css +++ b/src/zen/common/styles/zen-browser-container.css @@ -43,7 +43,7 @@ } /* stylelint-disable-next-line media-query-no-invalid */ - @media (not -moz-pref("zen.view.shift-down-site-on-hover")) and (not ((-moz-pref("zen.view.experimental-no-window-controls") or (not -moz-pref("zen.view.hide-window-controls"))) and -moz-pref("zen.view.use-single-toolbar"))) { + @media (not -moz-pref("zen.view.shift-down-site-on-hover")) and (not ((-moz-pref("zen.view.experimental-no-window-controls") or (not -moz-pref("zen.view.hide-window-controls")) or (not -moz-pref("browser.tabs.inTitlebar"))) and -moz-pref("zen.view.use-single-toolbar"))) { .browserSidebarContainer:is(.deck-selected, [zen-split="true"]) .browserContainer { transition: margin var(--zen-hidden-toolbar-transition); diff --git a/src/zen/tabs/zen-tabs/vertical-tabs-topbar.inc.css b/src/zen/tabs/zen-tabs/vertical-tabs-topbar.inc.css index 3107480ea..35752d866 100644 --- a/src/zen/tabs/zen-tabs/vertical-tabs-topbar.inc.css +++ b/src/zen/tabs/zen-tabs/vertical-tabs-topbar.inc.css @@ -31,7 +31,7 @@ z-index: 1; %include ../../compact-mode/windows-captions-fix-default.inc.css } - @media -moz-pref('zen.view.experimental-no-window-controls') { + @media -moz-pref('zen.view.experimental-no-window-controls') or (not -moz-pref("browser.tabs.inTitlebar")) { :root:not([zen-has-bookmarks]) & { max-height: 0 !important; overflow: hidden; From c0620a95ef2eaa6aa889d8663611e6525f8f58f1 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Tue, 28 Apr 2026 20:37:46 +0200 Subject: [PATCH 04/33] no-bug: Sync upstream Firefox to version 150.0.1 (gh-13472) --- README.md | 4 ++-- build/firefox-cache/l10n-last-commit-hash | 2 +- src/zen/drag-and-drop/ZenDragAndDrop.js | 6 +++++- src/zen/tabs/ZenPinnedTabManager.mjs | 5 +++-- surfer.json | 4 ++-- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 26e5634e7..7cce689f0 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,8 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne ### Firefox Versions -- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `150.0`! 🚀 -- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 150.0`! +- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `150.0.1`! 🚀 +- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 150.0.1`! ### Contributing diff --git a/build/firefox-cache/l10n-last-commit-hash b/build/firefox-cache/l10n-last-commit-hash index fc5481288..11b9258f4 100644 --- a/build/firefox-cache/l10n-last-commit-hash +++ b/build/firefox-cache/l10n-last-commit-hash @@ -1 +1 @@ -fb55808f9cdd2172649e551705008af4f98038fe \ No newline at end of file +e097b3c5ca4139a5b88052379a776782e078356b \ No newline at end of file diff --git a/src/zen/drag-and-drop/ZenDragAndDrop.js b/src/zen/drag-and-drop/ZenDragAndDrop.js index f2f0d6881..360e8f75f 100644 --- a/src/zen/drag-and-drop/ZenDragAndDrop.js +++ b/src/zen/drag-and-drop/ZenDragAndDrop.js @@ -952,6 +952,7 @@ // Sometimes, dragend doesn't always get called when dragging // to different windows, see gh-8643. delete ownerGlobal.gZenCompactModeManager._isTabBeingDragged; + ownerGlobal.gZenCompactModeManager._clearAllHoverStates(); } this.clearSpaceSwitchTimer(); gZenFolders.highlightGroupOnDragOver(null); @@ -1107,7 +1108,10 @@ ); for (let i = startIndex; i <= endIndex; i++) { let item = items[i]; - if (!movingTabs.includes(item)) { + if ( + !movingTabs.includes(item) && + !(isTabGroupLabel(item) && i == startIndex) + ) { tabsInBetween.push(item); } } diff --git a/src/zen/tabs/ZenPinnedTabManager.mjs b/src/zen/tabs/ZenPinnedTabManager.mjs index 38dfa9e68..893c89bb3 100644 --- a/src/zen/tabs/ZenPinnedTabManager.mjs +++ b/src/zen/tabs/ZenPinnedTabManager.mjs @@ -664,7 +664,7 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { ) { let newIndex = dropIndex; let fromDifferentWindow = false; - movingTabs = Array.from(movingTabs || draggedTab) + let ownedTabs = Array.from(movingTabs || draggedTab) .reverse() .map(tab => { if (!gBrowser.isTab(tab)) { @@ -700,6 +700,7 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } return tab; }); + movingTabs = [...ownedTabs]; if (fromDifferentWindow) { gBrowser.addRangeToMultiSelectedTabs( gBrowser.tabContainer.dragAndDropElements[dropIndex], @@ -822,7 +823,7 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } catch (ex) { console.error("Error moving tabs:", ex); } - return [draggedTab, movingTabs]; + return [draggedTab, ownedTabs]; } onLocationChange(aBrowser, aWebProgress, aRequest, aLocationURI) { diff --git a/surfer.json b/surfer.json index d5b3dfcdd..a17ecb94d 100644 --- a/surfer.json +++ b/surfer.json @@ -5,8 +5,8 @@ "binaryName": "zen", "version": { "product": "firefox", - "version": "150.0", - "candidate": "150.0", + "version": "150.0.1", + "candidate": "150.0.1", "candidateBuild": 1 }, "buildOptions": { From 18c15ac0b8fbfbfc666c453e5ee7f286b609b7a6 Mon Sep 17 00:00:00 2001 From: Ezhik Date: Wed, 29 Apr 2026 03:56:16 +0900 Subject: [PATCH 05/33] no-bug: Add workspaces search (gh-12745) Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com> Co-authored-by: jababda --- locales/en-US/browser/browser/zen-general.ftl | 1 + prefs/zen/zen-urlbar.yaml | 3 + .../urlbar/UrlbarPrefs-sys-mjs.patch | 13 +- .../UrlbarProvidersManager-sys-mjs.patch | 25 ++- .../urlbar/UrlbarTokenizer-sys-mjs.patch | 28 ++++ .../urlbar/UrlbarUtils-sys-mjs.patch | 31 +++- src/browser/themes/shared/zen-icons/icons.css | 3 +- src/zen/tests/ub-actions/browser.toml | 1 + .../browser_workspace_restrict_search.js | 142 ++++++++++++++++++ src/zen/urlbar/ZenUBActionsProvider.sys.mjs | 33 +++- 10 files changed, 263 insertions(+), 17 deletions(-) create mode 100644 src/browser/components/urlbar/UrlbarTokenizer-sys-mjs.patch create mode 100644 src/zen/tests/ub-actions/browser_workspace_restrict_search.js diff --git a/locales/en-US/browser/browser/zen-general.ftl b/locales/en-US/browser/browser/zen-general.ftl index d1229b04f..0ec7200b7 100644 --- a/locales/en-US/browser/browser/zen-general.ftl +++ b/locales/en-US/browser/browser/zen-general.ftl @@ -79,6 +79,7 @@ zen-icons-picker-svg = .label = Icons urlbar-search-mode-zen_actions = Actions +urlbar-search-mode-workspaces = { zen-panel-ui-workspaces-text } zen-site-data-settings = Settings zen-generic-manage = Manage diff --git a/prefs/zen/zen-urlbar.yaml b/prefs/zen/zen-urlbar.yaml index a39a77e24..fefa24e40 100644 --- a/prefs/zen/zen-urlbar.yaml +++ b/prefs/zen/zen-urlbar.yaml @@ -39,3 +39,6 @@ - name: zen.urlbar.suggestions.quick-actions value: true + +- name: browser.urlbar.shortcuts.workspaces + value: true \ No newline at end of file diff --git a/src/browser/components/urlbar/UrlbarPrefs-sys-mjs.patch b/src/browser/components/urlbar/UrlbarPrefs-sys-mjs.patch index 1a27bcc25..9b41ab880 100644 --- a/src/browser/components/urlbar/UrlbarPrefs-sys-mjs.patch +++ b/src/browser/components/urlbar/UrlbarPrefs-sys-mjs.patch @@ -1,12 +1,21 @@ diff --git a/browser/components/urlbar/UrlbarPrefs.sys.mjs b/browser/components/urlbar/UrlbarPrefs.sys.mjs -index 2d21248256c6c2bfb8dac958133c10e3251ef564..6645211ef09518b41cb737e3186fbd0162ecf700 100644 +index 2d21248256c6c2bfb8dac958133c10e3251ef564..f788bd10ec2c08e4b27b77cd3bb0489fb04e8b7a 100644 --- a/browser/components/urlbar/UrlbarPrefs.sys.mjs +++ b/browser/components/urlbar/UrlbarPrefs.sys.mjs -@@ -799,6 +799,7 @@ function makeDefaultResultGroups({ showSearchSuggestionsFirst }) { +@@ -462,6 +462,7 @@ const PREF_URLBAR_DEFAULTS = /** @type {PreferenceDefinition[]} */ ([ + ["shortcuts.tabs", true], + ["shortcuts.history", true], + ["shortcuts.actions", true], ++ ["shortcuts.workspaces", true], + + // Boolean to determine if the providers defined in `exposureResults` + // should be displayed in search results. This can be set by a +@@ -799,6 +800,8 @@ function makeDefaultResultGroups({ showSearchSuggestionsFirst }) { */ let rootGroup = { children: [ + { children: [{ group: lazy.UrlbarUtils.RESULT_GROUP.ZEN_ACTION }] }, ++ { children: [{ group: lazy.UrlbarUtils.RESULT_GROUP.ZEN_WORKSPACE }] }, // heuristic { maxResultCount: 1, diff --git a/src/browser/components/urlbar/UrlbarProvidersManager-sys-mjs.patch b/src/browser/components/urlbar/UrlbarProvidersManager-sys-mjs.patch index 1993cacce..92a550307 100644 --- a/src/browser/components/urlbar/UrlbarProvidersManager-sys-mjs.patch +++ b/src/browser/components/urlbar/UrlbarProvidersManager-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs -index 08455d8d5da233639ccebc0e77c0810fb4f674c3..78d0e875978b568b79646489c28b125a44ea79fa 100644 +index 08455d8d5da233639ccebc0e77c0810fb4f674c3..da8092b561c3dd8864e57f5a52a1a643db29ace1 100644 --- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs +++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs @@ -913,6 +913,7 @@ export class Query { @@ -10,3 +10,26 @@ index 08455d8d5da233639ccebc0e77c0810fb4f674c3..78d0e875978b568b79646489c28b125a (!this.context.trimmedSearchString || (!this.context.searchMode.engineName && !result.autofill)) ) { +@@ -1043,6 +1044,7 @@ function updateSourcesIfEmpty(context) { + lazy.UrlbarTokenizer.TYPE.RESTRICT_TITLE, + lazy.UrlbarTokenizer.TYPE.RESTRICT_URL, + lazy.UrlbarTokenizer.TYPE.RESTRICT_ACTION, ++ lazy.UrlbarTokenizer.TYPE.RESTRICT_WORKSPACE, + ].includes(t.type) + ); + +@@ -1100,6 +1102,14 @@ function updateSourcesIfEmpty(context) { + acceptedSources.push(source); + } + break; ++ case lazy.UrlbarUtils.RESULT_SOURCE.WORKSPACES: ++ if ( ++ restrictTokenType === lazy.UrlbarTokenizer.TYPE.RESTRICT_WORKSPACE || ++ !restrictTokenType ++ ) { ++ acceptedSources.push(source); ++ } ++ break; + case lazy.UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL: + case lazy.UrlbarUtils.RESULT_SOURCE.ADDON: + default: diff --git a/src/browser/components/urlbar/UrlbarTokenizer-sys-mjs.patch b/src/browser/components/urlbar/UrlbarTokenizer-sys-mjs.patch new file mode 100644 index 000000000..c195ba7d9 --- /dev/null +++ b/src/browser/components/urlbar/UrlbarTokenizer-sys-mjs.patch @@ -0,0 +1,28 @@ +diff --git a/browser/components/urlbar/UrlbarTokenizer.sys.mjs b/browser/components/urlbar/UrlbarTokenizer.sys.mjs +index d4af0ee5138a69139b94d898fb07e2345172f025..f750aae3f9f0a849ca009784510575b2b7119e6d 100644 +--- a/browser/components/urlbar/UrlbarTokenizer.sys.mjs ++++ b/browser/components/urlbar/UrlbarTokenizer.sys.mjs +@@ -66,6 +66,7 @@ export var UrlbarTokenizer = { + // `looksLikeOrigin()` returned `LOOKS_LIKE_ORIGIN.OTHER` for this token. It + // may or may not be an origin. + POSSIBLE_ORIGIN_BUT_SEARCH_ALLOWED: 12, ++ RESTRICT_WORKSPACE: 13, + }), + + // The special characters below can be typed into the urlbar to restrict +@@ -83,6 +84,7 @@ export var UrlbarTokenizer = { + TITLE: "#", + URL: "$", + ACTION: ">", ++ WORKSPACE: "`", + }), + + // The keys of characters in RESTRICT that will enter search mode. +@@ -97,6 +99,7 @@ export var UrlbarTokenizer = { + if (lazy.UrlbarPrefs.get("scotchBonnet.enableOverride")) { + keys.push(this.RESTRICT.ACTION); + } ++ keys.push(this.RESTRICT.WORKSPACE); + return new Set(keys); + }, + diff --git a/src/browser/components/urlbar/UrlbarUtils-sys-mjs.patch b/src/browser/components/urlbar/UrlbarUtils-sys-mjs.patch index 4082b9b91..f03d334fb 100644 --- a/src/browser/components/urlbar/UrlbarUtils-sys-mjs.patch +++ b/src/browser/components/urlbar/UrlbarUtils-sys-mjs.patch @@ -1,29 +1,50 @@ diff --git a/browser/components/urlbar/UrlbarUtils.sys.mjs b/browser/components/urlbar/UrlbarUtils.sys.mjs -index 64afd613f454edd7786fcc1e2f307a582e4d5f51..b4af9cc2fbddba2c5229e8ffee7b9c0c06c3e1d0 100644 +index 64afd613f454edd7786fcc1e2f307a582e4d5f51..50e2dd129d4f2e8f0b07e29639d660cd08ee7318 100644 --- a/browser/components/urlbar/UrlbarUtils.sys.mjs +++ b/browser/components/urlbar/UrlbarUtils.sys.mjs -@@ -85,6 +85,7 @@ export var UrlbarUtils = { +@@ -85,6 +85,8 @@ export var UrlbarUtils = { RESTRICT_SEARCH_KEYWORD: "restrictSearchKeyword", SUGGESTED_INDEX: "suggestedIndex", TAIL_SUGGESTION: "tailSuggestion", + ZEN_ACTION: "zenAction", ++ ZEN_WORKSPACE: "zenWorkspace", }), // Defines provider types. -@@ -146,6 +147,7 @@ export var UrlbarUtils = { +@@ -146,6 +148,8 @@ export var UrlbarUtils = { OTHER_NETWORK: 6, ADDON: 7, ACTIONS: 8, + ZEN_ACTIONS: 9, ++ WORKSPACES: 10, }), // Per-result exposure telemetry. -@@ -587,6 +589,8 @@ export var UrlbarUtils = { +@@ -295,6 +299,14 @@ export var UrlbarUtils = { + telemetryLabel: "actions", + uiLabel: "urlbar-searchmode-actions", + }, ++ { ++ source: this.RESULT_SOURCE.WORKSPACES, ++ restrict: lazy.UrlbarTokenizer.RESTRICT.WORKSPACE, ++ icon: "chrome://browser/skin/zen-icons/selectable/layers.svg", ++ pref: "shortcuts.workspaces", ++ telemetryLabel: "workspaces", ++ uiLabel: "urlbar-searchmode-workspaces", ++ }, + ]); + }, + +@@ -587,6 +599,12 @@ export var UrlbarUtils = { return this.RESULT_GROUP.HEURISTIC_FALLBACK; case "UrlbarProviderHistoryUrlHeuristic": return this.RESULT_GROUP.HEURISTIC_HISTORY_URL; + case "ZenUrlbarProviderGlobalActions": -+ return this.RESULT_GROUP.ZEN_ACTION; ++ if (result.source == this.RESULT_SOURCE.WORKSPACES) { ++ return this.RESULT_GROUP.ZEN_WORKSPACE; ++ } else { ++ return this.RESULT_GROUP.ZEN_ACTION; ++ } case "UrlbarProviderOmnibox": return this.RESULT_GROUP.HEURISTIC_OMNIBOX; case "UrlbarProviderRestrictKeywordsAutofill": diff --git a/src/browser/themes/shared/zen-icons/icons.css b/src/browser/themes/shared/zen-icons/icons.css index 805d66d95..0e949942f 100644 --- a/src/browser/themes/shared/zen-icons/icons.css +++ b/src/browser/themes/shared/zen-icons/icons.css @@ -796,7 +796,8 @@ --fp-enabled: 1; } -#alltabs-button { +#alltabs-button, +#urlbar-engine-one-off-item-workspaces { list-style-image: url("chrome://browser/skin/tabs.svg") !important; } diff --git a/src/zen/tests/ub-actions/browser.toml b/src/zen/tests/ub-actions/browser.toml index b0915f7ac..c0e864bd5 100644 --- a/src/zen/tests/ub-actions/browser.toml +++ b/src/zen/tests/ub-actions/browser.toml @@ -5,3 +5,4 @@ [DEFAULT] ["browser_ub_actions_search.js"] +["browser_workspace_restrict_search.js"] diff --git a/src/zen/tests/ub-actions/browser_workspace_restrict_search.js b/src/zen/tests/ub-actions/browser_workspace_restrict_search.js new file mode 100644 index 000000000..27adf48eb --- /dev/null +++ b/src/zen/tests/ub-actions/browser_workspace_restrict_search.js @@ -0,0 +1,142 @@ +/* Any copyright is dedicated to the Public Domain. + https://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +ChromeUtils.defineESModuleGetters(this, { + UrlbarTestUtils: "resource://testing-common/UrlbarTestUtils.sys.mjs", + UrlbarUtils: "moz-src:///browser/components/urlbar/UrlbarUtils.sys.mjs", +}); + +UrlbarTestUtils.init(this); + +add_task(async function test_Workspace_Search_OneOff_Pref() { + const oneOffSearchButtons = UrlbarTestUtils.getOneOffSearchButtons(window); + + async function openPopupAndWaitForRebuild(value = "") { + oneOffSearchButtons.invalidateCache(); + const rebuildPromise = BrowserTestUtils.waitForEvent( + oneOffSearchButtons, + "rebuild" + ); + await UrlbarTestUtils.promiseAutocompleteResultPopup({ + window, + waitForFocus, + value, + }); + await rebuildPromise; + } + + function getWorkspaceShortcut() { + return [...oneOffSearchButtons.localButtons].find( + button => button.source == UrlbarUtils.RESULT_SOURCE.WORKSPACES + ); + } + + try { + await SpecialPowers.pushPrefEnv({ + set: [["zen.urlbar.hide-one-offs", false]], + }); + + await openPopupAndWaitForRebuild(); + ok( + getWorkspaceShortcut(), + "The workspace shortcut should be visible when the pref is enabled" + ); + await UrlbarTestUtils.promisePopupClose(window); + + await SpecialPowers.pushPrefEnv({ + set: [["browser.urlbar.shortcuts.workspaces", false]], + }); + + try { + await openPopupAndWaitForRebuild(); + ok( + !getWorkspaceShortcut(), + "The workspace shortcut should be hidden when the pref is disabled" + ); + await UrlbarTestUtils.promisePopupClose(window); + } finally { + await SpecialPowers.popPrefEnv(); + } + } finally { + await SpecialPowers.popPrefEnv(); + if (UrlbarTestUtils.isPopupOpen(window)) { + await UrlbarTestUtils.promisePopupClose(window); + } + } +}); + +add_task(async function test_Workspace_Restrict_Search() { + const originalWorkspaceId = gZenWorkspaces.activeWorkspace; + const workspaceName = "zen-urlbar-workspace-proof-617db8"; + + await gZenWorkspaces.createAndSaveWorkspace(workspaceName); + + const createdWorkspace = gZenWorkspaces + .getWorkspaces() + .find(workspace => workspace.name == workspaceName); + ok(createdWorkspace, "Created the workspace used by the urlbar test"); + + registerCleanupFunction(async function () { + if (UrlbarTestUtils.isPopupOpen(window)) { + await UrlbarTestUtils.promisePopupClose(window, () => + EventUtils.synthesizeKey("KEY_Escape") + ); + } + if (gZenWorkspaces.activeWorkspace != originalWorkspaceId) { + await gZenWorkspaces.changeWorkspace(originalWorkspaceId); + } + if ( + gZenWorkspaces + .getWorkspaces() + .some(workspace => workspace.uuid == createdWorkspace.uuid) + ) { + await gZenWorkspaces.removeWorkspace(createdWorkspace.uuid); + } + }); + + await gZenWorkspaces.changeWorkspace(originalWorkspaceId); + + await UrlbarTestUtils.promiseAutocompleteResultPopup({ + window, + waitForFocus, + value: "` " + workspaceName, + }); + // Wait for the second search started when the typed token enters search mode. + await UrlbarTestUtils.promiseSearchComplete(window); + ok(gURLBar.searchMode, "The urlbar should enter search mode"); + Assert.equal( + gURLBar.searchMode.source, + UrlbarUtils.RESULT_SOURCE.WORKSPACES, + "The typed token should enter workspace search mode" + ); + Assert.equal( + gURLBar.searchMode.entry, + "typed", + "The workspace search mode should be entered by typing the token" + ); + Assert.equal(gURLBar.value, workspaceName, "The token should be stripped"); + + const resultCount = UrlbarTestUtils.getResultCount(window); + ok(resultCount > 0, "Should show at least one workspace result"); + + const resultDetails = []; + for (let i = 0; i < resultCount; i++) { + resultDetails.push(await UrlbarTestUtils.getDetailsOfResultAt(window, i)); + } + + ok( + resultDetails.every( + ({ result, source }) => + source == UrlbarUtils.RESULT_SOURCE.WORKSPACES && + result.providerName == "ZenUrlbarProviderGlobalActions" + ), + "Typing the workspace token should limit results to workspace actions" + ); + Assert.equal( + resultDetails[0].result.payload.prettyName, + workspaceName, + "The matching workspace should be shown first" + ); +}); diff --git a/src/zen/urlbar/ZenUBActionsProvider.sys.mjs b/src/zen/urlbar/ZenUBActionsProvider.sys.mjs index 8adf50107..5fb7d1c4c 100644 --- a/src/zen/urlbar/ZenUBActionsProvider.sys.mjs +++ b/src/zen/urlbar/ZenUBActionsProvider.sys.mjs @@ -155,6 +155,7 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { */ async isActive(queryContext) { return ( + queryContext.searchMode?.source == UrlbarUtils.RESULT_SOURCE.WORKSPACES || queryContext.searchMode?.source == UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS || (lazy.enabledPref && @@ -241,10 +242,13 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { * * @param {string} query The user's search query. * @param {boolean} isPrefixed Whether the query is prefixed. + * @param {boolean} isWorkspaceSearch Whether this is a workspace search query */ - async #findMatchingActions(query, isPrefixed) { + async #findMatchingActions(query, isPrefixed, isWorkspaceSearch) { const window = lazy.BrowserWindowTracker.getTopWindow(); - const actions = await this.#getAvailableActions(window); + const actions = isWorkspaceSearch + ? this.#getWorkspaceActions(window) + : await this.#getAvailableActions(window); let results = []; for (let action of actions) { if (isPrefixed && query.length < 1) { @@ -341,13 +345,21 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { async startQuery(queryContext, addCallback) { const query = queryContext.trimmedLowerCaseSearchString; + const isWorkspaceSearch = + queryContext.searchMode?.source == UrlbarUtils.RESULT_SOURCE.WORKSPACES; const isPrefixed = + isWorkspaceSearch || queryContext.searchMode?.source == UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS; + if (!query && !isPrefixed) { return; } - const actionsResults = await this.#findMatchingActions(query, isPrefixed); + const actionsResults = await this.#findMatchingActions( + query, + isPrefixed, + isWorkspaceSearch + ); if (!actionsResults.length) { return; } @@ -361,9 +373,12 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { zenCommand: action.command, dynamicType: DYNAMIC_TYPE_NAME, zenAction: true, - query: isPrefixed - ? action.label.trimStart() - : queryContext.searchString, + // eslint-disable-next-line no-nested-ternary + query: isWorkspaceSearch + ? action.extraPayload.prettyName + : isPrefixed + ? action.label.trimStart() + : queryContext.searchString, icon: action.icon, shortcutContent: ownerGlobal.gZenKeyboardShortcutsManager.getShortcutDisplayFromCommand( @@ -378,7 +393,9 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { !isPrefixed; let result = new lazy.UrlbarResult({ type: UrlbarUtils.RESULT_TYPE.DYNAMIC, - source: UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS, + source: isWorkspaceSearch + ? UrlbarUtils.RESULT_SOURCE.WORKSPACES + : UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS, payload, highlights: payloadHighlights, heuristic: shouldBePrioritized, @@ -398,7 +415,7 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { zenUrlbarResultsLearner .sortCommandsByPriority(finalResults) .forEach(result => { - if (isPrefixed && i === 0 && query.length > 1) { + if (isPrefixed && !isWorkspaceSearch && i === 0 && query.length > 1) { result.heuristic = true; delete result.suggestedIndex; } From 092ee7bc2a912959f6e0159c496d906c03ac5f46 Mon Sep 17 00:00:00 2001 From: sporocyst Date: Wed, 29 Apr 2026 16:00:14 +0800 Subject: [PATCH 06/33] gh-7094: Fix webcontent shift when bookmark + title bar is active (gh-13483) --- src/zen/common/styles/zen-browser-container.css | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/zen/common/styles/zen-browser-container.css b/src/zen/common/styles/zen-browser-container.css index 6568ae089..578689e8d 100644 --- a/src/zen/common/styles/zen-browser-container.css +++ b/src/zen/common/styles/zen-browser-container.css @@ -43,7 +43,7 @@ } /* stylelint-disable-next-line media-query-no-invalid */ - @media (not -moz-pref("zen.view.shift-down-site-on-hover")) and (not ((-moz-pref("zen.view.experimental-no-window-controls") or (not -moz-pref("zen.view.hide-window-controls")) or (not -moz-pref("browser.tabs.inTitlebar"))) and -moz-pref("zen.view.use-single-toolbar"))) { + @media (not -moz-pref("zen.view.shift-down-site-on-hover")) { .browserSidebarContainer:is(.deck-selected, [zen-split="true"]) .browserContainer { transition: margin var(--zen-hidden-toolbar-transition); @@ -59,6 +59,12 @@ --margin-top-fix: calc(-1 * var(--zen-toolbar-height-with-bookmarks) + var(--zen-element-separation)); } + @media -moz-pref("zen.view.experimental-no-window-controls") or (not -moz-pref("zen.view.hide-window-controls")) or (not -moz-pref("browser.tabs.inTitlebar")) { + :root:not([zen-has-bookmarks="true"])[zen-single-toolbar="true"] & { + --margin-top-fix: 0px; + } + } + margin-top: var(--margin-top-fix); } } From 04c5bc3478a6737f0c044bab26d232c1e5d2d112 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 29 Apr 2026 12:06:58 +0200 Subject: [PATCH 07/33] no-bug: Bump release version (gh-13486) --- src/zen/boosts/zen-boost-editor.inc.xhtml | 2 +- surfer.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zen/boosts/zen-boost-editor.inc.xhtml b/src/zen/boosts/zen-boost-editor.inc.xhtml index 9694be8ef..c3a857092 100644 --- a/src/zen/boosts/zen-boost-editor.inc.xhtml +++ b/src/zen/boosts/zen-boost-editor.inc.xhtml @@ -115,7 +115,7 @@

- +

diff --git a/surfer.json b/surfer.json index a17ecb94d..74a24c493 100644 --- a/surfer.json +++ b/surfer.json @@ -20,7 +20,7 @@ "brandShortName": "Zen", "brandFullName": "Zen Browser", "release": { - "displayVersion": "1.19.10b", + "displayVersion": "1.19.11b", "github": { "repo": "zen-browser/desktop" }, From 21f7fdaef4bc7f6c088d3973468e85aa7a22d2af Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 29 Apr 2026 12:20:47 +0200 Subject: [PATCH 08/33] no-bug: Increase tab hover scaling (gh-13487) --- src/zen/common/styles/zen-theme.css | 2 +- src/zen/tabs/zen-tabs/vertical-tabs.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zen/common/styles/zen-theme.css b/src/zen/common/styles/zen-theme.css index 56d40d3cd..1c6571ab3 100644 --- a/src/zen/common/styles/zen-theme.css +++ b/src/zen/common/styles/zen-theme.css @@ -250,7 +250,7 @@ --panel-separator-color: color-mix(in srgb, currentColor 15%, transparent) !important; --zen-big-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; - --zen-active-tab-scale: 0.99; + --zen-active-tab-scale: 0.985; /* Define tab hover background color */ --tab-hover-background-color: var(--toolbarbutton-hover-background); diff --git a/src/zen/tabs/zen-tabs/vertical-tabs.css b/src/zen/tabs/zen-tabs/vertical-tabs.css index 0118c3b8d..b0fdebe7a 100644 --- a/src/zen/tabs/zen-tabs/vertical-tabs.css +++ b/src/zen/tabs/zen-tabs/vertical-tabs.css @@ -1089,7 +1089,7 @@ &:active, &[open] { - scale: 0.99; + scale: 0.985; } &[in-urlbar] { From 562e6e5c3adf54e9920887f151bccf4c6024d260 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 29 Apr 2026 20:31:46 +0200 Subject: [PATCH 09/33] gh-13488: Fixed auto hide not working after installing an extension (gh-13498) --- src/toolkit/content/widgets/panel-js.patch | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/toolkit/content/widgets/panel-js.patch b/src/toolkit/content/widgets/panel-js.patch index 011e87349..276e72727 100644 --- a/src/toolkit/content/widgets/panel-js.patch +++ b/src/toolkit/content/widgets/panel-js.patch @@ -1,10 +1,20 @@ diff --git a/toolkit/content/widgets/panel.js b/toolkit/content/widgets/panel.js -index dc3e34847f1b6dfd58f5e036fd7d714ef51c1380..8d8e370ca8549d8208669d4fb344fc8abb54fadd 100644 +index dc3e34847f1b6dfd58f5e036fd7d714ef51c1380..e88ab308c5eba01ccf82a0d1b9477555fcb9a5de 100644 --- a/toolkit/content/widgets/panel.js +++ b/toolkit/content/widgets/panel.js -@@ -137,6 +137,9 @@ +@@ -136,7 +136,19 @@ + let anchorRoot = this.anchorNode.closest("toolbarbutton, .anchor-root") || this.anchorNode; ++ let toolbox = anchorRoot.closest("#navigator-toolbox"); ++ if (toolbox) { ++ // Disable transitions for now, see gh-11667 ++ toolbox.style.transition = "none"; ++ toolbox.setAttribute("zen-compact-mode-active", "true"); ++ anchorRoot.ownerGlobal.setTimeout(() => { ++ toolbox.style.transition = ""; ++ }, 0); ++ } anchorRoot.setAttribute("open", "true"); + if (anchorRoot.closest("#urlbar") && window.gURLBar) { + gURLBar.setAttribute("has-popup-open", "true"); @@ -12,7 +22,7 @@ index dc3e34847f1b6dfd58f5e036fd7d714ef51c1380..8d8e370ca8549d8208669d4fb344fc8a } if (this.getAttribute("animate") != "false") { -@@ -183,6 +186,9 @@ +@@ -183,6 +195,9 @@ this.anchorNode.closest("toolbarbutton, .anchor-root") || this.anchorNode; anchorRoot.removeAttribute("open"); From c0cd45bf1d3037e85932edf5aca7e1a31dc96de1 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Sat, 2 May 2026 11:08:08 +0200 Subject: [PATCH 10/33] gh-13530: Apply translations to desktop files (gh-13531) --- build/AppDir/zen.desktop | 679 +++++++++++++++++- .../common/styles/zen-browser-container.css | 1 + 2 files changed, 674 insertions(+), 6 deletions(-) diff --git a/build/AppDir/zen.desktop b/build/AppDir/zen.desktop index a889e53b4..7dede46fe 100644 --- a/build/AppDir/zen.desktop +++ b/build/AppDir/zen.desktop @@ -1,31 +1,698 @@ [Desktop Entry] Name=Zen Browser -Comment=Experience tranquillity while browsing the web without people tracking you! +Comment=A fast, private and secure web browser built to improve your day-to-day experience. Exec=zen %u Icon=zen Type=Application -MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json; +MimeType=application/json;application/pdf;application/rdf+xml;application/rss+xml;application/x-xpinstall;application/xhtml+xml;application/xml;audio/flac;audio/ogg;audio/webm;image/avif;image/gif;image/jpeg;image/png;image/svg+xml;image/webp;text/html;text/xml;video/ogg;video/webm;x-scheme-handler/chrome;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/mailto; StartupWMClass=zen Categories=Network;WebBrowser; StartupNotify=true Terminal=false X-MultipleArgs=false +GenericName=Web Browser +GenericName[ach]=Web Browser +GenericName[af]=Web Browser +GenericName[an]=Web Browser +GenericName[ar]=متصفح الوِب +GenericName[ast]=Web Browser +GenericName[az]=Web Browser +GenericName[be]=Вэб-браўзер +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[bqi]=گشت گر وب +GenericName[br]=Merdeer Web +GenericName[brx]=Web Browser +GenericName[bs]=Web pretraživač +GenericName[ca]=Navegador web +GenericName[ca_valencia]=Web Browser +GenericName[cak]=Web Okik'amaya'l +GenericName[ckb]=Web Browser +GenericName[cs]=Webový prohlížeč +GenericName[cy]=Porwr Gwe +GenericName[da]=Webbrowser +GenericName[de]=Internet-Browser +GenericName[dsb]=Webwobglědowak +GenericName[el]=Πρόγραμμα περιήγησης +GenericName[en_CA]=Web Browser +GenericName[en_GB]=Web Browser +GenericName[eo]=Retumilo +GenericName[es_AR]=Navegador web +GenericName[es_CL]=Navegador Web +GenericName[es_ES]=Navegador web +GenericName[es_MX]=Navegador Web +GenericName[et]=Web Browser +GenericName[eu]=Web nabigatzailea +GenericName[fa]=مرورگر وب +GenericName[ff]=Web Browser +GenericName[fi]=Verkkoselain +GenericName[fr]=Navigateur web +GenericName[fur]=Navigadôr Web +GenericName[fy_NL]=Webbrowser +GenericName[ga_IE]=Web Browser +GenericName[gd]=Brabhsair-lìn +GenericName[gl]=Navegador web +GenericName[gn]=Ñanduti Kundahára +GenericName[gu_IN]=Web Browser +GenericName[he]=דפדפן אינטרנט +GenericName[hi_IN]=Web Browser +GenericName[hr]=Web preglednik +GenericName[hsb]=Webwobhladowak +GenericName[hu]=Webböngésző +GenericName[hy_AM]=Վեբ դիտարկիչ +GenericName[hye]=Web Browser +GenericName[ia]=Navigator web +GenericName[id]=Peramban Web +GenericName[is]=Vafri +GenericName[it]=Browser web +GenericName[ja]=ウェブブラウザー +GenericName[ka]=ბრაუზერი +GenericName[kab]=Iminig web +GenericName[kk]=Веб-браузері +GenericName[km]=Web Browser +GenericName[kn]=Web Browser +GenericName[ko]=웹 브라우저 +GenericName[lij]=Navegatô Web +GenericName[lo]=ຕົວ​ທ່ອງ​ເວັບ​ເວັບ​ໄຊ​ຕ​໌ +GenericName[lt]=Web Browser +GenericName[ltg]=Web Browser +GenericName[lv]=Tīmekļa pārlūks +GenericName[meh]=Web Browser +GenericName[mk]=Web Browser +GenericName[ml]=ഗോളാന്തരവല അന്വേഷിയന്ത്രം +GenericName[mr]=Web Browser +GenericName[ms]=Web Browser +GenericName[my]=Web Browser +GenericName[nb_NO]=Nettleser +GenericName[ne_NP]=वेब ब्राउजर +GenericName[nl]=Webbrowser +GenericName[nn_NO]=Nettlesar +GenericName[oc]=Navegador Web +GenericName[pa_IN]=ਵੈੱਬ ਬਰਾਊਜ਼ਰ +GenericName[pl]=Przeglądarka internetowa +GenericName[pt_BR]=Navegador web +GenericName[pt_PT]=Navegador Web +GenericName[rm]=Navigatur web +GenericName[ro]=Browser web +GenericName[ru]=Веб-браузер +GenericName[sat]=ᱣᱮᱵᱽ ᱵᱽᱨᱟᱣᱡᱚᱨ +GenericName[sc]=Navigadore web +GenericName[sco]=Web Browser +GenericName[si]=වියමන අතිරික්සුව +GenericName[sk]=Webový prehliadač +GenericName[skr]=ویب براؤزر +GenericName[sl]=Spletni brskalnik +GenericName[son]=Web Browser +GenericName[sq]=Shfletues +GenericName[sr]=Веб прегледач +GenericName[sv_SE]=Webbläsare +GenericName[szl]=Web Browser +GenericName[ta]=Web Browser +GenericName[te]=జాల విహారిణి +GenericName[tg]=Браузери веб +GenericName[th]=เว็บเบราว์เซอร์ +GenericName[tl]=Web Browser +GenericName[tr]=Web Tarayıcısı +GenericName[trs]=Web riña gāchē nu’ +GenericName[uk]=Браузер +GenericName[ur]=Web Browser +GenericName[uz]=Web Browser +GenericName[vi]=Trình duyệt web +GenericName[wo]=Web Browser +GenericName[xh]=Web Browser +GenericName[zh_CN]=Web 浏览器 +GenericName[zh_TW]=網頁瀏覽器 Keywords=Internet;WWW;Browser;Web;Explorer; +Keywords[ach]=Internet;WWW;Browser;Web;Explorer; +Keywords[af]=Internet;WWW;Browser;Web;Explorer; +Keywords[an]=Internet;WWW;Browser;Web;Explorer; +Keywords[ar]=إنترنت;WWW;متصفح;ويب;مستكشف; +Keywords[ast]=Internet;WWW;Browser;Web;Explorer; +Keywords[az]=Internet;WWW;Browser;Web;Explorer; +Keywords[be]=Internet;WWW;Browser;Web;Explorer; +Keywords[bg]=Internet;WWW;Browser;Web;Explorer; +Keywords[bn]=ইন্টারনেট;WWW;ব্রাউজার;ওয়েব;এক্সপ্লোরার; +Keywords[bqi]=Internet;WWW;Browser;Web;Explorer; +Keywords[br]=Internet;WWW;Merdeer;Web;Ergerzhout; +Keywords[brx]=Internet;WWW;Browser;Web;Explorer; +Keywords[bs]=Internet;WWW;Pretraživač;Web;Istraživač; +Keywords[ca]=Internet;WWW;Browser;Web;Explorador;Navegador; +Keywords[ca_valencia]=Internet;WWW;Browser;Web;Explorer; +Keywords[cak]=K'amaya'l;WWW;Okik'amaya'l;Kanob'äl; +Keywords[ckb]=Internet;WWW;Browser;Web;Explorer; +Keywords[cs]=internet;WWW;prohlížeč;web; +Keywords[cy]=Rhyngrwyd;WWW;Porwr;Gwe;Archwiliwr; +Keywords[da]=Internet;WWW;Browser;Nettet;Explorer; +Keywords[de]=Internet;WWW;Browser;Web;Explorer; +Keywords[dsb]=Internet;WWW;wobglědowak;Web;Explorer; +Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Ιστός;Ίντερνετ; +Keywords[en_CA]=Internet;WWW;Browser;Web;Explorer; +Keywords[en_GB]=Internet;WWW;Browser;Web;Explorer; +Keywords[eo]=Interreto;Retumilo;TTT;Teksaĵo;Reto;Internet;WWW;Browser;Web;Explorer; +Keywords[es_AR]=Internet;WWW;Navegador;Web;Explorador; +Keywords[es_CL]=Internet;WWW;Navegador;Web;Explorador; +Keywords[es_ES]=Internet;WWW;Navegador;Web;Explorador; +Keywords[es_MX]=Internet;WWW;Navegador;Web;Explorador; +Keywords[et]=Internet;WWW;Browser;Web;Explorer; +Keywords[eu]=Internet;WWW;Nabigatzailea;Web;Arakatzailea; +Keywords[fa]=Internet;WWW;Browser;Web;Explorer; +Keywords[ff]=Internet;WWW;Browser;Web;Explorer; +Keywords[fi]=Internet;WWW;Browser;Web;Explorer;netti;webbi;selain; +Keywords[fr]=Internet;WWW;Navigateur;Web;Explorer; +Keywords[fur]=Internet;WWW;Browser;Navigadôr;Web;Esploradôr;Explorer; +Keywords[fy_NL]=Ynternet;WWW;Browser;Web;Ferkenner; +Keywords[ga_IE]=Internet;WWW;Browser;Web;Explorer; +Keywords[gd]=Internet;WWW;Browser;Web;Explorer;eadar-lìon;brabhsair;brobhsair;lìon;taisgealaiche; +Keywords[gl]=Internet;WWW;Navegador;Web;Explorador; +Keywords[gn]=Internet;WWW;Browser;Web;Explorer; +Keywords[gu_IN]=Internet;WWW;Browser;Web;Explorer; +Keywords[he]=אינטרנט;WWW;דפדפן;רשת;סייר;מרשתת; +Keywords[hi_IN]=Internet;WWW;Browser;Web;Explorer; +Keywords[hr]=Internet;WWW;Preglednik;Web;Istraživač; +Keywords[hsb]=Internet;WWW;wobhladowak;Web;Explorer; +Keywords[hu]=Internet;WWW;Böngésző;Web;Világháló; +Keywords[hy_AM]=Համացանց,WWW,Զննիչ,Վեբ,Ցանցախույզ: +Keywords[hye]=Internet;WWW;Browser;Web;Explorer; +Keywords[ia]=Internet;WWW;Navigator;Web;Explorator; +Keywords[id]=Internet;WWW;Browser;Web;Explorer; +Keywords[is]=Internet;WWW; Vafri; Vefur; Explorer; +Keywords[it]=Internet;WWW;Browser;Web;Explorer;Navigatore; +Keywords[ja]=Internet;WWW;Browser;Web;Explorer;インターネット;ブラウザー;ウェブ; +Keywords[ka]=ინტერნეტი;WWW;ბრაუზერი;ქსელი;ქსელთან წვდომა; +Keywords[kab]=Internet;WWW;Browser;Web;Explorer; +Keywords[kk]=Internet;WWW;Browser;Web;Explorer;Интернет;Ғаламтор;Браузер;Желі;Шолғыш; +Keywords[km]=Internet;WWW;Browser;Web;Explorer; +Keywords[kn]=Internet;WWW;Browser;Web;Explorer; +Keywords[ko]=인터넷;브라우저;웹;탐색기;Internet;WWW;Browser;Web;Explorer; +Keywords[lij]=Internet;WWW;Browser;Web;Explorer;Navegatô; +Keywords[lo]=Internet;WWW;Browser;Web;Explorer; +Keywords[lt]=Internet;WWW;Browser;Web;Explorer; +Keywords[ltg]=Internet;WWW;Browser;Web;Explorer; +Keywords[lv]=Internets;WWW;Pārlūkprogramma;Tīmeklis; +Keywords[meh]=Internet;WWW;Browser;Web;Explorer; +Keywords[mk]=Internet;WWW;Browser;Web;Explorer; +Keywords[ml]=ഗോളാന്തരവല;WWW;അന്വേഷിയന്ത്രം;ഗോളാന്തരവല;ആരായൻ; +Keywords[mr]=Internet;WWW;Browser;Web;Explorer; +Keywords[ms]=Internet;WWW;Browser;Web;Explorer; +Keywords[my]=Internet;WWW;Browser;Web;Explorer; +Keywords[nb_NO]=Internett;WWW;Nettleser;Web;Utforsker; +Keywords[ne_NP]=Internet;WWW;Browser;Web;Explorer; +Keywords[nl]=Internet;WWW;Browser;Web;Verkenner; +Keywords[nn_NO]=Internett;WWW;Nettlesar;Web;Utforskar; +Keywords[oc]=Internet;WWW;Navegador;Navigador;Navegator;Navigator;Web;Explorer; +Keywords[pa_IN]=ਇੰਟਰਨੈੱਟ;WWW;ਬਰਾਊਜ਼ਰ;ਵੈੱਬ;ਐਕਸਪਲਰੋਰ;ਵੈਬ;ਇੰਟਰਨੈਟ; +Keywords[pl]=Internet;WWW;Przeglądarka;Browser;Wyszukiwarka;Web;Sieć;Explorer;Eksplorer;Strony;Witryny;internetowe; +Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorer;Navegador; +Keywords[pt_PT]=Internet;WWW;Navegador;Web;Explorador; +Keywords[rm]=Internet;WWW;Browser;Web;Explorer;navigatur; +Keywords[ro]=Internet; WWW; Browser; Web; Explorer; +Keywords[ru]=Сеть;Интернет;Браузер;Доступ в Интернет; +Keywords[sat]=Internet;WWW;Browser;Web;Explorer; +Keywords[sc]=Internet;WWW;Navigadore;Web;Explorer; +Keywords[sco]=Internet;WWW;Browser;Web;Explorer; +Keywords[si]=අන්තර්ජාලය;අතිරික්සුව;පිරික්සන්න;ගවේශකය;Internet;WWW;Browser;Web;Explorer; +Keywords[sk]=Internet;WWW;Prehliadač;Web;Prieskumník; +Keywords[skr]=Internet;WWW;Browser;Web;Explorer; +Keywords[sl]=internet;www;brskalnik;splet; +Keywords[son]=Internet;WWW;Browser;Web;Explorer; +Keywords[sq]=Internet;WWW;Shfletues;Web;Eksplorues; +Keywords[sr]=Internet;WWW;Browser;Web;Explorer;интернет;њњњ;веб;мрежа;прегледач;експлорер;internet;pregledač;veb;mreža;pregledač;eksplorer; +Keywords[sv_SE]=Internet;WWW;Webbläsare;Webb;Utforskare; +Keywords[szl]=Internet;WWW;Browser;Web;Explorer; +Keywords[ta]=Internet;WWW;Browser;Web;Explorer; +Keywords[te]=Internet;WWW;Browser;Web;Explorer; +Keywords[tg]=Интернет;WWW;Браузер;Сомона;Ҷустуҷӯгар; +Keywords[th]=อินเทอร์เน็ต;เบราว์เซอร์;เว็บ;Internet;WWW;Browser;Web;Explorer; +Keywords[tl]=Internet;WWW;Browser;Web;Explorer; +Keywords[tr]=Internet;WWW;Browser;Web;Explorer;İnternet;Tarayıcı; +Keywords[trs]=Internet;WWW;Browser;Web;Explorer; +Keywords[uk]=Інтернет;WWW;Браузер;Веб;Переглядач; +Keywords[ur]=Internet;WWW;Browser;Web;Explorer; +Keywords[uz]=Internet;WWW;Browser;Web;Explorer; +Keywords[vi]=Internet;WWW;Trình duyệt;Web;Duyệt web; +Keywords[wo]=Internet;WWW;Browser;Web;Explorer; +Keywords[xh]=Internet;WWW;Browser;Web;Explorer; +Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer; +Keywords[zh_TW]=網際網路;網路;瀏覽器;網頁;上網;Internet;WWW;Browser;Web;Explorer; Actions=new-window;new-blank-window;new-private-window;profilemanager; X-AppImage-Version=$VERSION [Desktop Action new-window] -Name=Open a New Window Exec=zen %u +Name=New Window +Name[ach]=New Window +Name[af]=New Window +Name[an]=New Window +Name[ar]=نافذة جديدة +Name[ast]=New Window +Name[az]=New Window +Name[be]=Новае акно +Name[bg]=Нов прозорец +Name[bn]=নতুন উইন্ডো +Name[bqi]=نیمدری نۊ +Name[br]=Prenestr nevez +Name[brx]=New Window +Name[bs]=Novi prozor +Name[ca]=Finestra nova +Name[ca_valencia]=New Window +Name[cak]=K'ak'a' Tzuwäch +Name[ckb]=New Window +Name[cs]=Nové okno +Name[cy]=Ffenestr Newydd +Name[da]=Nyt vindue +Name[de]=Neues Fenster +Name[dsb]=Nowe wokno +Name[el]=Νέο παράθυρο +Name[en_CA]=New Window +Name[en_GB]=New Window +Name[eo]=Nova fenestro +Name[es_AR]=Nueva ventana +Name[es_CL]=Nueva ventana +Name[es_ES]=Nueva ventana +Name[es_MX]=Nueva ventana +Name[et]=New Window +Name[eu]=Leiho berria +Name[fa]=پنجره جدید‌ +Name[ff]=New Window +Name[fi]=Uusi ikkuna +Name[fr]=Nouvelle fenêtre +Name[fur]=Gnûf barcon +Name[fy_NL]=Nij finster +Name[ga_IE]=New Window +Name[gd]=Uinneag ùr +Name[gl]=Nova xanela +Name[gn]=Ovetã pyahu +Name[gu_IN]=New Window +Name[he]=חלון חדש +Name[hi_IN]=New Window +Name[hr]=Novi prozor +Name[hsb]=Nowe wokno +Name[hu]=Új ablak +Name[hy_AM]=Նոր պատուհան +Name[hye]=New Window +Name[ia]=Nove fenestra +Name[id]=Jendela Baru +Name[is]=Nýr gluggi +Name[it]=Nuova finestra +Name[ja]=新しいウィンドウ +Name[ka]=ახალი ფანჯარა +Name[kab]=Asfaylu amaynut +Name[kk]=Жаңа терезе +Name[km]=បង្អួច​​​ថ្មី +Name[kn]=New Window +Name[ko]=새 창 +Name[lij]=Neuvo Barcon +Name[lo]=ວິນໂດໃໝ່ +Name[lt]=New Window +Name[ltg]=New Window +Name[lv]=Jauns logs +Name[meh]=New Window +Name[mk]=New Window +Name[ml]=പുതിയ ജാലകം +Name[mr]=New Window +Name[ms]=New Window +Name[my]=New Window +Name[nb_NO]=Nytt vindu +Name[ne_NP]=नयाँ सञ्झ्याल +Name[nl]=Nieuw venster +Name[nn_NO]=Nytt vindauge +Name[oc]=Fenèstra novèla +Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ +Name[pl]=Nowe okno +Name[pt_BR]=Nova janela +Name[pt_PT]=Nova janela +Name[rm]=Nova fanestra +Name[ro]=Fereastră nouă +Name[ru]=Новое окно +Name[sat]=ᱱᱟᱶᱟ ᱣᱤᱱᱰᱳ +Name[sc]=Ventana noa +Name[sco]=New Window +Name[si]=නව කවුළුව +Name[sk]=Nové okno +Name[skr]=نویں ونڈو +Name[sl]=Novo okno +Name[son]=New Window +Name[sq]=Dritare e Re +Name[sr]=Нови прозор +Name[sv_SE]=Nytt fönster +Name[szl]=New Window +Name[ta]=New Window +Name[te]=కొత్త కిటికీ +Name[tg]=Равзанаи нав +Name[th]=หน้าต่างใหม่ +Name[tl]=New Window +Name[tr]=Yeni pencere +Name[trs]=Bēntanâ nākàa +Name[uk]=Нове вікно +Name[ur]=New Window +Name[uz]=New Window +Name[vi]=Cửa sổ mới +Name[wo]=New Window +Name[xh]=New Window +Name[zh_CN]=新建窗口 +Name[zh_TW]=開新視窗 [Desktop Action new-blank-window] -Name=Open a New Blank Window Exec=zen --blank-window %u +Name=New Blank Window +Name[ach]=New Blank Window +Name[af]=New Blank Window +Name[an]=New Blank Window +Name[ar]=نافذة فارغة جديدة +Name[ast]=New Blank Window +Name[az]=New Blank Window +Name[be]=Новае пустое акно +Name[bg]=Нов празен прозорец +Name[bn]=নতুন ফাঁকা উইন্ডো +Name[bqi]=نیمدری نۊ خالی +Name[br]=Prenestr goulloù nevez +Name[brx]=New Blank Window +Name[bs]=Novi prazni prozor +Name[ca]=Finestra en blanc nova +Name[ca_valencia]=New Blank Window +Name[cak]=K'ak'a' Tzuwäch K'axk'ol +Name[ckb]=New Blank Window +Name[cs]=Nové prázdné okno +Name[cy]=Ffenestr Wag Newydd +Name[da]=Nyt tomt vindue +Name[de]=Neues leeres Fenster +Name[dsb]=Nowe prázdne wokno +Name[el]=Νέο κενό παράθυρο +Name[en_CA]=New Blank Window +Name[en_GB]=New Blank Window +Name[eo]=Nova malplena fenestro +Name[es_AR]=Nueva ventana en blanco +Name[es_CL]=Nueva ventana en blanco +Name[es_ES]=Nueva ventana en blanco +Name[es_MX]=Nueva ventana en blanco +Name[et]=New Blank Window +Name[eu]=Leiho huts berri +Name[fa]=پنجره خالی جدید +Name[ff]=New Blank Window +Name[fi]=Uusi tyhjä ikkuna +Name[fr]=Nouvelle fenêtre vierge +Name[fur]=Gnûf barcon vuot +Name[fy_NL]=Nij leeg finster +Name[ga_IE]=New Blank Window +Name[gd]=Uinneag bhàn ùr +Name[gl]=Nova xanela en branco +Name[gn]=Ovetã ñemi pyahu +Name[gu_IN]=New Blank Window +Name[he]=חלון ריק חדש +Name[hi_IN]=New Blank Window +Name[hr]=Novi prazni prozor +Name[hsb]=Nowe prázdne wokno +Name[hu]=Új üres ablak +Name[hy_AM]=Նոր դատարկ պատուհան +Name[hye]=New Blank Window +Name[ia]=Nove fenestra vacue +Name[id]=Jendela Kosong Baru +Name[is]=Nýr tómur gluggi +Name[it]=Nuova finestra vuota +Name[ja]=新しい空白のウィンドウ +Name[ka]=ახალი ცარიელი ფანჯარა +Name[kab]=Asfaylu amaynut n tunigin tusligt +Name[kk]=Жаңа бос терезе +Name[km]=បង្អួច​ថ្មី​ឯកជន +Name[kn]=New Blank Window +Name[ko]=새 빈 창 +Name[lij]=Neuvo Barcon Vuot +Name[lo]=ວິນໂດແອ່ງໃໝ່ +Name[lt]=New Blank Window +Name[ltg]=New Blank Window +Name[lv]=Jauns tukšais logs +Name[meh]=New Blank Window +Name[mk]=New Blank Window +Name[ml]=പുതിയ ശൂന്യ ജാലകം +Name[mr]=New Blank Window +Name[ms]=New Blank Window +Name[my]=New Blank Window +Name[nb_NO]=Nytt tomt vindu +Name[ne_NP]=नयाँ खाली सञ्झ्याल +Name[nl]=Nieuw leeg venster +Name[nn_NO]=Nytt tomt vindauge +Name[oc]=Fenèstra en blanc novèla +Name[pa_IN]=ਨਵੀਂ ਖਾਲੀ ਵਿੰਡੋ +Name[pl]=Nowe puste okno +Name[pt_BR]=Nova janela em branco +Name[pt_PT]=Nova janela em branco +Name[rm]=Nova fanestra vacue +Name[ro]=Fereastră nouă și goală +Name[ru]=Новое пустое окно +Name[sat]=ᱱᱟᱶᱟ ᱣᱤᱱᱰᱳ ᱵᱽᱨᱟᱣᱡᱚᱨ +Name[sc]=Ventana en blanc noa +Name[sco]=New Blank Window +Name[si]=නව හිස් කවුළුව +Name[sk]=Nové prázdné okno +Name[skr]=نویں خالی ونڈو +Name[sl]=Novo prazno okno +Name[son]=New Blank Window +Name[sq]=Dritare e Re e Pafajshme +Name[sr]=Нови празни прозор +Name[sv_SE]=Nytt tomt fönster +Name[szl]=New Blank Window +Name[ta]=New Blank Window +Name[te]=కొత్త ఖాళీ కిటికీ +Name[tg]=Равзанаи холӣ нав +Name[th]=หน้าต่างว่างเปล่าใหม่ +Name[tl]=New Blank Window +Name[tr]=Yeni boş pencere +Name[trs]=Bēntanâ huì nākàa +Name[uk]=Нове порожнє вікно +Name[ur]=New Blank Window +Name[uz]=New Blank Window +Name[vi]=Cửa sổ trống mới +Name[wo]=New Blank Window +Name[xh]=New Blank Window +Name[zh_CN]=新建空白窗口 +Name[zh_TW]=開新空白視窗 [Desktop Action new-private-window] -Name=Open a New Private Window Exec=zen --private-window %u +Name=New Private Window +Name[ach]=New Private Window +Name[af]=New Private Window +Name[an]=New Private Window +Name[ar]=نافذة خاصة جديدة +Name[ast]=New Private Window +Name[az]=New Private Window +Name[be]=Новае прыватнае акно +Name[bg]=Нов личен прозорец +Name[bn]=নতুন ব্যক্তিগত উইন্ডো +Name[bqi]=نیمدری سیخومی نۊ +Name[br]=Prenestr prevez nevez +Name[brx]=New Private Window +Name[bs]=Novi privatni prozor +Name[ca]=Finestra privada nova +Name[ca_valencia]=New Private Window +Name[cak]=K'ak'a' Ichinan Tzuwäch +Name[ckb]=New Private Window +Name[cs]=Nové anonymní okno +Name[cy]=Ffenestr Breifat Newydd +Name[da]=Nyt privat vindue +Name[de]=Neues privates Fenster +Name[dsb]=Nowe priwatne wokno +Name[el]=Νέο ιδιωτικό παράθυρο +Name[en_CA]=New Private Window +Name[en_GB]=New Private Window +Name[eo]=Nova privata fenestro +Name[es_AR]=Nueva ventana privada +Name[es_CL]=Nueva ventana privada +Name[es_ES]=Nueva ventana privada +Name[es_MX]=Nueva ventana privada +Name[et]=New Private Window +Name[eu]=Leiho pribatu berria +Name[fa]=پنجره ناشناس جدید +Name[ff]=New Private Window +Name[fi]=Uusi yksityinen ikkuna +Name[fr]=Nouvelle fenêtre privée +Name[fur]=Gnûf barcon privât +Name[fy_NL]=Nij priveefinster +Name[ga_IE]=New Private Window +Name[gd]=Uinneag phrìobhaideach ùr +Name[gl]=Nova xanela privada +Name[gn]=Ovetã ñemi pyahu +Name[gu_IN]=New Private Window +Name[he]=חלון פרטי חדש +Name[hi_IN]=New Private Window +Name[hr]=Novi privatni prozor +Name[hsb]=Nowe priwatne wokno +Name[hu]=Új privát ablak +Name[hy_AM]=Նոր գաղտնի պատուհան +Name[hye]=New Private Window +Name[ia]=Nove fenestra private +Name[id]=Jendela Mode Pribadi Baru +Name[is]=Nýr huliðsgluggi +Name[it]=Nuova finestra anonima +Name[ja]=新しいプライベートウィンドウ +Name[ka]=ახალი პირადი ფანჯარა +Name[kab]=Asfaylu amaynut n tunigin tusligt +Name[kk]=Жаңа жекелік терезе +Name[km]=បង្អួច​ឯកជន​ថ្មី +Name[kn]=New Private Window +Name[ko]=새 사생활 보호 창 +Name[lij]=Neuvo Barcon Privòu +Name[lo]=ວິນໂດສ່ວນຕົວໃໝ່ +Name[lt]=New Private Window +Name[ltg]=New Private Window +Name[lv]=Jauns privātais logs +Name[meh]=New Private Window +Name[mk]=New Private Window +Name[ml]=പുതിയ സ്വകാര്യ ജാലകം +Name[mr]=New Private Window +Name[ms]=New Private Window +Name[my]=New Private Window +Name[nb_NO]=Nytt privat vindu +Name[ne_NP]=नयाँ निजी सञ्झ्याल +Name[nl]=Nieuw privévenster +Name[nn_NO]=Nytt privat vindauge +Name[oc]=Fenèstra privada novèla +Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ +Name[pl]=Nowe okno prywatne +Name[pt_BR]=Nova janela privativa +Name[pt_PT]=Nova janela privada +Name[rm]=Nova fanestra privata +Name[ro]=Fereastră privată nouă +Name[ru]=Новое приватное окно +Name[sat]=ᱱᱟᱶᱟ ᱱᱤᱡᱮᱨᱟᱜ ᱣᱤᱱᱰᱳ +Name[sc]=Ventana privada noa +Name[sco]=New Private Window +Name[si]=නව පෞද්. කවුළුව +Name[sk]=Nové súkromné okno +Name[skr]=نویں نجی ونڈو +Name[sl]=Novo zasebno okno +Name[son]=New Private Window +Name[sq]=Dritare e Re Private +Name[sr]=Нови приватни прозор +Name[sv_SE]=Nytt privat fönster +Name[szl]=New Private Window +Name[ta]=New Private Window +Name[te]=కొత్త ఆంతరంగిక కిటికీ +Name[tg]=Равзанаи хусусии нав +Name[th]=หน้าต่างส่วนตัวใหม่ +Name[tl]=New Private Window +Name[tr]=Yeni gizli pencere +Name[trs]=Bēntanâ huì nākàa +Name[uk]=Приватне вікно +Name[ur]=New Private Window +Name[uz]=New Private Window +Name[vi]=Cửa sổ riêng tư mới +Name[wo]=New Private Window +Name[xh]=New Private Window +Name[zh_CN]=新建隐私窗口 +Name[zh_TW]=開新隱私視窗 [Desktop Action profilemanager] -Name=Open the Profile Manager Exec=zen --ProfileManager %u +Name=Open Profile Manager +Name[ach]=Open Profile Manager +Name[af]=Open Profile Manager +Name[an]=Open Profile Manager +Name[ar]=افتح مدير الملف الشخصي +Name[ast]=Open Profile Manager +Name[az]=Open Profile Manager +Name[be]=Адкрыць менеджар профіляў +Name[bg]=Отваряне на мениджъра на профили +Name[bn]=Open Profile Manager +Name[bqi]=گۊشیڌن دؽوۉداری پوروفایل +Name[br]=Digeriñ an ardoer aeladoù +Name[brx]=Open Profile Manager +Name[bs]=Otvori Menadžera profila +Name[ca]=Obre el gestor de perfils +Name[ca_valencia]=Open Profile Manager +Name[cak]=Open Profile Manager +Name[ckb]=Open Profile Manager +Name[cs]=Otevřít Správce profilů +Name[cy]=Agorwch y Rheolwr Proffil +Name[da]=Åbn profilhåndtering +Name[de]=Profilverwaltung öffnen +Name[dsb]=Profilowy zastojnik wócyniś +Name[el]=Άνοιγμα Διαχείρισης προφίλ +Name[en_CA]=Open Profile Manager +Name[en_GB]=Open Profile Manager +Name[eo]=Malfermi administranton de profiloj +Name[es_AR]=Abrir administrador de perfiles +Name[es_CL]=Abrir administrador de perfiles +Name[es_ES]=Abrir administrador de perfiles +Name[es_MX]=Abrir administrador de perfiles +Name[et]=Open Profile Manager +Name[eu]=Ireki profilen kudeatzailea +Name[fa]=گشودن مدیر نمایه +Name[ff]=Open Profile Manager +Name[fi]=Avaa profiilien hallinta +Name[fr]=Ouvrir le gestionnaire de profils +Name[fur]=Vierç gjestôr profîi +Name[fy_NL]=Profylbehearder iepenje +Name[ga_IE]=Open Profile Manager +Name[gd]=Fosgail manaidsear nam pròifilean +Name[gl]=Abrir o xestor de perfís +Name[gn]=Embojuruja mba’ete ñangarekoha +Name[gu_IN]=Open Profile Manager +Name[he]=פתיחת מנהל הפרופילים +Name[hi_IN]=Open Profile Manager +Name[hr]=Otvori upravljač profila +Name[hsb]=Zrjadowak profilow wočinić +Name[hu]=Profilkezelő megnyitása +Name[hy_AM]=Բացեք պրոֆիլի կառավարիչը +Name[hye]=Open Profile Manager +Name[ia]=Aperir le gestor de profilo +Name[id]=Buka Pengelola Profil +Name[is]=Opna umsýslu notandasniða +Name[it]=Apri gestore profili +Name[ja]=プロファイルマネージャーを開く +Name[ka]=პროფილის მმართველის გახსნა +Name[kab]=Ldi amsefrak n umaɣnu +Name[kk]=Профильдер бақарушысын ашу +Name[km]=Open Profile Manager +Name[kn]=Open Profile Manager +Name[ko]=프로필 관리자 열기 +Name[lij]=Open Profile Manager +Name[lo]=ເປີດຕົວຈັດການໂປຣໄຟລ໌ +Name[lt]=Open Profile Manager +Name[ltg]=Open Profile Manager +Name[lv]=Atvērt profilu pārvaldnieku +Name[meh]=Open Profile Manager +Name[mk]=Open Profile Manager +Name[ml]=രൂപരേഖ മാനേചർ +Name[mr]=Open Profile Manager +Name[ms]=Open Profile Manager +Name[my]=Open Profile Manager +Name[nb_NO]=Åpne profilbehandler +Name[ne_NP]=Open Profile Manager +Name[nl]=Profielbeheerder openen +Name[nn_NO]=Opne profilhandsaming +Name[oc]=Dobrir lo gestionari de perfils +Name[pa_IN]=ਪਰੋਫ਼ਾਈਲ ਮੈਨੇਜਰ ਖੋਲ੍ਹੋ +Name[pl]=Menedżer profili +Name[pt_BR]=Abrir gerenciador de perfis +Name[pt_PT]=Abrir o Gestor de Perfis +Name[rm]=Avrir l'administraziun da profils +Name[ro]=Deschide managerul de profiluri +Name[ru]=Открыть менеджер профилей +Name[sat]=ᱢᱮᱫᱦᱟᱸ ᱢᱮᱱᱮᱡᱚᱨ ᱠᱷᱩᱞᱟᱹᱭ ᱢᱮ +Name[sc]=Aberi su gestore de profilos +Name[sco]=Open Profile Manager +Name[si]=පැතිකඩ කළමනාකරු අරින්න +Name[sk]=Otvoriť Správcu profilov +Name[skr]=پروفائل منیجر کھولو +Name[sl]=Odpri upravitelja profilov +Name[son]=Open Profile Manager +Name[sq]=Hapni Përgjegjës Profilesh +Name[sr]=Отворите управљач профила +Name[sv_SE]=Öppna Profilhanteraren +Name[szl]=Open Profile Manager +Name[ta]=Open Profile Manager +Name[te]=Open Profile Manager +Name[tg]=Кушодани мудири профилҳо +Name[th]=เปิดตัวจัดการโปรไฟล์ +Name[tl]=Open Profile Manager +Name[tr]=Profil yöneticisini aç +Name[trs]=Sa nīkāj ñu’ūnj nej perfî huā nì’nï̀nj ïn +Name[uk]=Відкрити менеджер профілів +Name[ur]=Open Profile Manager +Name[uz]=Open Profile Manager +Name[vi]=Mở trình quản lý hồ sơ +Name[wo]=Open Profile Manager +Name[xh]=Open Profile Manager +Name[zh_CN]=打开配置文件管理器 +Name[zh_TW]=開啟設定檔管理員 diff --git a/src/zen/common/styles/zen-browser-container.css b/src/zen/common/styles/zen-browser-container.css index 578689e8d..5f196729a 100644 --- a/src/zen/common/styles/zen-browser-container.css +++ b/src/zen/common/styles/zen-browser-container.css @@ -59,6 +59,7 @@ --margin-top-fix: calc(-1 * var(--zen-toolbar-height-with-bookmarks) + var(--zen-element-separation)); } + /* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.view.experimental-no-window-controls") or (not -moz-pref("zen.view.hide-window-controls")) or (not -moz-pref("browser.tabs.inTitlebar")) { :root:not([zen-has-bookmarks="true"])[zen-single-toolbar="true"] & { --margin-top-fix: 0px; From a71a66c00bc586e70634e46c79599bab371b6344 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Sat, 2 May 2026 11:36:15 +0200 Subject: [PATCH 11/33] no-bug: Force boosts colors to fit in 32 bit ints (gh-13532) --- src/zen/boosts/actors/ZenBoostsChild.sys.mjs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs index 2d5aaba28..65c08834d 100644 --- a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs +++ b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs @@ -76,7 +76,7 @@ export class ZenBoostsChild extends JSWindowActorChild { * > #define NS_RGBA(_r, _g, _b, _a) \ * > ((nscolor)(((_a) << 24) | ((_b) << 16) | ((_g) << 8) | (_r))) * - * Converts [r, g, b] array to NSColor + * Converts [r, g, b] array to (uint32_t) NSColor * Make a color out of r,g,b,a values. This assumes that the r,g,b,a * values are properly constrained to 0-255. * @@ -92,7 +92,8 @@ export class ZenBoostsChild extends JSWindowActorChild { // be fully opaque and we need an extra byte to store the contrast value. This allows // us to still use an nscolor as parameter instead of having to deal with WebIDL structs // shenanigans. - return (contrast << 24) | (b << 16) | (g << 8) | r; + // Take into account that its an unsigned int + return ((contrast << 24) | (b << 16) | (g << 8) | r) >>> 0; } /** From c82d314913a7626acd340b6042d103be7bc52ab8 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Sun, 3 May 2026 14:53:37 +0200 Subject: [PATCH 12/33] no-bug: Make addons appear on the urlbar (gh-13535) --- .../content/navigator-toolbox-inc-xhtml.patch | 8 ++--- .../CustomizableUI-sys-mjs.patch | 36 +++++++++++++++---- src/zen/common/modules/ZenUIManager.mjs | 34 ++++++++++++++---- src/zen/common/styles/zen-omnibox.css | 8 ++++- .../common/styles/zen-overflowing-addons.css | 4 ++- 5 files changed, 70 insertions(+), 20 deletions(-) diff --git a/src/browser/base/content/navigator-toolbox-inc-xhtml.patch b/src/browser/base/content/navigator-toolbox-inc-xhtml.patch index 2ee59a7b6..604d54485 100644 --- a/src/browser/base/content/navigator-toolbox-inc-xhtml.patch +++ b/src/browser/base/content/navigator-toolbox-inc-xhtml.patch @@ -1,5 +1,5 @@ diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml -index edeb473e46b3aa4b12eb4b59ce62e5ae48edd2a1..d2c6c8c150e732b77d65420520ca4905a9d3ea4d 100644 +index edeb473e46b3aa4b12eb4b59ce62e5ae48edd2a1..99210f8bb5633d50d2cba24f1e13ca866c5b6959 100644 --- a/browser/base/content/navigator-toolbox.inc.xhtml +++ b/browser/base/content/navigator-toolbox.inc.xhtml @@ -2,7 +2,7 @@ @@ -11,7 +11,7 @@ index edeb473e46b3aa4b12eb4b59ce62e5ae48edd2a1..d2c6c8c150e732b77d65420520ca4905