diff --git a/qutebrowser/keyinput/modeman.py b/qutebrowser/keyinput/modeman.py index 57c5fd86b1a..1d4aca57a2f 100644 --- a/qutebrowser/keyinput/modeman.py +++ b/qutebrowser/keyinput/modeman.py @@ -26,8 +26,9 @@ import functools from PyQt5.QtGui import QWindow -from PyQt5.QtCore import pyqtSignal, QObject, QEvent +from PyQt5.QtCore import pyqtSignal, Qt, QObject, QEvent from PyQt5.QtWidgets import QApplication +from PyQt5.QtWebKitWidgets import QWebView from qutebrowser.keyinput import modeparsers, keyparser from qutebrowser.config import config @@ -181,9 +182,13 @@ def _eventFilter_keypress(self, event): handled = handler(event) if handler is not None else False is_non_alnum = bool(event.modifiers()) or not event.text().strip() + focus_widget = QApplication.instance().focusWidget() + is_tab = event.key() in (Qt.Key_Tab, Qt.Key_Backtab) if handled: filter_this = True + elif is_tab and not isinstance(focus_widget, QWebView): + filter_this = True elif (curmode in self.passthrough or self._forward_unbound_keys == 'all' or (self._forward_unbound_keys == 'auto' and is_non_alnum)): @@ -196,12 +201,11 @@ def _eventFilter_keypress(self, event): if curmode != usertypes.KeyMode.insert: log.modes.debug("handled: {}, forward-unbound-keys: {}, " - "passthrough: {}, is_non_alnum: {} --> filter: " - "{} (focused: {!r})".format( + "passthrough: {}, is_non_alnum: {}, is_tab {} --> " + "filter: {} (focused: {!r})".format( handled, self._forward_unbound_keys, - curmode in self.passthrough, - is_non_alnum, filter_this, - QApplication.instance().focusWidget())) + curmode in self.passthrough, is_non_alnum, + is_tab, filter_this, focus_widget)) return filter_this def _eventFilter_keyrelease(self, event):