diff options
Diffstat (limited to 'qutebrowser/browser/webkit/webkittab.py')
-rw-r--r-- | qutebrowser/browser/webkit/webkittab.py | 181 |
1 files changed, 92 insertions, 89 deletions
diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py index 0a1ac18f2..0916a0a64 100644 --- a/qutebrowser/browser/webkit/webkittab.py +++ b/qutebrowser/browser/webkit/webkittab.py @@ -17,6 +17,9 @@ # You should have received a copy of the GNU General Public License # along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. +# FIXME:qt6 (lint) +# pylint: disable=no-name-in-module + """Wrapper over our (QtWebKit) WebView.""" import re @@ -24,12 +27,12 @@ import functools import xml.etree.ElementTree from typing import cast, Iterable, Optional -from PyQt5.QtCore import pyqtSlot, Qt, QUrl, QPoint, QTimer, QSizeF, QSize -from PyQt5.QtGui import QIcon -from PyQt5.QtWidgets import QWidget -from PyQt5.QtWebKitWidgets import QWebPage, QWebFrame -from PyQt5.QtWebKit import QWebSettings, QWebHistory, QWebElement -from PyQt5.QtPrintSupport import QPrinter +from qutebrowser.qt.core import pyqtSlot, Qt, QUrl, QPoint, QTimer, QSizeF, QSize +from qutebrowser.qt.gui import QIcon +from qutebrowser.qt.widgets import QWidget +from qutebrowser.qt.webkitwidgets import QWebPage, QWebFrame +from qutebrowser.qt.webkit import QWebSettings, QWebHistory, QWebElement +from qutebrowser.qt.printsupport import QPrinter from qutebrowser.browser import browsertab, shared from qutebrowser.browser.webkit import (webview, webpage, tabhistory, webkitelem, @@ -44,7 +47,6 @@ class WebKitAction(browsertab.AbstractAction): """QtWebKit implementations related to web actions.""" - action_class = QWebPage action_base = QWebPage.WebAction _widget: webview.WebView @@ -67,9 +69,9 @@ class WebKitAction(browsertab.AbstractAction): """ new_actions = { # https://github.com/qtwebkit/qtwebkit/commit/a96d9ef5d24b02d996ad14ff050d0e485c9ddc97 - 'RequestClose': QWebPage.ToggleVideoFullscreen + 1, + 'RequestClose': QWebPage.WebAction.ToggleVideoFullscreen + 1, # https://github.com/qtwebkit/qtwebkit/commit/96b9ba6269a5be44343635a7aaca4a153ea0366b - 'Unselect': QWebPage.ToggleVideoFullscreen + 2, + 'Unselect': QWebPage.WebAction.ToggleVideoFullscreen + 2, } if name in new_actions: self._widget.triggerPageAction(new_actions[name]) # type: ignore[arg-type] @@ -93,13 +95,14 @@ class WebKitPrinting(browsertab.AbstractPrinting): def to_pdf(self, filename): printer = QPrinter() printer.setOutputFileName(filename) - self.to_printer(printer) + self._widget.print(printer) + # Can't find out whether there was an error... + self.pdf_printing_finished.emit(filename, True) - def to_printer(self, printer, callback=None): + def to_printer(self, printer): self._widget.print(printer) # Can't find out whether there was an error... - if callback is not None: - callback(True) + self.printing_finished.emit(True) class WebKitSearch(browsertab.AbstractSearch): @@ -118,9 +121,9 @@ class WebKitSearch(browsertab.AbstractSearch): def _args_to_flags(self, reverse, ignore_case): flags = self._empty_flags() if self._is_case_sensitive(ignore_case): - flags |= QWebPage.FindCaseSensitively + flags |= QWebPage.FindFlag.FindCaseSensitively if reverse: - flags |= QWebPage.FindBackward + flags |= QWebPage.FindFlag.FindBackward return flags def _call_cb(self, callback, found, text, flags, caller): @@ -139,7 +142,7 @@ class WebKitSearch(browsertab.AbstractSearch): # Removing FindWrapsAroundDocument to get the same logging as with # QtWebEngine debug_flags = debug.qflags_key( - QWebPage, flags & ~QWebPage.FindWrapsAroundDocument, + QWebPage, flags & ~QWebPage.FindFlag.FindWrapsAroundDocument, klass=QWebPage.FindFlag) if debug_flags != '0x0000': flag_text = 'with flags {}'.format(debug_flags) @@ -171,7 +174,7 @@ class WebKitSearch(browsertab.AbstractSearch): # We first clear the marked text, then the highlights self._widget.findText('') self._widget.findText( - '', QWebPage.HighlightAllOccurrences) # type: ignore[arg-type] + '', QWebPage.FindFlag.HighlightAllOccurrences) # type: ignore[arg-type] def search(self, text, *, ignore_case=usertypes.IgnoreCase.never, reverse=False, result_cb=None): @@ -192,7 +195,7 @@ class WebKitSearch(browsertab.AbstractSearch): # to get a mark so we can navigate. found = self._widget.findText(text, self._flags) self._widget.findText(text, - self._flags | QWebPage.HighlightAllOccurrences) + self._flags | QWebPage.FindFlag.HighlightAllOccurrences) self._call_cb(result_cb, found, text, self._flags, 'search') def next_result(self, *, wrap=False, callback=None): @@ -202,7 +205,7 @@ class WebKitSearch(browsertab.AbstractSearch): int(self._flags)) # type: ignore[call-overload] if wrap: - flags |= QWebPage.FindWrapsAroundDocument + flags |= QWebPage.FindFlag.FindWrapsAroundDocument found = self._widget.findText(self.text, flags) # type: ignore[arg-type] self._call_cb(callback, found, self.text, flags, 'next_result') @@ -213,13 +216,13 @@ class WebKitSearch(browsertab.AbstractSearch): flags = QWebPage.FindFlags( int(self._flags)) # type: ignore[call-overload] - if flags & QWebPage.FindBackward: - flags &= ~QWebPage.FindBackward + if flags & QWebPage.FindFlag.FindBackward: + flags &= ~QWebPage.FindFlag.FindBackward else: - flags |= QWebPage.FindBackward + flags |= QWebPage.FindFlag.FindBackward if wrap: - flags |= QWebPage.FindWrapsAroundDocument + flags |= QWebPage.FindFlag.FindWrapsAroundDocument found = self._widget.findText(self.text, flags) # type: ignore[arg-type] self._call_cb(callback, found, self.text, flags, 'prev_result') @@ -249,13 +252,13 @@ class WebKitCaret(browsertab.AbstractCaret): self._selection_state = browsertab.SelectionState.none self.selection_toggled.emit(self._selection_state) settings = self._widget.settings() - settings.setAttribute(QWebSettings.CaretBrowsingEnabled, True) + settings.setAttribute(QWebSettings.WebAttribute.CaretBrowsingEnabled, True) if self._widget.isVisible(): # Sometimes the caret isn't immediately visible, but unfocusing # and refocusing it fixes that. self._widget.clearFocus() - self._widget.setFocus(Qt.OtherFocusReason) + self._widget.setFocus(Qt.FocusReason.OtherFocusReason) # Move the caret to the first element in the viewport if there # isn't any text which is already selected. @@ -269,19 +272,19 @@ class WebKitCaret(browsertab.AbstractCaret): @pyqtSlot(usertypes.KeyMode) def _on_mode_left(self, _mode): settings = self._widget.settings() - if settings.testAttribute(QWebSettings.CaretBrowsingEnabled): + if settings.testAttribute(QWebSettings.WebAttribute.CaretBrowsingEnabled): if (self._selection_state is not browsertab.SelectionState.none and self._widget.hasSelection()): # Remove selection if it exists - self._widget.triggerPageAction(QWebPage.MoveToNextChar) - settings.setAttribute(QWebSettings.CaretBrowsingEnabled, False) + self._widget.triggerPageAction(QWebPage.WebAction.MoveToNextChar) + settings.setAttribute(QWebSettings.WebAttribute.CaretBrowsingEnabled, False) self._selection_state = browsertab.SelectionState.none def move_to_next_line(self, count=1): if self._selection_state is not browsertab.SelectionState.none: - act = QWebPage.SelectNextLine + act = QWebPage.WebAction.SelectNextLine else: - act = QWebPage.MoveToNextLine + act = QWebPage.WebAction.MoveToNextLine for _ in range(count): self._widget.triggerPageAction(act) if self._selection_state is browsertab.SelectionState.line: @@ -289,9 +292,9 @@ class WebKitCaret(browsertab.AbstractCaret): def move_to_prev_line(self, count=1): if self._selection_state is not browsertab.SelectionState.none: - act = QWebPage.SelectPreviousLine + act = QWebPage.WebAction.SelectPreviousLine else: - act = QWebPage.MoveToPreviousLine + act = QWebPage.WebAction.MoveToPreviousLine for _ in range(count): self._widget.triggerPageAction(act) if self._selection_state is browsertab.SelectionState.line: @@ -299,89 +302,89 @@ class WebKitCaret(browsertab.AbstractCaret): def move_to_next_char(self, count=1): if self._selection_state is browsertab.SelectionState.normal: - act = QWebPage.SelectNextChar + act = QWebPage.WebAction.SelectNextChar elif self._selection_state is browsertab.SelectionState.line: return else: - act = QWebPage.MoveToNextChar + act = QWebPage.WebAction.MoveToNextChar for _ in range(count): self._widget.triggerPageAction(act) def move_to_prev_char(self, count=1): if self._selection_state is browsertab.SelectionState.normal: - act = QWebPage.SelectPreviousChar + act = QWebPage.WebAction.SelectPreviousChar elif self._selection_state is browsertab.SelectionState.line: return else: - act = QWebPage.MoveToPreviousChar + act = QWebPage.WebAction.MoveToPreviousChar for _ in range(count): self._widget.triggerPageAction(act) def move_to_end_of_word(self, count=1): if self._selection_state is browsertab.SelectionState.normal: - act = [QWebPage.SelectNextWord] + act = [QWebPage.WebAction.SelectNextWord] if utils.is_windows: # pragma: no cover - act.append(QWebPage.SelectPreviousChar) + act.append(QWebPage.WebAction.SelectPreviousChar) elif self._selection_state is browsertab.SelectionState.line: return else: - act = [QWebPage.MoveToNextWord] + act = [QWebPage.WebAction.MoveToNextWord] if utils.is_windows: # pragma: no cover - act.append(QWebPage.MoveToPreviousChar) + act.append(QWebPage.WebAction.MoveToPreviousChar) for _ in range(count): for a in act: self._widget.triggerPageAction(a) def move_to_next_word(self, count=1): if self._selection_state is browsertab.SelectionState.normal: - act = [QWebPage.SelectNextWord] + act = [QWebPage.WebAction.SelectNextWord] if not utils.is_windows: # pragma: no branch - act.append(QWebPage.SelectNextChar) + act.append(QWebPage.WebAction.SelectNextChar) elif self._selection_state is browsertab.SelectionState.line: return else: - act = [QWebPage.MoveToNextWord] + act = [QWebPage.WebAction.MoveToNextWord] if not utils.is_windows: # pragma: no branch - act.append(QWebPage.MoveToNextChar) + act.append(QWebPage.WebAction.MoveToNextChar) for _ in range(count): for a in act: self._widget.triggerPageAction(a) def move_to_prev_word(self, count=1): if self._selection_state is browsertab.SelectionState.normal: - act = QWebPage.SelectPreviousWord + act = QWebPage.WebAction.SelectPreviousWord elif self._selection_state is browsertab.SelectionState.line: return else: - act = QWebPage.MoveToPreviousWord + act = QWebPage.WebAction.MoveToPreviousWord for _ in range(count): self._widget.triggerPageAction(act) def move_to_start_of_line(self): if self._selection_state is browsertab.SelectionState.normal: - act = QWebPage.SelectStartOfLine + act = QWebPage.WebAction.SelectStartOfLine elif self._selection_state is browsertab.SelectionState.line: return else: - act = QWebPage.MoveToStartOfLine + act = QWebPage.WebAction.MoveToStartOfLine self._widget.triggerPageAction(act) def move_to_end_of_line(self): if self._selection_state is browsertab.SelectionState.normal: - act = QWebPage.SelectEndOfLine + act = QWebPage.WebAction.SelectEndOfLine elif self._selection_state is browsertab.SelectionState.line: return else: - act = QWebPage.MoveToEndOfLine + act = QWebPage.WebAction.MoveToEndOfLine self._widget.triggerPageAction(act) def move_to_start_of_next_block(self, count=1): if self._selection_state is not browsertab.SelectionState.none: - act = [QWebPage.SelectNextLine, - QWebPage.SelectStartOfBlock] + act = [QWebPage.WebAction.SelectNextLine, + QWebPage.WebAction.SelectStartOfBlock] else: - act = [QWebPage.MoveToNextLine, - QWebPage.MoveToStartOfBlock] + act = [QWebPage.WebAction.MoveToNextLine, + QWebPage.WebAction.MoveToStartOfBlock] for _ in range(count): for a in act: self._widget.triggerPageAction(a) @@ -390,11 +393,11 @@ class WebKitCaret(browsertab.AbstractCaret): def move_to_start_of_prev_block(self, count=1): if self._selection_state is not browsertab.SelectionState.none: - act = [QWebPage.SelectPreviousLine, - QWebPage.SelectStartOfBlock] + act = [QWebPage.WebAction.SelectPreviousLine, + QWebPage.WebAction.SelectStartOfBlock] else: - act = [QWebPage.MoveToPreviousLine, - QWebPage.MoveToStartOfBlock] + act = [QWebPage.WebAction.MoveToPreviousLine, + QWebPage.WebAction.MoveToStartOfBlock] for _ in range(count): for a in act: self._widget.triggerPageAction(a) @@ -403,11 +406,11 @@ class WebKitCaret(browsertab.AbstractCaret): def move_to_end_of_next_block(self, count=1): if self._selection_state is not browsertab.SelectionState.none: - act = [QWebPage.SelectNextLine, - QWebPage.SelectEndOfBlock] + act = [QWebPage.WebAction.SelectNextLine, + QWebPage.WebAction.SelectEndOfBlock] else: - act = [QWebPage.MoveToNextLine, - QWebPage.MoveToEndOfBlock] + act = [QWebPage.WebAction.MoveToNextLine, + QWebPage.WebAction.MoveToEndOfBlock] for _ in range(count): for a in act: self._widget.triggerPageAction(a) @@ -416,9 +419,9 @@ class WebKitCaret(browsertab.AbstractCaret): def move_to_end_of_prev_block(self, count=1): if self._selection_state is not browsertab.SelectionState.none: - act = [QWebPage.SelectPreviousLine, QWebPage.SelectEndOfBlock] + act = [QWebPage.WebAction.SelectPreviousLine, QWebPage.WebAction.SelectEndOfBlock] else: - act = [QWebPage.MoveToPreviousLine, QWebPage.MoveToEndOfBlock] + act = [QWebPage.WebAction.MoveToPreviousLine, QWebPage.WebAction.MoveToEndOfBlock] for _ in range(count): for a in act: self._widget.triggerPageAction(a) @@ -427,18 +430,18 @@ class WebKitCaret(browsertab.AbstractCaret): def move_to_start_of_document(self): if self._selection_state is not browsertab.SelectionState.none: - act = QWebPage.SelectStartOfDocument + act = QWebPage.WebAction.SelectStartOfDocument else: - act = QWebPage.MoveToStartOfDocument + act = QWebPage.WebAction.MoveToStartOfDocument self._widget.triggerPageAction(act) if self._selection_state is browsertab.SelectionState.line: self._select_line() def move_to_end_of_document(self): if self._selection_state is not browsertab.SelectionState.none: - act = QWebPage.SelectEndOfDocument + act = QWebPage.WebAction.SelectEndOfDocument else: - act = QWebPage.MoveToEndOfDocument + act = QWebPage.WebAction.MoveToEndOfDocument self._widget.triggerPageAction(act) def toggle_selection(self, line=False): @@ -455,7 +458,7 @@ class WebKitCaret(browsertab.AbstractCaret): self.selection_toggled.emit(self._selection_state) def drop_selection(self): - self._widget.triggerPageAction(QWebPage.MoveToNextChar) + self._widget.triggerPageAction(QWebPage.WebAction.MoveToNextChar) def selection(self, callback): callback(self._widget.selectedText()) @@ -470,9 +473,9 @@ class WebKitCaret(browsertab.AbstractCaret): }""") def _select_line(self): - self._widget.triggerPageAction(QWebPage.SelectStartOfLine) + self._widget.triggerPageAction(QWebPage.WebAction.SelectStartOfLine) self.reverse_selection() - self._widget.triggerPageAction(QWebPage.SelectEndOfLine) + self._widget.triggerPageAction(QWebPage.WebAction.SelectEndOfLine) self.reverse_selection() def _select_line_to_end(self): @@ -480,11 +483,11 @@ class WebKitCaret(browsertab.AbstractCaret): # of focus) has to be checked before moving selection # to the end of line if self._js_selection_left_to_right(): - self._widget.triggerPageAction(QWebPage.SelectEndOfLine) + self._widget.triggerPageAction(QWebPage.WebAction.SelectEndOfLine) def _select_line_to_start(self): if not self._js_selection_left_to_right(): - self._widget.triggerPageAction(QWebPage.SelectStartOfLine) + self._widget.triggerPageAction(QWebPage.WebAction.SelectStartOfLine) def _js_selection_left_to_right(self): """Return True iff the selection's direction is left to right.""" @@ -497,7 +500,7 @@ class WebKitCaret(browsertab.AbstractCaret): def _follow_selected(self, *, tab=False): if QWebSettings.globalSettings().testAttribute( - QWebSettings.JavascriptEnabled): + QWebSettings.WebAttribute.JavascriptEnabled): if tab: self._tab.data.override_target = usertypes.ClickTarget.tab self._tab.run_js_async(""" @@ -599,7 +602,7 @@ class WebKitScroller(browsertab.AbstractScroller): elif x is None and y == 100: self.bottom() else: - for val, orientation in [(x, Qt.Horizontal), (y, Qt.Vertical)]: + for val, orientation in [(x, Qt.Orientation.Horizontal), (y, Qt.Orientation.Vertical)]: if val is not None: frame = self._widget.page().mainFrame() maximum = frame.scrollBarMaximum(orientation) @@ -624,36 +627,36 @@ class WebKitScroller(browsertab.AbstractScroller): self._tab.fake_key_press(key) def up(self, count=1): - self._key_press(Qt.Key_Up, count, 'scrollBarMinimum', Qt.Vertical) + self._key_press(Qt.Key.Key_Up, count, 'scrollBarMinimum', Qt.Orientation.Vertical) def down(self, count=1): - self._key_press(Qt.Key_Down, count, 'scrollBarMaximum', Qt.Vertical) + self._key_press(Qt.Key.Key_Down, count, 'scrollBarMaximum', Qt.Orientation.Vertical) def left(self, count=1): - self._key_press(Qt.Key_Left, count, 'scrollBarMinimum', Qt.Horizontal) + self._key_press(Qt.Key.Key_Left, count, 'scrollBarMinimum', Qt.Orientation.Horizontal) def right(self, count=1): - self._key_press(Qt.Key_Right, count, 'scrollBarMaximum', Qt.Horizontal) + self._key_press(Qt.Key.Key_Right, count, 'scrollBarMaximum', Qt.Orientation.Horizontal) def top(self): - self._key_press(Qt.Key_Home) + self._key_press(Qt.Key.Key_Home) def bottom(self): - self._key_press(Qt.Key_End) + self._key_press(Qt.Key.Key_End) def page_up(self, count=1): - self._key_press(Qt.Key_PageUp, count, 'scrollBarMinimum', Qt.Vertical) + self._key_press(Qt.Key.Key_PageUp, count, 'scrollBarMinimum', Qt.Orientation.Vertical) def page_down(self, count=1): - self._key_press(Qt.Key_PageDown, count, 'scrollBarMaximum', - Qt.Vertical) + self._key_press(Qt.Key.Key_PageDown, count, 'scrollBarMaximum', + Qt.Orientation.Vertical) def at_top(self): return self.pos_px().y() == 0 def at_bottom(self): frame = self._widget.page().currentFrame() - return self.pos_px().y() >= frame.scrollBarMaximum(Qt.Vertical) + return self.pos_px().y() >= frame.scrollBarMaximum(Qt.Orientation.Vertical) class WebKitHistoryPrivate(browsertab.AbstractHistoryPrivate): @@ -882,7 +885,7 @@ class WebKitTab(browsertab.AbstractTab): tab=self, parent=self) self.zoom = WebKitZoom(tab=self, parent=self) self.search = WebKitSearch(tab=self, parent=self) - self.printing = WebKitPrinting(tab=self) + self.printing = WebKitPrinting(tab=self, parent=self) self.elements = WebKitElements(tab=self) self.action = WebKitAction(tab=self) self.audio = WebKitAudio(tab=self, parent=self) @@ -899,7 +902,7 @@ class WebKitTab(browsertab.AbstractTab): def _make_private(self, widget): settings = widget.settings() - settings.setAttribute(QWebSettings.PrivateBrowsingEnabled, True) + settings.setAttribute(QWebSettings.WebAttribute.PrivateBrowsingEnabled, True) def load_url(self, url): self._load_url_prepare(url) @@ -931,9 +934,9 @@ class WebKitTab(browsertab.AbstractTab): def reload(self, *, force=False): if force: - action = QWebPage.ReloadAndBypassCache + action = QWebPage.WebAction.ReloadAndBypassCache else: - action = QWebPage.Reload + action = QWebPage.WebAction.Reload self._widget.triggerPageAction(action) def stop(self): |