mirror of
https://github.com/zen-browser/desktop.git
synced 2025-10-06 01:46:35 +00:00
290 lines
10 KiB
C++
290 lines
10 KiB
C++
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
|
|
index 1c447bd31de854d1522dbcfb5d7ad557c84f1388..b63bf54956a42c63d5cadc9360545e235161f625 100644
|
|
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
|
|
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
|
|
@@ -74,6 +74,13 @@ ChromeUtils.defineLazyGetter(lazy, "logger", () =>
|
|
lazy.UrlbarUtils.getLogger({ prefix: "Input" })
|
|
);
|
|
|
|
+XPCOMUtils.defineLazyPreferenceGetter(
|
|
+ lazy,
|
|
+ "ZEN_URLBAR_BEHAVIOR",
|
|
+ "zen.urlbar.behavior",
|
|
+ 'default'
|
|
+);
|
|
+
|
|
const DEFAULT_FORM_HISTORY_NAME = "searchbar-history";
|
|
|
|
const UNLIMITED_MAX_RESULTS = 99;
|
|
@@ -355,7 +362,16 @@ export class UrlbarInput {
|
|
// See _on_select(). HTMLInputElement.select() dispatches a "select"
|
|
// event but does not set the primary selection.
|
|
this._suppressPrimaryAdjustment = true;
|
|
+ const zenToolbox = this.document.getElementById("navigator-toolbox");
|
|
+ this.window.document.documentElement.setAttribute("supress-primary-adjustment", !(
|
|
+ zenToolbox.hasAttribute("zen-has-hover") ||
|
|
+ zenToolbox.hasAttribute("zen-has-empty-tab") ||
|
|
+ zenToolbox.hasAttribute("zen-user-show")
|
|
+ ));
|
|
this.inputField.select();
|
|
+ this.document.ownerGlobal.setTimeout(() => {
|
|
+ this.window.document.documentElement.removeAttribute("supress-primary-adjustment");
|
|
+ }, 0);
|
|
this._suppressPrimaryAdjustment = false;
|
|
}
|
|
|
|
@@ -431,6 +447,10 @@ export class UrlbarInput {
|
|
hideSearchTerms = false,
|
|
isSameDocument = false
|
|
) {
|
|
+ if (this.hasAttribute("zen-newtab")) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
// We only need to update the searchModeUI on tab switch conditionally
|
|
// as we only persist searchMode with ScotchBonnet enabled.
|
|
if (
|
|
@@ -703,8 +723,16 @@ export class UrlbarInput {
|
|
return;
|
|
}
|
|
}
|
|
-
|
|
+ const zenToolbox = this.document.getElementById("navigator-toolbox");
|
|
+ this.window.document.documentElement.setAttribute("supress-primary-adjustment", !(
|
|
+ zenToolbox.hasAttribute("zen-has-hover") ||
|
|
+ zenToolbox.hasAttribute("zen-has-empty-tab") ||
|
|
+ zenToolbox.hasAttribute("zen-user-show")
|
|
+ ));
|
|
this.handleNavigation({ event });
|
|
+ this.document.ownerGlobal.setTimeout(() => {
|
|
+ this.window.document.documentElement.removeAttribute("supress-primary-adjustment");
|
|
+ }, 100);
|
|
}
|
|
|
|
/**
|
|
@@ -1116,7 +1144,11 @@ export class UrlbarInput {
|
|
}
|
|
|
|
if (!this.#providesSearchMode(result)) {
|
|
- this.view.close({ elementPicked: true });
|
|
+ if (this._zenHandleUrlbarClose) {
|
|
+ this._zenHandleUrlbarClose(true, true);
|
|
+ } else {
|
|
+ this.window.setTimeout(() => this.view.close({ elementPicked: true }), 0);
|
|
+ }
|
|
}
|
|
|
|
if (isCanonized) {
|
|
@@ -2191,6 +2223,13 @@ export class UrlbarInput {
|
|
await this.#updateLayoutBreakoutDimensions();
|
|
}
|
|
|
|
+ get zenUrlbarBehavior() {
|
|
+ if (this.document.documentElement.hasAttribute("inDOMFullscreen")) {
|
|
+ return "float";
|
|
+ }
|
|
+ return lazy.ZEN_URLBAR_BEHAVIOR;
|
|
+ }
|
|
+
|
|
startLayoutExtend() {
|
|
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
|
|
// Do not expand if the Urlbar does not support being expanded or it is
|
|
@@ -2205,6 +2244,12 @@ export class UrlbarInput {
|
|
|
|
this.setAttribute("breakout-extend", "true");
|
|
|
|
+ if (this.zenUrlbarBehavior == 'float' || (this.zenUrlbarBehavior == 'floating-on-type' && !this.focusedViaMousedown)) {
|
|
+ this.setAttribute("zen-floating-urlbar", "true");
|
|
+ this.window.gZenUIManager.onFloatingURLBarOpen();
|
|
+ } else {
|
|
+ this.removeAttribute("zen-floating-urlbar");
|
|
+ }
|
|
// Enable the animation only after the first extend call to ensure it
|
|
// doesn't run when opening a new window.
|
|
if (!this.hasAttribute("breakout-extend-animate")) {
|
|
@@ -2224,6 +2269,24 @@ export class UrlbarInput {
|
|
return;
|
|
}
|
|
|
|
+ if (this._zenHandleUrlbarClose) {
|
|
+ this._zenHandleUrlbarClose();
|
|
+ }
|
|
+
|
|
+ // Arc like URLbar: Blur the input on exit
|
|
+ const zenToolbox = this.document.getElementById("navigator-toolbox");
|
|
+ this.window.document.documentElement.setAttribute("supress-primary-adjustment", !(
|
|
+ zenToolbox.hasAttribute("zen-has-hover") ||
|
|
+ zenToolbox.hasAttribute("zen-has-empty-tab") ||
|
|
+ zenToolbox.hasAttribute("zen-user-show")
|
|
+ ));
|
|
+ this.window.gBrowser.selectedBrowser.focus();
|
|
+ this.document.ownerGlobal.setTimeout(() => {
|
|
+ this.window.document.documentElement.removeAttribute("supress-primary-adjustment");
|
|
+ }, 100);
|
|
+
|
|
+ this.removeAttribute("zen-floating-urlbar");
|
|
+
|
|
this.removeAttribute("breakout-extend");
|
|
this.#updateTextboxPosition();
|
|
}
|
|
@@ -2553,7 +2616,7 @@ export class UrlbarInput {
|
|
|
|
this.textbox.parentNode.style.setProperty(
|
|
"--urlbar-container-height",
|
|
- px(getBoundsWithoutFlushing(this.textbox.parentNode).height)
|
|
+ px(getBoundsWithoutFlushing(this.textbox.parentNode).height + 8)
|
|
);
|
|
this.textbox.style.setProperty(
|
|
"--urlbar-height",
|
|
@@ -2986,6 +3049,7 @@ export class UrlbarInput {
|
|
}
|
|
|
|
_toggleActionOverride(event) {
|
|
+ if (!Services.prefs.getBoolPref("zen.urlbar.enable-overrides")) return;
|
|
if (
|
|
event.keyCode == KeyEvent.DOM_VK_SHIFT ||
|
|
event.keyCode == KeyEvent.DOM_VK_ALT ||
|
|
@@ -3087,7 +3151,7 @@ export class UrlbarInput {
|
|
*/
|
|
_trimValue(val) {
|
|
let trimmedValue = lazy.UrlbarPrefs.get("trimURLs")
|
|
- ? lazy.BrowserUIUtils.trimURL(val)
|
|
+ ? this._zenTrimURL(val)
|
|
: val;
|
|
// Only trim value if the directionality doesn't change to RTL and we're not
|
|
// showing a strikeout https protocol.
|
|
@@ -3303,6 +3367,7 @@ export class UrlbarInput {
|
|
resultDetails = null,
|
|
browser = this.window.gBrowser.selectedBrowser
|
|
) {
|
|
+ openUILinkWhere = this.window.gZenUIManager.getOpenUILinkWhere(url, browser, openUILinkWhere);
|
|
// No point in setting these because we'll handleRevert() a few rows below.
|
|
if (openUILinkWhere == "current") {
|
|
// Make sure URL is formatted properly (don't show punycode).
|
|
@@ -3455,6 +3520,10 @@ export class UrlbarInput {
|
|
}
|
|
reuseEmpty = true;
|
|
}
|
|
+ if (this.hasAttribute("zen-newtab")) {
|
|
+ where = "tab";
|
|
+ reuseEmpty = true;
|
|
+ }
|
|
if (
|
|
where == "tab" &&
|
|
reuseEmpty &&
|
|
@@ -3462,6 +3531,9 @@ export class UrlbarInput {
|
|
) {
|
|
where = "current";
|
|
}
|
|
+ if (this.window.gBrowser.selectedTab.hasAttribute("zen-empty-tab")) {
|
|
+ return "tab"; // Always open in a new tab if the current tab is "our empty tab".
|
|
+ }
|
|
return where;
|
|
}
|
|
|
|
@@ -3719,6 +3791,7 @@ export class UrlbarInput {
|
|
this.setResultForCurrentValue(null);
|
|
this.handleCommand();
|
|
this.controller.clearLastQueryContextCache();
|
|
+ this.view.close();
|
|
|
|
this._suppressStartQuery = false;
|
|
});
|
|
@@ -3726,7 +3799,6 @@ export class UrlbarInput {
|
|
contextMenu.addEventListener("popupshowing", () => {
|
|
// Close the results pane when the input field contextual menu is open,
|
|
// because paste and go doesn't want a result selection.
|
|
- this.view.close();
|
|
|
|
let controller =
|
|
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
|
|
@@ -3836,7 +3908,11 @@ export class UrlbarInput {
|
|
if (!engineName && !source && !this.hasAttribute("searchmode")) {
|
|
return;
|
|
}
|
|
-
|
|
+ this.window.dispatchEvent(
|
|
+ new CustomEvent("Zen:UrlbarSearchModeChanged", {
|
|
+ detail: { searchMode },
|
|
+ })
|
|
+ );
|
|
this._searchModeIndicatorTitle.textContent = "";
|
|
this._searchModeIndicatorTitle.removeAttribute("data-l10n-id");
|
|
|
|
@@ -4130,6 +4206,7 @@ export class UrlbarInput {
|
|
|
|
this.document.l10n.setAttributes(
|
|
this.inputField,
|
|
+ this.window.gZenVerticalTabsManager._hasSetSingleToolbar ? 'zen-singletoolbar-urlbar-placeholder-with-name' :
|
|
l10nId,
|
|
l10nId == "urlbar-placeholder-with-name" ? { name } : undefined
|
|
);
|
|
@@ -4241,6 +4318,11 @@ export class UrlbarInput {
|
|
}
|
|
|
|
_on_click(event) {
|
|
+ if (event.target == this.inputField) {
|
|
+ event.zenOriginalTarget = this.textbox;
|
|
+ this._on_mousedown(event);
|
|
+ }
|
|
+
|
|
if (
|
|
event.target == this.inputField ||
|
|
event.target == this._inputContainer
|
|
@@ -4311,7 +4393,7 @@ export class UrlbarInput {
|
|
}
|
|
}
|
|
|
|
- if (this.focusedViaMousedown) {
|
|
+ if (this.focusedViaMousedown || this.hasAttribute("zen-newtab")) {
|
|
this.view.autoOpen({ event });
|
|
} else {
|
|
if (this._untrimOnFocusAfterKeydown) {
|
|
@@ -4351,9 +4433,16 @@ export class UrlbarInput {
|
|
}
|
|
|
|
_on_mousedown(event) {
|
|
- switch (event.currentTarget) {
|
|
+ switch (event.zenOriginalTarget || event.currentTarget) {
|
|
case this.textbox: {
|
|
this._mousedownOnUrlbarDescendant = true;
|
|
+ const isProbablyFloating =
|
|
+ (this.zenUrlbarBehavior == "floating-on-type" &&
|
|
+ this.hasAttribute("breakout-extend") && !this.focusedViaMousedown) ||
|
|
+ (this.zenUrlbarBehavior == "float") || this.window.gZenVerticalTabsManager._hasSetSingleToolbar;
|
|
+ if (event.type != "click" && isProbablyFloating || event.type == "click" && !isProbablyFloating) {
|
|
+ return true;
|
|
+ }
|
|
|
|
if (
|
|
event.target != this.inputField &&
|
|
@@ -4364,6 +4453,10 @@ export class UrlbarInput {
|
|
|
|
this.focusedViaMousedown = !this.focused;
|
|
this._preventClickSelectsAll = this.focused;
|
|
+ if (isProbablyFloating) {
|
|
+ this.focusedViaMousedown = !this.hasAttribute("breakout-extend");
|
|
+ this._preventClickSelectsAll = this.hasAttribute("breakout-extend");
|
|
+ }
|
|
|
|
// Keep the focus status, since the attribute may be changed
|
|
// upon calling this.focus().
|
|
@@ -4399,7 +4492,7 @@ export class UrlbarInput {
|
|
}
|
|
// Don't close the view when clicking on a tab; we may want to keep the
|
|
// view open on tab switch, and the TabSelect event arrived earlier.
|
|
- if (event.target.closest("tab")) {
|
|
+ if (event.target.closest("tab") || event.target.closest("#tabs-newtab-button")) {
|
|
break;
|
|
}
|
|
|
|
@@ -4716,7 +4809,7 @@ export class UrlbarInput {
|
|
// When we are in actions search mode we can show more results so
|
|
// increase the limit.
|
|
let maxResults =
|
|
- this.searchMode?.source != lazy.UrlbarUtils.RESULT_SOURCE.ACTIONS
|
|
+ this.searchMode?.source != lazy.UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS
|
|
? lazy.UrlbarPrefs.get("maxRichResults")
|
|
: UNLIMITED_MAX_RESULTS;
|
|
let options = {
|