summaryrefslogtreecommitdiff
path: root/qutebrowser
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2019-11-24 22:44:05 +0100
committerFlorian Bruhin <me@the-compiler.org>2019-11-24 22:44:19 +0100
commit62274cee4fc0d77c492a3e1e0d1f75ea8b08f988 (patch)
treec996b3b707c2dc632ac873b7f1ff2fe22effb06b /qutebrowser
parent42a42ffbe708d81c602730efacbdfd6fecbbd543 (diff)
downloadqutebrowser-62274cee4fc0d77c492a3e1e0d1f75ea8b08f988.tar.gz
qutebrowser-62274cee4fc0d77c492a3e1e0d1f75ea8b08f988.zip
Remove keyparsers from objreg
This gets rid of an exception/abort when tests are finished with the new PyQt exit scheme. See #5017, #640
Diffstat (limited to 'qutebrowser')
-rw-r--r--qutebrowser/browser/hints.py26
-rw-r--r--qutebrowser/keyinput/modeman.py22
-rw-r--r--qutebrowser/mainwindow/mainwindow.py8
-rw-r--r--qutebrowser/mainwindow/statusbar/bar.py13
4 files changed, 30 insertions, 39 deletions
diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py
index b35ee3cdd..917a9b1d2 100644
--- a/qutebrowser/browser/hints.py
+++ b/qutebrowser/browser/hints.py
@@ -33,7 +33,7 @@ from PyQt5.QtCore import pyqtSlot, QObject, Qt, QUrl
from PyQt5.QtWidgets import QLabel
from qutebrowser.config import config, configexc
-from qutebrowser.keyinput import modeman, modeparsers
+from qutebrowser.keyinput import modeman, modeparsers, basekeyparser
from qutebrowser.browser import webelem
from qutebrowser.commands import userscripts, runners
from qutebrowser.api import cmdutils
@@ -384,8 +384,7 @@ class HintManager(QObject):
self._actions = HintActions(win_id)
- mode_manager = objreg.get('mode-manager', scope='window',
- window=win_id)
+ mode_manager = modeman.instance(self._win_id)
mode_manager.left.connect(self.on_mode_left)
def _get_text(self) -> str:
@@ -595,6 +594,11 @@ class HintManager(QObject):
elemstr = elemstr.casefold()
return filterstr == elemstr
+ def _get_keyparser(self,
+ mode: usertypes.KeyMode) -> basekeyparser.BaseKeyParser:
+ mode_manager = modeman.instance(self._win_id)
+ return mode_manager.parsers[mode]
+
def _start_cb(self, elems: _ElemsType) -> None:
"""Initialize the elements and labels based on the context set."""
if self._context is None:
@@ -626,9 +630,7 @@ class HintManager(QObject):
self._context.all_labels.append(label)
self._context.labels[string] = label
- keyparsers = objreg.get('keyparsers', scope='window',
- window=self._win_id)
- keyparser = keyparsers[usertypes.KeyMode.hint]
+ keyparser = self._get_keyparser(usertypes.KeyMode.hint)
keyparser.update_bindings(strings)
message_bridge = objreg.get('message-bridge', scope='window',
@@ -724,8 +726,7 @@ class HintManager(QObject):
if tab is None:
raise cmdutils.CommandError("No WebView available yet!")
- mode_manager = objreg.get('mode-manager', scope='window',
- window=self._win_id)
+ mode_manager = modeman.instance(self._win_id)
if mode_manager.mode == usertypes.KeyMode.hint:
modeman.leave(self._win_id, usertypes.KeyMode.hint, 're-hinting')
@@ -824,9 +825,7 @@ class HintManager(QObject):
if follow:
# apply auto_follow_timeout
timeout = config.val.hints.auto_follow_timeout
- keyparsers = objreg.get('keyparsers', scope='window',
- window=self._win_id)
- normal_parser = keyparsers[usertypes.KeyMode.normal]
+ normal_parser = self._get_keyparser(usertypes.KeyMode.normal)
normal_parser.set_inhibited_timeout(timeout)
# unpacking gets us the first (and only) key in the dict.
self._fire(*visible)
@@ -901,9 +900,8 @@ class HintManager(QObject):
for label, string in zip(visible, strings):
label.update_text('', string)
self._context.labels[string] = label
- keyparsers = objreg.get('keyparsers', scope='window',
- window=self._win_id)
- keyparser = keyparsers[usertypes.KeyMode.hint]
+
+ keyparser = self._get_keyparser(usertypes.KeyMode.hint)
keyparser.update_bindings(strings, preserve_filter=True)
# Note: filter_hints can be called with non-None filterstr only
diff --git a/qutebrowser/keyinput/modeman.py b/qutebrowser/keyinput/modeman.py
index 9e50481c7..7b5c8a786 100644
--- a/qutebrowser/keyinput/modeman.py
+++ b/qutebrowser/keyinput/modeman.py
@@ -37,7 +37,7 @@ from qutebrowser.browser import hints
INPUT_MODES = [usertypes.KeyMode.insert, usertypes.KeyMode.passthrough]
PROMPT_MODES = [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]
-_ParserDictType = typing.MutableMapping[
+ParserDictType = typing.MutableMapping[
usertypes.KeyMode, basekeyparser.BaseKeyParser]
@@ -161,13 +161,7 @@ def init(win_id: int, parent: QObject) -> 'ModeManager':
mode=usertypes.KeyMode.run_macro,
commandrunner=commandrunner,
parent=modeman),
- } # type: _ParserDictType
-
- objreg.register('keyparsers', keyparsers, scope='window', window=win_id)
-
- modeman.destroyed.connect( # type: ignore
- functools.partial(objreg.delete, 'keyparsers', scope='window',
- window=win_id))
+ } # type: ParserDictType
for mode, parser in keyparsers.items():
modeman.register(mode, parser)
@@ -204,7 +198,7 @@ class ModeManager(QObject):
mode: The mode we're currently in.
_win_id: The window ID of this ModeManager
_prev_mode: Mode before a prompt popped up
- _parsers: A dictionary of modes and their keyparsers.
+ parsers: A dictionary of modes and their keyparsers.
_forward_unbound_keys: If we should forward unbound keys.
_releaseevents_to_pass: A set of KeyEvents where the keyPressEvent was
passed through, so the release event should as
@@ -226,7 +220,7 @@ class ModeManager(QObject):
def __init__(self, win_id: int, parent: QObject = None) -> None:
super().__init__(parent)
self._win_id = win_id
- self._parsers = {} # type: _ParserDictType
+ self.parsers = {} # type: _ParserDictType
self._prev_mode = usertypes.KeyMode.normal
self.mode = usertypes.KeyMode.normal
self._releaseevents_to_pass = set() # type: typing.Set[KeyEvent]
@@ -246,7 +240,7 @@ class ModeManager(QObject):
True if event should be filtered, False otherwise.
"""
curmode = self.mode
- parser = self._parsers[curmode]
+ parser = self.parsers[curmode]
if curmode != usertypes.KeyMode.insert:
log.modes.debug("got keypress in mode {} - delegating to "
"{}".format(curmode, utils.qualname(parser)))
@@ -303,7 +297,7 @@ class ModeManager(QObject):
parser: basekeyparser.BaseKeyParser) -> None:
"""Register a new mode."""
assert parser is not None
- self._parsers[mode] = parser
+ self.parsers[mode] = parser
parser.request_leave.connect(self.leave)
def enter(self, mode: usertypes.KeyMode,
@@ -322,7 +316,7 @@ class ModeManager(QObject):
log.modes.debug("Entering mode {}{}".format(
mode, '' if reason is None else ' (reason: {})'.format(reason)))
- if mode not in self._parsers:
+ if mode not in self.parsers:
raise ValueError("No keyparser for mode {}".format(mode))
if self.mode == mode or (self.mode in PROMPT_MODES and
mode in PROMPT_MODES):
@@ -429,4 +423,4 @@ class ModeManager(QObject):
@cmdutils.register(instance='mode-manager', scope='window')
def clear_keychain(self) -> None:
"""Clear the currently entered key chain."""
- self._parsers[self.mode].clear_keystring()
+ self.parsers[self.mode].clear_keystring()
diff --git a/qutebrowser/mainwindow/mainwindow.py b/qutebrowser/mainwindow/mainwindow.py
index 42a5f3505..640c796eb 100644
--- a/qutebrowser/mainwindow/mainwindow.py
+++ b/qutebrowser/mainwindow/mainwindow.py
@@ -455,9 +455,8 @@ class MainWindow(QWidget):
def _connect_signals(self):
"""Connect all mainwindow signals."""
- keyparsers = self._get_object('keyparsers')
message_bridge = self._get_object('message-bridge')
- mode_manager = self._get_object('mode-manager')
+ mode_manager = modeman.instance(self._win_id)
# misc
self.tabbed_browser.close_window.connect(self.close)
@@ -470,7 +469,8 @@ class MainWindow(QWidget):
mode_manager.left.connect(message.global_bridge.mode_left)
# commands
- keyparsers[usertypes.KeyMode.normal].keystring_updated.connect(
+ normal_parser = mode_manager.keyparsers[usertypes.KeyMode.normal]
+ normal_parser.keystring_updated.connect(
self.status.keystring.setText)
self.status.cmd.got_cmd[str].connect( # type: ignore
self._commandrunner.run_safely)
@@ -482,7 +482,7 @@ class MainWindow(QWidget):
self._command_dispatcher.search)
# key hint popup
- for mode, parser in keyparsers.items():
+ for mode, parser in mode_manager.parsers.items():
parser.keystring_updated.connect(functools.partial(
self._keyhint.update_keyhint, mode.name))
diff --git a/qutebrowser/mainwindow/statusbar/bar.py b/qutebrowser/mainwindow/statusbar/bar.py
index 8446491ac..463e0c151 100644
--- a/qutebrowser/mainwindow/statusbar/bar.py
+++ b/qutebrowser/mainwindow/statusbar/bar.py
@@ -26,6 +26,7 @@ from PyQt5.QtWidgets import QWidget, QHBoxLayout, QStackedLayout, QSizePolicy
from qutebrowser.browser import browsertab
from qutebrowser.config import config
+from qutebrowser.keyinput import modeman
from qutebrowser.utils import usertypes, log, objreg, utils
from qutebrowser.mainwindow.statusbar import (backforward, command, progress,
keystring, percentage, url,
@@ -333,9 +334,8 @@ class StatusBar(QWidget):
@pyqtSlot(usertypes.KeyMode)
def on_mode_entered(self, mode):
"""Mark certain modes in the commandline."""
- keyparsers = objreg.get('keyparsers', scope='window',
- window=self._win_id)
- if keyparsers[mode].passthrough:
+ mode_manager = modeman.instance(self._win_id)
+ if mode_manager.parsers[mode].passthrough:
self._set_mode_text(mode.name)
if mode in [usertypes.KeyMode.insert,
usertypes.KeyMode.command,
@@ -348,10 +348,9 @@ class StatusBar(QWidget):
@pyqtSlot(usertypes.KeyMode, usertypes.KeyMode)
def on_mode_left(self, old_mode, new_mode):
"""Clear marked mode."""
- keyparsers = objreg.get('keyparsers', scope='window',
- window=self._win_id)
- if keyparsers[old_mode].passthrough:
- if keyparsers[new_mode].passthrough:
+ mode_manager = modeman.instance(self._win_id)
+ if mode_manager.parsers[old_mode].passthrough:
+ if mode_manager.parsers[new_mode].passthrough:
self._set_mode_text(new_mode.name)
else:
self.txt.set_text(self.txt.Text.normal, '')