Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions locales/en-US/browser/browser/zen-general.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,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
Expand Down
13 changes: 11 additions & 2 deletions src/browser/components/urlbar/UrlbarPrefs-sys-mjs.patch
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
diff --git a/browser/components/urlbar/UrlbarPrefs.sys.mjs b/browser/components/urlbar/UrlbarPrefs.sys.mjs
index ec7b7eeee7999aba76286e84808ed09ffc6df463..12bfafdc7e34c5d6345579cd0aaf515a19d82b31 100644
index ec7b7eeee7999aba76286e84808ed09ffc6df463..65154e4b78e391ceca19c629aa3309d9fc52966e 100644
--- a/browser/components/urlbar/UrlbarPrefs.sys.mjs
+++ b/browser/components/urlbar/UrlbarPrefs.sys.mjs
@@ -760,6 +760,7 @@ function makeDefaultResultGroups({ showSearchSuggestionsFirst }) {
@@ -454,6 +457,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
@@ -791,6 +795,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,
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
index d9a0566c5ad2a9ae375a23769f856aecc6efd86c..f6e5004806d24e009f96de9482e24c88590939b1 100644
index d9a0566c5ad2a9ae375a23769f856aecc6efd86c..3e4951f4efdf62acb06b38ad2ae4bd507ca5e71f 100644
--- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
+++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
@@ -912,6 +912,7 @@ export class Query {
Expand All @@ -10,3 +10,26 @@ index d9a0566c5ad2a9ae375a23769f856aecc6efd86c..f6e5004806d24e009f96de9482e24c88
(!this.context.trimmedSearchString ||
(!this.context.searchMode.engineName && !result.autofill))
) {
@@ -1042,6 +1043,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)
);

@@ -1099,6 +1101,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:
28 changes: 28 additions & 0 deletions src/browser/components/urlbar/UrlbarTokenizer-sys-mjs.patch
Original file line number Diff line number Diff line change
@@ -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);
},

31 changes: 26 additions & 5 deletions src/browser/components/urlbar/UrlbarUtils-sys-mjs.patch
Original file line number Diff line number Diff line change
@@ -1,29 +1,50 @@
diff --git a/browser/components/urlbar/UrlbarUtils.sys.mjs b/browser/components/urlbar/UrlbarUtils.sys.mjs
index 9e9f786b6fd3441000d9cdb0b582f817b73ad814..8f86652520a433c94e34fc0e35dc8aad4a86faa2 100644
index 9e9f786b6fd3441000d9cdb0b582f817b73ad814..12e8537b1647f6e3759ea9c5ed93d8a620c5644b 100644
--- a/browser/components/urlbar/UrlbarUtils.sys.mjs
+++ b/browser/components/urlbar/UrlbarUtils.sys.mjs
@@ -84,6 +84,7 @@ export var UrlbarUtils = {
@@ -84,6 +84,8 @@ export var UrlbarUtils = {
RESTRICT_SEARCH_KEYWORD: "restrictSearchKeyword",
SUGGESTED_INDEX: "suggestedIndex",
TAIL_SUGGESTION: "tailSuggestion",
+ ZEN_ACTION: "zenAction",
+ ZEN_WORKSPACE: "zenWorkspace",
}),

// Defines provider types.
@@ -145,6 +146,7 @@ export var UrlbarUtils = {
@@ -145,6 +147,8 @@ export var UrlbarUtils = {
OTHER_NETWORK: 6,
ADDON: 7,
ACTIONS: 8,
+ ZEN_ACTIONS: 9,
+ WORKSPACES: 10,
}),

// Per-result exposure telemetry.
@@ -585,6 +587,8 @@ export var UrlbarUtils = {
@@ -293,6 +297,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",
+ },
]);
},

@@ -585,6 +597,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":
32 changes: 24 additions & 8 deletions src/zen/urlbar/ZenUBActionsProvider.sys.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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 &&
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
}
Expand All @@ -361,9 +373,11 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider {
zenCommand: action.command,
dynamicType: DYNAMIC_TYPE_NAME,
zenAction: true,
query: isPrefixed
? action.label.trimStart()
: queryContext.searchString,
query: isWorkspaceSearch
? action.extraPayload.prettyName
: isPrefixed
? action.label.trimStart()
: queryContext.searchString,
icon: action.icon,
shortcutContent:
ownerGlobal.gZenKeyboardShortcutsManager.getShortcutDisplayFromCommand(
Expand All @@ -378,7 +392,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,
Expand All @@ -398,7 +414,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;
}
Expand Down