diff --git a/chrome.html b/chrome.html
index ee2613b1..9f716944 100644
--- a/chrome.html
+++ b/chrome.html
@@ -660,7 +660,18 @@
let pickerHasCursor = false;
const debouncedSuggest = () => { clearTimeout(suggestTimer); suggestTimer = setTimeout(askSuggest, 80); };
$("url").addEventListener("input", () => { pickerHasCursor = false; debouncedSuggest(); });
- $("url").addEventListener("focus", debouncedSuggest);
+ // Select-all on first focus so a click lands with the current URL ready to
+ // replace, like Chrome / Firefox. A second click (already-focused input)
+ // falls through to the native cursor placement, so editing still works.
+ let urlNeedsSelect = false;
+ $("url").addEventListener("mousedown", (e) => { urlNeedsSelect = (document.activeElement !== e.target); });
+ $("url").addEventListener("mouseup", (e) => { if (urlNeedsSelect) { e.preventDefault(); e.target.select(); urlNeedsSelect = false; } });
+ $("url").addEventListener("focus", (e) => {
+ // Keyboard focus (Tab, address-bar shortcut) — select all. For mouse
+ // focus the mouseup handler above does it; skip to avoid double-fire.
+ if (!urlNeedsSelect) e.target.select();
+ debouncedSuggest();
+ });
$("url").addEventListener("blur", () => {
// Delay: gives a click on the picker time to register before we close.
setTimeout(() => { T.closeAddressPicker(); pickerOpen = false; pickerHasCursor = false; }, 160);
diff --git a/home.html b/home.html
index 8c6daa6d..81f658e5 100644
--- a/home.html
+++ b/home.html
@@ -894,6 +894,15 @@
};
// Search form (slot-add button is rendered inside slotsList per render())
+ // Select-all on first click of the search field so a click lands with any
+ // existing query ready to replace. Second click (already-focused) falls
+ // through to native cursor placement.
+ (() => {
+ const q = $("q"); let needSelect = false;
+ q.addEventListener("mousedown", (e) => { needSelect = (document.activeElement !== e.target); });
+ q.addEventListener("mouseup", (e) => { if (needSelect) { e.preventDefault(); e.target.select(); needSelect = false; } });
+ q.addEventListener("focus", (e) => { if (!needSelect) e.target.select(); });
+ })();
$("searchForm").addEventListener("submit", (e) => {
e.preventDefault();
const q = $("q").value.trim(); if (!q) return;
diff --git a/package.json b/package.json
index f43308ca..5457ebf6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "theseus-navigator",
- "version": "0.3.110",
+ "version": "0.3.111",
"license": "MPL-2.0",
"description": "Theseus Navigator — a browser that follows the thread. By Silent Mode, a Deviant project.",
"author": "Silent Mode",