diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-12-01 16:44:55 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-12-01 16:44:55 +0100 |
commit | 546caffcbafbe385ae2a38255c86b6d3a9dd93ca (patch) | |
tree | d90074d30907869e66fbd70afc1ad34a49e2c417 | |
parent | 5d31f93e5e02e93c838f06335241ad653a58530e (diff) | |
parent | 087c84c0d514563828d9aefa30b7ef814a1c098b (diff) | |
download | qutebrowser-546caffcbafbe385ae2a38255c86b6d3a9dd93ca.tar.gz qutebrowser-546caffcbafbe385ae2a38255c86b6d3a9dd93ca.zip |
Merge remote-tracking branch 'origin/pr/6798'
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 17 | ||||
-rw-r--r-- | qutebrowser/browser/webkit/webkittab.py | 21 | ||||
-rw-r--r-- | tests/end2end/features/search.feature | 20 |
3 files changed, 43 insertions, 15 deletions
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index ace23d14a..926ccf133 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -200,6 +200,14 @@ class WebEngineSearch(browsertab.AbstractSearch): def _empty_flags(self): return QWebEnginePage.FindFlags(0) # type: ignore[call-overload] + def _args_to_flags(self, reverse, ignore_case): + flags = self._empty_flags() + if self._is_case_sensitive(ignore_case): + flags |= QWebEnginePage.FindCaseSensitively + if reverse: + flags |= QWebEnginePage.FindBackward + return flags + def connect_signals(self): self._wrap_handler.connect_signal(self._widget.page()) @@ -246,17 +254,14 @@ class WebEngineSearch(browsertab.AbstractSearch): # Don't go to next entry on duplicate search if self.text == text and self.search_displayed: log.webview.debug("Ignoring duplicate search request" - " for {}".format(text)) + " for {}, but resetting flags".format(text)) + self._flags = self._args_to_flags(reverse, ignore_case) return self.text = text - self._flags = self._empty_flags() + self._flags = self._args_to_flags(reverse, ignore_case) self._wrap_handler.reset_match_data() self._wrap_handler.flag_wrap = wrap - if self._is_case_sensitive(ignore_case): - self._flags |= QWebEnginePage.FindCaseSensitively - if reverse: - self._flags |= QWebEnginePage.FindBackward self._find(text, self._flags, result_cb, 'search') diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py index df3491ec2..7a41b995c 100644 --- a/qutebrowser/browser/webkit/webkittab.py +++ b/qutebrowser/browser/webkit/webkittab.py @@ -108,6 +108,16 @@ class WebKitSearch(browsertab.AbstractSearch): def _empty_flags(self): return QWebPage.FindFlags(0) # type: ignore[call-overload] + def _args_to_flags(self, reverse, ignore_case, wrap): + flags = self._empty_flags() + if self._is_case_sensitive(ignore_case): + flags |= QWebPage.FindCaseSensitively + if reverse: + flags |= QWebPage.FindBackward + if wrap: + flags |= QWebPage.FindWrapsAroundDocument + return flags + def _call_cb(self, callback, found, text, flags, caller): """Call the given callback if it's non-None. @@ -150,7 +160,8 @@ class WebKitSearch(browsertab.AbstractSearch): # Don't go to next entry on duplicate search if self.text == text and self.search_displayed: log.webview.debug("Ignoring duplicate search request" - " for {}".format(text)) + " for {}, but resetting flags".format(text)) + self._flags = self._args_to_flags(reverse, ignore_case, wrap) return # Clear old search results, this is done automatically on QtWebEngine. @@ -158,13 +169,7 @@ class WebKitSearch(browsertab.AbstractSearch): self.text = text self.search_displayed = True - self._flags = self._empty_flags() - if self._is_case_sensitive(ignore_case): - self._flags |= QWebPage.FindCaseSensitively - if reverse: - self._flags |= QWebPage.FindBackward - if wrap: - self._flags |= QWebPage.FindWrapsAroundDocument + self._flags = self._args_to_flags(reverse, ignore_case, wrap) # We actually search *twice* - once to highlight everything, then again # to get a mark so we can navigate. found = self._widget.findText(text, self._flags) diff --git a/tests/end2end/features/search.feature b/tests/end2end/features/search.feature index 5fafd19f0..305b45690 100644 --- a/tests/end2end/features/search.feature +++ b/tests/end2end/features/search.feature @@ -71,7 +71,25 @@ Feature: Searching on a page When I run :search foo And I wait for "search found foo" in the log And I run :search foo - Then "Ignoring duplicate search request for foo" should be logged + Then "Ignoring duplicate search request for foo, but resetting flags" should be logged + + Scenario: Reset search direction on duplicate search, forward-to-back + When I run :search baz + And I wait for "search found baz" in the log + And I run :search -r baz + And I wait for "Ignoring duplicate search request for baz, but resetting flags" in the log + And I run :search-next + And I wait for "next_result found baz with flags FindBackward" in the log + Then "BAZ" should be found + + Scenario: Reset search direction on duplicate search, back-to-forward + When I run :search -r baz + And I wait for "search found baz with flags FindBackward" in the log + And I run :search baz + And I wait for "Ignoring duplicate search request for baz, but resetting flags" in the log + And I run :search-next + And I wait for "next_result found baz" in the log + Then "baz" should be found ## search.ignore_case |