From 76935291c0856a21c0e4266fd478ede3b4ef0d94 Mon Sep 17 00:00:00 2001 From: Kevin Velghe Date: Mon, 28 Mar 2016 13:15:22 +0200 Subject: [PATCH] Open links in current tab Fix for #676 It removes the target of the link, as to prevent the website to overrule the user. I guess the following things should be done: - add setting to enable/disable this behaviour - and/or add "hint all current" Only the first one would be easiest. The second one requires us to keep track of the original target. I should open a pull request for discussion. --- qutebrowser/browser/hints.py | 1 + qutebrowser/browser/webelem.py | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index 26fd02fbc..4bc9941a8 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -463,6 +463,7 @@ class HintManager(QObject): QMouseEvent(QEvent.MouseButtonRelease, pos, Qt.LeftButton, Qt.NoButton, modifiers), ] + elem.remove_target() for evt in events: self.mouse_event.emit(evt) if elem.is_text_input() and elem.is_editable(): diff --git a/qutebrowser/browser/webelem.py b/qutebrowser/browser/webelem.py index 49f4bfc27..f18bea65a 100644 --- a/qutebrowser/browser/webelem.py +++ b/qutebrowser/browser/webelem.py @@ -285,6 +285,13 @@ class WebElementWrapper(collections.abc.MutableMapping): tag = self._elem.tagName().lower() return self.get('role', None) in roles or tag in ('input', 'textarea') + def remove_target(self): + """Remove target from link""" + if self._elem.tagName().lower() == 'a': + self._elem.removeAttribute('target') + elif self.parent().tagName().lower() == 'a': + self.parent().removeAttribute('target') + def debug_text(self): """Get a text based on an element suitable for debug output.""" self._check_vanished()