diff options
Diffstat (limited to 'qutebrowser/browser/webelem.py')
-rw-r--r-- | qutebrowser/browser/webelem.py | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/qutebrowser/browser/webelem.py b/qutebrowser/browser/webelem.py index a734f15b8..7192b758e 100644 --- a/qutebrowser/browser/webelem.py +++ b/qutebrowser/browser/webelem.py @@ -21,13 +21,12 @@ from typing import Iterator, Optional, Set, TYPE_CHECKING, Union, Dict import collections.abc - -from qutebrowser.qt.core import QUrl, Qt, QEvent, QTimer, QRect, QPointF -from qutebrowser.qt.gui import QMouseEvent +from qutebrowser.qt import gui from qutebrowser.config import config from qutebrowser.keyinput import modeman from qutebrowser.utils import log, usertypes, utils, qtutils, objreg +from qutebrowser.qt import core if TYPE_CHECKING: from qutebrowser.browser import browsertab @@ -46,7 +45,7 @@ class OrphanedError(Error): """Raised when a webelement's parent has vanished.""" -def css_selector(group: str, url: QUrl) -> str: +def css_selector(group: str, url: core.QUrl) -> str: """Get a CSS selector for the given group/URL.""" selectors = config.instance.get('hints.selectors', url) if group not in selectors: @@ -98,7 +97,7 @@ class AbstractWebElement(collections.abc.MutableMapping): # type: ignore[type-a """Check if this element has a valid frame attached.""" raise NotImplementedError - def geometry(self) -> QRect: + def geometry(self) -> core.QRect: """Get the geometry for this element.""" raise NotImplementedError @@ -144,8 +143,8 @@ class AbstractWebElement(collections.abc.MutableMapping): # type: ignore[type-a """Insert the given text into the element.""" raise NotImplementedError - def rect_on_view(self, *, elem_geometry: QRect = None, - no_js: bool = False) -> QRect: + def rect_on_view(self, *, elem_geometry: core.QRect = None, + no_js: bool = False) -> core.QRect: """Get the geometry of the element relative to the webview. Args: @@ -281,7 +280,7 @@ class AbstractWebElement(collections.abc.MutableMapping): # type: ignore[type-a """Remove target from link.""" raise NotImplementedError - def resolve_url(self, baseurl: QUrl) -> Optional[QUrl]: + def resolve_url(self, baseurl: core.QUrl) -> Optional[core.QUrl]: """Resolve the URL in the element's src/href attribute. Args: @@ -300,7 +299,7 @@ class AbstractWebElement(collections.abc.MutableMapping): # type: ignore[type-a else: return None - url = QUrl(text) + url = core.QUrl(text) if not url.isValid(): return None if url.isRelative(): @@ -317,7 +316,7 @@ class AbstractWebElement(collections.abc.MutableMapping): # type: ignore[type-a """Return True if clicking this element needs user interaction.""" raise NotImplementedError - def _mouse_pos(self) -> QPointF: + def _mouse_pos(self) -> core.QPointF: """Get the position to click/hover.""" # Click the center of the largest square fitting into the top/left # corner of the rectangle, this will help if part of the <a> element @@ -331,43 +330,43 @@ class AbstractWebElement(collections.abc.MutableMapping): # type: ignore[type-a pos = rect.center() if pos.x() < 0 or pos.y() < 0: raise Error("Element position is out of view!") - return QPointF(pos) + return core.QPointF(pos) def _move_text_cursor(self) -> None: """Move cursor to end after clicking.""" raise NotImplementedError def _click_fake_event(self, click_target: usertypes.ClickTarget, - button: Qt.MouseButton = Qt.MouseButton.LeftButton) -> None: + button: core.Qt.MouseButton = core.Qt.MouseButton.LeftButton) -> None: """Send a fake click event to the element.""" pos = self._mouse_pos() log.webelem.debug("Sending fake click to {!r} at position {} with " "target {}".format(self, pos, click_target)) - target_modifiers: Dict[usertypes.ClickTarget, Qt.KeyboardModifier] = { - usertypes.ClickTarget.normal: Qt.KeyboardModifier.NoModifier, - usertypes.ClickTarget.window: Qt.KeyboardModifier.AltModifier | Qt.KeyboardModifier.ShiftModifier, - usertypes.ClickTarget.tab: Qt.KeyboardModifier.ControlModifier, - usertypes.ClickTarget.tab_bg: Qt.KeyboardModifier.ControlModifier, + target_modifiers: Dict[usertypes.ClickTarget, core.Qt.KeyboardModifier] = { + usertypes.ClickTarget.normal: core.Qt.KeyboardModifier.NoModifier, + usertypes.ClickTarget.window: core.Qt.KeyboardModifier.AltModifier | core.Qt.KeyboardModifier.ShiftModifier, + usertypes.ClickTarget.tab: core.Qt.KeyboardModifier.ControlModifier, + usertypes.ClickTarget.tab_bg: core.Qt.KeyboardModifier.ControlModifier, } if config.val.tabs.background: - target_modifiers[usertypes.ClickTarget.tab] |= Qt.KeyboardModifier.ShiftModifier + target_modifiers[usertypes.ClickTarget.tab] |= core.Qt.KeyboardModifier.ShiftModifier else: - target_modifiers[usertypes.ClickTarget.tab_bg] |= Qt.KeyboardModifier.ShiftModifier + target_modifiers[usertypes.ClickTarget.tab_bg] |= core.Qt.KeyboardModifier.ShiftModifier modifiers = target_modifiers[click_target] events = [ - QMouseEvent(QEvent.Type.MouseMove, pos, Qt.MouseButton.NoButton, Qt.MouseButton.NoButton, Qt.KeyboardModifier.NoModifier), - QMouseEvent(QEvent.Type.MouseButtonPress, pos, button, button, modifiers), - QMouseEvent(QEvent.Type.MouseButtonRelease, pos, button, Qt.MouseButton.NoButton, modifiers), + gui.QMouseEvent(core.QEvent.Type.MouseMove, pos, core.Qt.MouseButton.NoButton, core.Qt.MouseButton.NoButton, core.Qt.KeyboardModifier.NoModifier), + gui.QMouseEvent(core.QEvent.Type.MouseButtonPress, pos, button, button, modifiers), + gui.QMouseEvent(core.QEvent.Type.MouseButtonRelease, pos, button, core.Qt.MouseButton.NoButton, modifiers), ] for evt in events: self._tab.send_event(evt) - QTimer.singleShot(0, self._move_text_cursor) + core.QTimer.singleShot(0, self._move_text_cursor) def _click_editable(self, click_target: usertypes.ClickTarget) -> None: """Fake a click on an editable input field.""" @@ -445,11 +444,11 @@ class AbstractWebElement(collections.abc.MutableMapping): # type: ignore[type-a def hover(self) -> None: """Simulate a mouse hover over the element.""" pos = self._mouse_pos() - event = QMouseEvent(QEvent.Type.MouseMove, pos, Qt.MouseButton.NoButton, Qt.MouseButton.NoButton, - Qt.KeyboardModifier.NoModifier) + event = gui.QMouseEvent(core.QEvent.Type.MouseMove, pos, core.Qt.MouseButton.NoButton, core.Qt.MouseButton.NoButton, + core.Qt.KeyboardModifier.NoModifier) self._tab.send_event(event) def right_click(self) -> None: """Simulate a right-click on the element.""" self._click_fake_event(usertypes.ClickTarget.normal, - button=Qt.MouseButton.RightButton) + button=core.Qt.MouseButton.RightButton) |