From 10d7d887ec99ce330c27afde3227acbfc2f785ec Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 24 Apr 2014 15:47:38 +0200 Subject: [PATCH] Pass keypresses to statusbar correctly --- TODO | 1 - qutebrowser/app.py | 2 +- qutebrowser/utils/modemanager.py | 7 +++++++ qutebrowser/widgets/statusbar.py | 2 +- qutebrowser/widgets/tabbedbrowser.py | 15 --------------- 5 files changed, 9 insertions(+), 18 deletions(-) diff --git a/TODO b/TODO index 4f6a8db2b..409dc37c3 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,6 @@ keyparser foo ============= - Handle keybind to get out of insert mode (e.g. esc) -- Pass keypresses to statusbar correctly - Switch to normal mode if new page loaded - Add passthrough-keys option to pass through unmapped keys - Add auto-insert-mode to switch to insert mode if editable element is focused diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 10d454a92..333a2178a 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -258,7 +258,7 @@ class QuteBrowser(QApplication): modemanager.manager.entered.connect(status.on_mode_entered) modemanager.manager.left.connect(status.on_mode_left) # FIXME what to do here? - tabs.keypress.connect(status.keypress) + modemanager.manager.key_pressed.connect(status.on_key_pressed) for obj in [kp["normal"], tabs]: obj.set_cmd_text.connect(cmd.set_cmd_text) diff --git a/qutebrowser/utils/modemanager.py b/qutebrowser/utils/modemanager.py index f3060ce68..9a02743e2 100644 --- a/qutebrowser/utils/modemanager.py +++ b/qutebrowser/utils/modemanager.py @@ -68,10 +68,12 @@ class ModeManager(QObject): arg: Name of the entered mode. left: Emitted when a mode is left. arg: Name of the left mode. + key_pressed; A key was pressed. """ entered = pyqtSignal(str) left = pyqtSignal(str) + key_pressed = pyqtSignal('QKeyEvent') def __init__(self, parent=None): super().__init__(parent) @@ -139,6 +141,9 @@ class ModeManager(QObject): """Filter all events based on the currently set mode. Also calls the real keypress handler. + + Emit: + key_pressed: When a key was actually pressed. """ typ = evt.type() handler = self._handlers[self.mode] @@ -149,12 +154,14 @@ class ModeManager(QObject): # We're currently in a passthrough mode so we pass everything # through.*and* let the passthrough keyhandler know. # FIXME what if we leave the passthrough mode right here? + self.key_pressed.emit(evt) if handler is not None: handler(evt) return False elif typ == QEvent.KeyPress: # KeyPress in a non-passthrough mode - call handler and filter # event from widgets + self.key_pressed.emit(evt) if handler is not None: handler(evt) return True diff --git a/qutebrowser/widgets/statusbar.py b/qutebrowser/widgets/statusbar.py index 755030450..959aa0d63 100644 --- a/qutebrowser/widgets/statusbar.py +++ b/qutebrowser/widgets/statusbar.py @@ -158,7 +158,7 @@ class StatusBar(QWidget): self.txt.errortext = '' @pyqtSlot('QKeyEvent') - def keypress(self, e): + def on_key_pressed(self, e): """Hide temporary error message if a key was pressed. Args: diff --git a/qutebrowser/widgets/tabbedbrowser.py b/qutebrowser/widgets/tabbedbrowser.py index 7e334e630..013d5429c 100644 --- a/qutebrowser/widgets/tabbedbrowser.py +++ b/qutebrowser/widgets/tabbedbrowser.py @@ -69,8 +69,6 @@ class TabbedBrowser(TabWidget): arg 2: y-position in %. hint_strings_updated: Hint strings were updated. arg: A list of hint strings. - keypress: A key was pressed. - arg: The QKeyEvent leading to the keypress. shutdown_complete: The shuttdown is completed. quit: The last tab was closed, quit application. resized: Emitted when the browser window has resized, so the completion @@ -87,7 +85,6 @@ class TabbedBrowser(TabWidget): cur_scroll_perc_changed = pyqtSignal(int, int) hint_strings_updated = pyqtSignal(list) set_cmd_text = pyqtSignal(str) - keypress = pyqtSignal('QKeyEvent') shutdown_complete = pyqtSignal() quit = pyqtSignal() resized = pyqtSignal('QRect') @@ -356,18 +353,6 @@ class TabbedBrowser(TabWidget): else: logging.debug('ignoring title change') - def keyPressEvent(self, e): - """Extend TabWidget (QWidget)'s keyPressEvent to emit a signal. - - Args: - e: The QKeyPressEvent - - Emit: - keypress: Always emitted. - """ - self.keypress.emit(e) - super().keyPressEvent(e) - def resizeEvent(self, e): """Extend resizeEvent of QWidget to emit a resized signal afterwards.