diff options
author | Florian Bruhin <me@the-compiler.org> | 2019-10-09 23:07:32 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2019-10-09 23:07:32 +0200 |
commit | 36ac7f24704938d13ff84e7829dcfad7b64a3dd0 (patch) | |
tree | b6955242ecce45aeaa6fd9264913f8c1d8328048 /qutebrowser | |
parent | 4d7cbae5b205f7ae7b629641268f5c4560f579da (diff) | |
download | qutebrowser-36ac7f24704938d13ff84e7829dcfad7b64a3dd0.tar.gz qutebrowser-36ac7f24704938d13ff84e7829dcfad7b64a3dd0.zip |
Move HintManager from a per-tab to a per-window object
This means we use objreg less and we have less HintManager objects - what's
there not to like?
Diffstat (limited to 'qutebrowser')
-rw-r--r-- | qutebrowser/browser/browsertab.py | 9 | ||||
-rw-r--r-- | qutebrowser/browser/hints.py | 12 | ||||
-rw-r--r-- | qutebrowser/keyinput/modeman.py | 6 | ||||
-rw-r--r-- | qutebrowser/keyinput/modeparsers.py | 23 | ||||
-rw-r--r-- | qutebrowser/mainwindow/mainwindow.py | 2 |
5 files changed, 23 insertions, 29 deletions
diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index e0b8deb5a..d4657c079 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -40,7 +40,7 @@ from qutebrowser.config import config from qutebrowser.utils import (utils, objreg, usertypes, log, qtutils, urlutils, message) from qutebrowser.misc import miscwidgets, objects -from qutebrowser.browser import eventfilter, hints +from qutebrowser.browser import eventfilter from qutebrowser.qt import sip if typing.TYPE_CHECKING: @@ -887,13 +887,6 @@ class AbstractTab(QWidget): self._tab_event_filter = eventfilter.TabEventFilter( self, parent=self) self.backend = None - - # FIXME:qtwebengine Should this be public api via self.hints? - # Also, should we get it out of objreg? - hintmanager = hints.HintManager(win_id, self.tab_id, parent=self) - objreg.register('hintmanager', hintmanager, scope='tab', - window=self.win_id, tab=self.tab_id) - self.before_load_started.connect(self._on_before_load_started) def _set_widget(self, widget: QWidget) -> None: diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index 7ccfe6b0a..b7568546e 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -379,11 +379,10 @@ class HintManager(QObject): Target.delete: "Delete an element", } - def __init__(self, win_id, tab_id, parent=None): + def __init__(self, win_id, parent=None): """Constructor.""" super().__init__(parent) self._win_id = win_id - self._tab_id = tab_id self._context = None self._word_hinter = WordHinter() @@ -603,10 +602,10 @@ class HintManager(QObject): tabbed_browser = objreg.get('tabbed-browser', default=None, scope='window', window=self._win_id) tab = tabbed_browser.widget.currentWidget() - if tab.tab_id != self._tab_id: + if tab.tab_id != self._context.tab.tab_id: log.hints.debug( "Current tab changed ({} -> {}) before _start_cb is run." - .format(self._tab_id, tab.tab_id)) + .format(self._context.tab.tab_id, tab.tab_id)) return strings = self._hint_strings(elems) @@ -635,7 +634,7 @@ class HintManager(QObject): # to make auto_follow == 'always' work self._handle_auto_follow() - @cmdutils.register(instance='hintmanager', scope='tab', name='hint', + @cmdutils.register(instance='hintmanager', scope='window', name='hint', star_args_optional=True, maxsplit=2) def start(self, # pylint: disable=keyword-arg-before-vararg group='all', target=Target.normal, *args, mode=None, @@ -810,6 +809,7 @@ class HintManager(QObject): # unpacking gets us the first (and only) key in the dict. self._fire(*visible) + @pyqtSlot(str) def handle_partial_key(self, keystr): """Handle a new partial keypress.""" if self._context is None: @@ -956,7 +956,7 @@ class HintManager(QObject): if self._context is not None: self._context.first_run = False - @cmdutils.register(instance='hintmanager', scope='tab', + @cmdutils.register(instance='hintmanager', scope='window', modes=[usertypes.KeyMode.hint]) def follow_hint(self, select=False, keystring=None): """Follow a hint. diff --git a/qutebrowser/keyinput/modeman.py b/qutebrowser/keyinput/modeman.py index eb11926c3..eb9ae537a 100644 --- a/qutebrowser/keyinput/modeman.py +++ b/qutebrowser/keyinput/modeman.py @@ -30,6 +30,7 @@ from qutebrowser.keyinput import modeparsers from qutebrowser.config import config from qutebrowser.api import cmdutils from qutebrowser.utils import usertypes, log, objreg, utils +from qutebrowser.browser import hints INPUT_MODES = [usertypes.KeyMode.insert, usertypes.KeyMode.passthrough] PROMPT_MODES = [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno] @@ -70,6 +71,10 @@ def init(win_id, parent): commandrunner = runners.CommandRunner(win_id) + hintmanager = hints.HintManager(win_id, parent=parent) + objreg.register('hintmanager', hintmanager, scope='window', + window=win_id) + keyparsers = { usertypes.KeyMode.normal: modeparsers.NormalKeyParser(win_id=win_id, @@ -78,6 +83,7 @@ def init(win_id, parent): usertypes.KeyMode.hint: modeparsers.HintKeyParser(win_id=win_id, commandrunner=commandrunner, + hintmanager=hintmanager, parent=modeman), usertypes.KeyMode.insert: modeparsers.PassthroughKeyParser(win_id=win_id, diff --git a/qutebrowser/keyinput/modeparsers.py b/qutebrowser/keyinput/modeparsers.py index cb7412d6c..e4366bcb5 100644 --- a/qutebrowser/keyinput/modeparsers.py +++ b/qutebrowser/keyinput/modeparsers.py @@ -30,6 +30,7 @@ import enum from PyQt5.QtCore import pyqtSlot, Qt, QObject from PyQt5.QtGui import QKeySequence, QKeyEvent +from qutebrowser.browser import hints from qutebrowser.commands import runners, cmdexc from qutebrowser.config import config from qutebrowser.keyinput import basekeyparser, keyutils @@ -182,6 +183,7 @@ class HintKeyParser(CommandKeyParser): Attributes: _filtertext: The text to filter with. + _hintmanager: The HintManager to use. _last_press: The nature of the last keypress, a LastPress member. """ @@ -189,19 +191,19 @@ class HintKeyParser(CommandKeyParser): def __init__(self, win_id: int, commandrunner: runners.CommandRunner, + hintmanager: hints.HintManager, parent: QObject = None) -> None: super().__init__(win_id, commandrunner, parent) + self._hintmanager = hintmanager self._filtertext = '' self._last_press = LastPress.none self._read_config('hint') - self.keystring_updated.connect(self.on_keystring_updated) + self.keystring_updated.connect(self._hintmanager.handle_partial_key) def _handle_filter_key(self, e: QKeyEvent) -> QKeySequence.SequenceMatch: """Handle keys for string filtering.""" log.keyboard.debug("Got filter key 0x{:x} text {}".format( e.key(), e.text())) - hintmanager = objreg.get('hintmanager', scope='tab', - window=self._win_id, tab='current') if e.key() == Qt.Key_Backspace: log.keyboard.debug("Got backspace, mode {}, filtertext '{}', " "sequence '{}'".format(self._last_press, @@ -209,7 +211,7 @@ class HintKeyParser(CommandKeyParser): self._sequence)) if self._last_press != LastPress.keystring and self._filtertext: self._filtertext = self._filtertext[:-1] - hintmanager.filter_hints(self._filtertext) + self._hintmanager.filter_hints(self._filtertext) return QKeySequence.ExactMatch elif self._last_press == LastPress.keystring and self._sequence: self._sequence = self._sequence[:-1] @@ -217,18 +219,18 @@ class HintKeyParser(CommandKeyParser): if not self._sequence and self._filtertext: # Switch back to hint filtering mode (this can happen only # in numeric mode after the number has been deleted). - hintmanager.filter_hints(self._filtertext) + self._hintmanager.filter_hints(self._filtertext) self._last_press = LastPress.filtertext return QKeySequence.ExactMatch else: return QKeySequence.NoMatch - elif hintmanager.current_mode() != 'number': + elif self._hintmanager.current_mode() != 'number': return QKeySequence.NoMatch elif not e.text(): return QKeySequence.NoMatch else: self._filtertext += e.text() - hintmanager.filter_hints(self._filtertext) + self._hintmanager.filter_hints(self._filtertext) self._last_press = LastPress.filtertext return QKeySequence.ExactMatch @@ -272,13 +274,6 @@ class HintKeyParser(CommandKeyParser): if not preserve_filter: self._filtertext = '' - @pyqtSlot(str) - def on_keystring_updated(self, keystr: str) -> None: - """Update hintmanager when the keystring was updated.""" - hintmanager = objreg.get('hintmanager', scope='tab', - window=self._win_id, tab='current') - hintmanager.handle_partial_key(keystr) - class CaretKeyParser(CommandKeyParser): diff --git a/qutebrowser/mainwindow/mainwindow.py b/qutebrowser/mainwindow/mainwindow.py index 8d571c7eb..861d1c6f0 100644 --- a/qutebrowser/mainwindow/mainwindow.py +++ b/qutebrowser/mainwindow/mainwindow.py @@ -220,7 +220,7 @@ class MainWindow(QWidget): self._init_completion() log.init.debug("Initializing modes...") - modeman.init(self.win_id, self) + modeman.init(win_id=self.win_id, parent=self) self._commandrunner = runners.CommandRunner(self.win_id, partial_match=True) |