From f926e7b850835fab7bfcde3a24d3faebee99562c Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Fri, 23 Feb 2018 17:49:47 -0500 Subject: [PATCH 1/3] Emulate webkit duplicate search behavior on webengine --- qutebrowser/browser/commands.py | 4 ++-- qutebrowser/browser/webengine/webenginetab.py | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index 69cb3142f..6c2e3da8c 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -1778,10 +1778,10 @@ class CommandDispatcher: """ self.set_mark("'") tab = self._current_widget() - if tab.search.search_displayed: - tab.search.clear() if not text: + if tab.search.search_displayed: + tab.search.clear() return options = { diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 4595f7a6e..1b0ee5541 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -183,6 +183,11 @@ class WebEngineSearch(browsertab.AbstractSearch): def search(self, text, *, ignore_case='never', reverse=False, result_cb=None): + # When duplicate searching, don't search again (webkit behavior) + if self.text == text and self.search_displayed: + log.webview.debug("Ignoring duplicate search request") + return + self.text = text self._flags = QWebEnginePage.FindFlags(0) if self._is_case_sensitive(ignore_case): From 4602afe770007f3028cf6aaddd12bcb6dcfdb0cb Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Fri, 23 Feb 2018 18:13:10 -0500 Subject: [PATCH 2/3] Add a webengine duplicate search test --- qutebrowser/browser/webengine/webenginetab.py | 3 ++- tests/end2end/features/search.feature | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 1b0ee5541..4c4de14c0 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -185,7 +185,8 @@ class WebEngineSearch(browsertab.AbstractSearch): result_cb=None): # When duplicate searching, don't search again (webkit behavior) if self.text == text and self.search_displayed: - log.webview.debug("Ignoring duplicate search request") + log.webview.debug("Ignoring duplicate search request" + " for {}".format(text)) return self.text = text diff --git a/tests/end2end/features/search.feature b/tests/end2end/features/search.feature index ae3f07999..e322b93a2 100644 --- a/tests/end2end/features/search.feature +++ b/tests/end2end/features/search.feature @@ -52,6 +52,13 @@ Feature: Searching on a page And I wait for "search didn't find blub" in the log Then the warning "Text 'blub' not found on page!" should be shown + @qtwebkit_skip: Supported by default on qtwebkit + Scenario: Searching text duplicates + 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 + ## search.ignore_case Scenario: Searching text with search.ignore_case = always From 7a8fa5f46eccb45cf5aeea828cff8b89aa46c1e3 Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Sun, 25 Feb 2018 18:40:16 -0500 Subject: [PATCH 3/3] Implement deduplication of searches on webkit --- qutebrowser/browser/webengine/webenginetab.py | 2 +- qutebrowser/browser/webkit/webkittab.py | 8 +++++++- tests/end2end/features/search.feature | 1 - 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 4c4de14c0..9dc2c3737 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -183,7 +183,7 @@ class WebEngineSearch(browsertab.AbstractSearch): def search(self, text, *, ignore_case='never', reverse=False, result_cb=None): - # When duplicate searching, don't search again (webkit behavior) + # 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)) diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py index aa3f5363e..5c038de62 100644 --- a/qutebrowser/browser/webkit/webkittab.py +++ b/qutebrowser/browser/webkit/webkittab.py @@ -146,8 +146,14 @@ class WebKitSearch(browsertab.AbstractSearch): def search(self, text, *, ignore_case='never', reverse=False, result_cb=None): - self.search_displayed = True + # 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)) + return + self.text = text + self.search_displayed = True self._flags = QWebPage.FindWrapsAroundDocument if self._is_case_sensitive(ignore_case): self._flags |= QWebPage.FindCaseSensitively diff --git a/tests/end2end/features/search.feature b/tests/end2end/features/search.feature index e322b93a2..55d9a98e9 100644 --- a/tests/end2end/features/search.feature +++ b/tests/end2end/features/search.feature @@ -52,7 +52,6 @@ Feature: Searching on a page And I wait for "search didn't find blub" in the log Then the warning "Text 'blub' not found on page!" should be shown - @qtwebkit_skip: Supported by default on qtwebkit Scenario: Searching text duplicates When I run :search foo And I wait for "search found foo" in the log