Skip to content

Commit

Permalink
Ignore tab key presses if they'd switch focus.
Browse files Browse the repository at this point in the history
If the mainwindow is focused but not the web view (e.g. in prompt mode), an
unbound tab key should be filtered so it doesn't change keyboard focus.

Fixes #504.
  • Loading branch information
The-Compiler committed Mar 18, 2015
1 parent 612afc4 commit d618892
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions qutebrowser/keyinput/modeman.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)):
Expand All @@ -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):
Expand Down

0 comments on commit d618892

Please sign in to comment.