This commit is contained in:
Lanny 2026-01-07 16:37:30 -08:00 committed by GitHub
commit 920e0773bb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 32 additions and 1 deletions

View File

@ -150,6 +150,8 @@ class WebEngineSearch(browsertab.AbstractSearch):
self._pending_searches = 0
self.match = browsertab.SearchMatch()
self._old_match = browsertab.SearchMatch()
self._debounce_timer = usertypes.Timer(self)
self._debounce_timer.setSingleShot(True)
def _store_flags(self, reverse, ignore_case):
self._flags.case_sensitive = self._is_case_sensitive(ignore_case)
@ -212,7 +214,7 @@ class WebEngineSearch(browsertab.AbstractSearch):
log.webview.debug(f"Active search match: {self.match}")
self.match_changed.emit(self.match)
def search(self, text, *, ignore_case=usertypes.IgnoreCase.never,
def _search(self, text, *, ignore_case=usertypes.IgnoreCase.never,
reverse=False, result_cb=None):
# Don't go to next entry on duplicate search
if self.text == text and self.search_displayed:
@ -227,6 +229,20 @@ class WebEngineSearch(browsertab.AbstractSearch):
self._find(text, self._flags, result_cb, 'search')
def search(self, *args, **kwargs):
delay = config.val.search.delay
if delay:
self._debounce_timer.stop()
self._debounce_timer.timeout.disconnect()
self._debounce_timer.timeout.connect(
lambda: self._search(*args, **kwargs)
)
self._debounce_timer.start(delay)
else:
self._search(*args, **kwargs)
def clear(self):
if self.search_displayed:
self.cleared.emit()

View File

@ -50,6 +50,16 @@ changelog_after_upgrade:
ignore_case:
renamed: search.ignore_case
search.delay:
type:
name: Int
minval: 0
maxval: maxint
default: 400
desc: Delay (in milliseconds) between last keystroke when searching and the
search being submitted. Larger values produce fewer redundant searches but
also delay receiving search results.
search.ignore_case:
type: IgnoreCase
default: smart

View File

@ -13,6 +13,11 @@ def turn_on_scroll_logging(quteproc):
quteproc.turn_on_scroll_logging(no_scroll_filtering=True)
@pytest.fixture(autouse=True)
def disable_search_delay(quteproc):
quteproc.set_setting('search.delay', '0')
@bdd.then(bdd.parsers.parse("the page should be scrolled to {x} {y}"))
def check_y(request, quteproc, x, y):
data = quteproc.get_session()