summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qutebrowser/browser/browsertab.py8
-rw-r--r--qutebrowser/browser/commands.py11
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py31
-rw-r--r--qutebrowser/browser/webkit/webkittab.py26
4 files changed, 36 insertions, 40 deletions
diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py
index 7745cff4b..f2ed3f084 100644
--- a/qutebrowser/browser/browsertab.py
+++ b/qutebrowser/browser/browsertab.py
@@ -377,7 +377,6 @@ class AbstractSearch(QObject):
def search(self, text: str, *,
ignore_case: usertypes.IgnoreCase = usertypes.IgnoreCase.never,
reverse: bool = False,
- wrap: bool = True,
result_cb: _Callback = None) -> None:
"""Find the given text on the page.
@@ -385,7 +384,6 @@ class AbstractSearch(QObject):
text: The text to search for.
ignore_case: Search case-insensitively.
reverse: Reverse search direction.
- wrap: Allow wrapping at the top or bottom of the page.
result_cb: Called with a bool indicating whether a match was found.
"""
raise NotImplementedError
@@ -394,18 +392,20 @@ class AbstractSearch(QObject):
"""Clear the current search."""
raise NotImplementedError
- def prev_result(self, *, result_cb: _Callback = None) -> None:
+ def prev_result(self, *, wrap: bool = False, result_cb: _Callback = None) -> None:
"""Go to the previous result of the current search.
Args:
+ wrap: Allow wrapping at the top or bottom of the page.
result_cb: Called with a bool indicating whether a match was found.
"""
raise NotImplementedError
- def next_result(self, *, result_cb: _Callback = None) -> None:
+ def next_result(self, *, wrap: bool = False, result_cb: _Callback = None) -> None:
"""Go to the next result of the current search.
Args:
+ wrap: Allow wrapping at the top or bottom of the page.
result_cb: Called with a bool indicating whether a match was found.
"""
raise NotImplementedError
diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py
index 50dae13ea..073fe1c49 100644
--- a/qutebrowser/browser/commands.py
+++ b/qutebrowser/browser/commands.py
@@ -1597,7 +1597,6 @@ class CommandDispatcher:
options = {
'ignore_case': config.val.search.ignore_case,
'reverse': reverse,
- 'wrap': config.val.search.wrap,
}
self._tabbed_browser.search_text = text
@@ -1641,10 +1640,11 @@ class CommandDispatcher:
old_match=tab.search.match,
options=window_options, text=window_text,
prev=False)
+ wrap = config.val.search.wrap
for _ in range(count - 1):
- tab.search.next_result()
- tab.search.next_result(result_cb=cb)
+ tab.search.next_result(wrap=wrap)
+ tab.search.next_result(result_cb=cb, wrap=wrap)
@cmdutils.register(instance='command-dispatcher', scope='window')
@cmdutils.argument('count', value=cmdutils.Value.count)
@@ -1675,10 +1675,11 @@ class CommandDispatcher:
old_match=tab.search.match,
options=window_options, text=window_text,
prev=True)
+ wrap = config.val.search.wrap
for _ in range(count - 1):
- tab.search.prev_result()
- tab.search.prev_result(result_cb=cb)
+ tab.search.prev_result(wrap=wrap)
+ tab.search.prev_result(result_cb=cb, wrap=wrap)
def _jseval_cb(self, out):
"""Show the data returned from JS."""
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py
index 3ad1d99a7..f1d1a0cbb 100644
--- a/qutebrowser/browser/webengine/webenginetab.py
+++ b/qutebrowser/browser/webengine/webenginetab.py
@@ -103,10 +103,6 @@ class WebEngineSearch(browsertab.AbstractSearch):
Attributes:
_flags: The QWebEnginePage.FindFlags of the last search.
- _flag_wrap: An additional flag indicating whether the last search
- used wrapping.
- _nowrap_available: Whether the functionality to prevent wrapping
- is available.
_pending_searches: How many searches have been started but not called
back yet.
@@ -118,8 +114,6 @@ class WebEngineSearch(browsertab.AbstractSearch):
super().__init__(tab, parent)
self._flags = self._empty_flags()
self._pending_searches = 0
- self._flag_wrap = None
- self._nowrap_available = False # gets set in connect_signals
def _empty_flags(self):
return QWebEnginePage.FindFlags(0)
@@ -150,7 +144,6 @@ class WebEngineSearch(browsertab.AbstractSearch):
"to rebuild PyQtWebEngine.")
return
- self._nowrap_available = True
self._widget.page().findTextFinished.connect(self._on_find_finished)
def _find(self, text, flags, callback, caller):
@@ -199,7 +192,7 @@ class WebEngineSearch(browsertab.AbstractSearch):
self.match_changed.emit(self.match)
def search(self, text, *, ignore_case=usertypes.IgnoreCase.never,
- reverse=False, wrap=True, result_cb=None):
+ reverse=False, result_cb=None):
# Don't go to next entry on duplicate search
if self.text == text and self.search_displayed:
log.webview.debug("Ignoring duplicate search request"
@@ -210,7 +203,6 @@ class WebEngineSearch(browsertab.AbstractSearch):
self.text = text
self._flags = self._args_to_flags(reverse, ignore_case)
self.match.reset()
- self._flag_wrap = wrap
self._find(text, self._flags, result_cb, 'search')
@@ -222,33 +214,26 @@ class WebEngineSearch(browsertab.AbstractSearch):
self.match.reset()
self._widget.page().findText('')
- def _prevent_wrapping(self, going_up: bool) -> bool:
- """Whether wrapping should be prevented."""
- assert self._flag_wrap is not None
- return (
- self._nowrap_available and
- not self._flag_wrap and
- self.match.at_limit(going_up)
- )
-
- def prev_result(self, *, result_cb=None):
+ def prev_result(self, *, wrap=False, result_cb=None):
# The int() here makes sure we get a copy of the flags.
flags = QWebEnginePage.FindFlags(int(self._flags))
+
if flags & QWebEnginePage.FindBackward:
- if self._prevent_wrapping(going_up=False):
+ if self.match.at_limit(going_up=False) and not wrap:
result_cb(True)
return
flags &= ~QWebEnginePage.FindBackward
else:
- if self._prevent_wrapping(going_up=True):
+ if self.match.at_limit(going_up=True) and not wrap:
result_cb(True)
return
flags |= QWebEnginePage.FindBackward
+
self._find(self.text, flags, result_cb, 'prev_result')
- def next_result(self, *, result_cb=None):
+ def next_result(self, *, wrap=False, result_cb=None):
going_up = self._flags & QWebEnginePage.FindBackward
- if self._prevent_wrapping(going_up=going_up):
+ if self.match.at_limit(going_up=going_up) and not wrap:
result_cb(True)
return
self._find(self.text, self._flags, result_cb, 'next_result')
diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py
index 24d232c9c..05e48b2f6 100644
--- a/qutebrowser/browser/webkit/webkittab.py
+++ b/qutebrowser/browser/webkit/webkittab.py
@@ -115,14 +115,12 @@ 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):
+ def _args_to_flags(self, reverse, ignore_case):
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):
@@ -164,12 +162,12 @@ class WebKitSearch(browsertab.AbstractSearch):
'', QWebPage.HighlightAllOccurrences) # type: ignore[arg-type]
def search(self, text, *, ignore_case=usertypes.IgnoreCase.never,
- reverse=False, wrap=True, result_cb=None):
+ reverse=False, result_cb=None):
# 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 {}, but resetting flags".format(text))
- self._flags = self._args_to_flags(reverse, ignore_case, wrap)
+ self._flags = self._args_to_flags(reverse, ignore_case)
return
# Clear old search results, this is done automatically on QtWebEngine.
@@ -177,7 +175,7 @@ class WebKitSearch(browsertab.AbstractSearch):
self.text = text
self.search_displayed = True
- self._flags = self._args_to_flags(reverse, ignore_case, wrap)
+ self._flags = self._args_to_flags(reverse, ignore_case)
# 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)
@@ -185,20 +183,32 @@ class WebKitSearch(browsertab.AbstractSearch):
self._flags | QWebPage.HighlightAllOccurrences)
self._call_cb(result_cb, found, text, self._flags, 'search')
- def next_result(self, *, result_cb=None):
+ def next_result(self, *, wrap=False, result_cb=None):
self.search_displayed = True
+ # The int() here makes sure we get a copy of the flags.
+ flags = QWebPage.FindFlags(
+ int(self._flags)) # type: ignore[call-overload]
+
+ if wrap:
+ flags |= QWebPage.FindWrapsAroundDocument
+
found = self._widget.findText(self.text, self._flags) # type: ignore[arg-type]
self._call_cb(result_cb, found, self.text, self._flags, 'next_result')
- def prev_result(self, *, result_cb=None):
+ def prev_result(self, *, wrap=False, result_cb=None):
self.search_displayed = True
# The int() here makes sure we get a copy of the flags.
flags = QWebPage.FindFlags(
int(self._flags)) # type: ignore[call-overload]
+
if flags & QWebPage.FindBackward:
flags &= ~QWebPage.FindBackward
else:
flags |= QWebPage.FindBackward
+
+ if wrap:
+ flags |= QWebPage.FindWrapsAroundDocument
+
found = self._widget.findText(self.text, flags) # type: ignore[arg-type]
self._call_cb(result_cb, found, self.text, flags, 'prev_result')