From 4d101eea598753a42550e252bff7715d3040ee1e Mon Sep 17 00:00:00 2001 From: rikn00 Date: Sun, 2 Nov 2014 16:37:34 +0200 Subject: [PATCH] Improve hovering a hint --- qutebrowser/browser/hints.py | 45 +++++++++++--------------------- qutebrowser/config/configdata.py | 2 +- 2 files changed, 16 insertions(+), 31 deletions(-) diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index 4e8415bf6..05fb51e85 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -115,7 +115,7 @@ class HintManager(QObject): Target.yank: "Yank hint to clipboard...", Target.yank_primary: "Yank hint to primary selection...", Target.fill: "Set hint in commandline...", - Target.hover: "Hover over a hint", + Target.hover: "Hover over a hint...", Target.rapid: "Follow hint (rapid mode)...", Target.rapid_win: "Follow hint in new window (rapid mode)...", Target.download: "Download hint...", @@ -336,44 +336,29 @@ class HintManager(QObject): target = Target.window else: target = self._context.target - self.set_open_target.emit(target.name) # FIXME Instead of clicking the center, we could have nicer heuristics. # e.g. parse (-webkit-)border-radius correctly and click text fields at # the bottom right, and everything else on the top left or so. # https://github.com/The-Compiler/qutebrowser/issues/70 pos = elem.rect_on_view().center() - log.hints.debug("Clicking on '{}' at {}/{}".format( - elem, pos.x(), pos.y())) - events = ( + action = "Hovering" if target == Target.hover else "Clicking" + log.hints.debug("{} on '{}' at {}/{}".format( + action, elem, pos.x(), pos.y())) + events = [ QMouseEvent(QEvent.MouseMove, pos, Qt.NoButton, Qt.NoButton, Qt.NoModifier), - QMouseEvent(QEvent.MouseButtonPress, pos, Qt.LeftButton, - Qt.NoButton, Qt.NoModifier), - QMouseEvent(QEvent.MouseButtonRelease, pos, Qt.LeftButton, - Qt.NoButton, Qt.NoModifier), - ) + ] + if target != Target.hover: + self.set_open_target.emit(target.name) + events += [ + QMouseEvent(QEvent.MouseButtonPress, pos, Qt.LeftButton, + Qt.NoButton, Qt.NoModifier), + QMouseEvent(QEvent.MouseButtonRelease, pos, Qt.LeftButton, + Qt.NoButton, Qt.NoModifier), + ] for evt in events: self.mouse_event.emit(evt) - def _hover(self, elem): - """Hover over an element. - - Args: - elem: The QWebElement to hover. - """ - target = self._context.target - self.set_open_target.emit(target.name) - # FIXME Instead of clicking the center, we could have nicer heuristics. - # e.g. parse (-webkit-)border-radius correctly and click text fields at - # the bottom right, and everything else on the top left or so. - # https://github.com/The-Compiler/qutebrowser/issues/70 - pos = elem.rect_on_view().center() - log.hints.debug("Hovering on '{}' at {}/{}".format( - elem, pos.x(), pos.y())) - event = QMouseEvent( - QEvent.MouseMove, pos, Qt.NoButton, Qt.NoButton, Qt.NoModifier) - self.mouse_event.emit(event) - def _yank(self, url): """Yank an element to the clipboard or primary selection. @@ -705,7 +690,7 @@ class HintManager(QObject): Target.window: self._click, Target.rapid: self._click, Target.rapid_win: self._click, - Target.hover: self._hover, + Target.hover: self._click, # _download needs a QWebElement to get the frame. Target.download: self._download, } diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index dd0faea75..a7cfacf65 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -923,7 +923,7 @@ KEY_DATA = collections.OrderedDict([ ('hint all tab', ['F']), ('hint all window', ['wf']), ('hint all tab-bg', [';b']), - ('hint all hover', ['e']), + ('hint all hover', [';h']), ('hint images', [';i']), ('hint images tab', [';I']), ('hint images tab-bg', ['.i']),