Use object registry for modeman.
This commit is contained in:
parent
d441471a17
commit
5f45d3de60
@ -58,7 +58,6 @@ class Application(QApplication):
|
||||
mainwindow: The MainWindow QWidget.
|
||||
config: The main ConfigManager
|
||||
cmd_history: The "cmd_history" LineConfigParser instance.
|
||||
modeman: The global ModeManager instance.
|
||||
args: ArgumentParser instance.
|
||||
_commandrunner: The main CommandRunner instance.
|
||||
_debugconsole: The ConsoleWidget for debugging.
|
||||
@ -95,7 +94,6 @@ class Application(QApplication):
|
||||
self._keyparsers = None
|
||||
self._crashdlg = None
|
||||
self._crashlogfile = None
|
||||
self.modeman = None
|
||||
self.cmd_history = None
|
||||
self.config = None
|
||||
self.keyconfig = None
|
||||
@ -112,6 +110,7 @@ class Application(QApplication):
|
||||
self._handle_segfault()
|
||||
log.init.debug("Initializing modes...")
|
||||
self._init_modes()
|
||||
modeman_obj = self.registry['modeman']
|
||||
log.init.debug("Initializing websettings...")
|
||||
websettings.init()
|
||||
log.init.debug("Initializing quickmarks...")
|
||||
@ -137,16 +136,16 @@ class Application(QApplication):
|
||||
self.downloadmanager = downloads.DownloadManager(self)
|
||||
log.init.debug("Initializing main window...")
|
||||
self.mainwindow = mainwindow.MainWindow()
|
||||
self.modeman.mainwindow = self.mainwindow
|
||||
modeman_obj.mainwindow = self.mainwindow
|
||||
log.init.debug("Initializing debug console...")
|
||||
self._debugconsole = console.ConsoleWidget()
|
||||
log.init.debug("Initializing eventfilter...")
|
||||
self.installEventFilter(self.modeman)
|
||||
self.installEventFilter(modeman_obj)
|
||||
self.setQuitOnLastWindowClosed(False)
|
||||
|
||||
log.init.debug("Connecting signals...")
|
||||
self._connect_signals()
|
||||
self.modeman.enter(utypes.KeyMode.normal, 'init')
|
||||
modeman.enter(utypes.KeyMode.normal, 'init')
|
||||
|
||||
log.init.debug("Showing mainwindow...")
|
||||
if not args.nowindow:
|
||||
@ -227,25 +226,26 @@ class Application(QApplication):
|
||||
utypes.KeyMode.yesno:
|
||||
modeparsers.PromptKeyParser(self),
|
||||
}
|
||||
self.modeman = modeman.ModeManager(self)
|
||||
self.modeman.register(utypes.KeyMode.normal,
|
||||
modeman_obj = modeman.ModeManager(self)
|
||||
self.registry['modeman'] = modeman_obj
|
||||
modeman_obj.register(utypes.KeyMode.normal,
|
||||
self._keyparsers[utypes.KeyMode.normal].handle)
|
||||
self.modeman.register(utypes.KeyMode.hint,
|
||||
modeman_obj.register(utypes.KeyMode.hint,
|
||||
self._keyparsers[utypes.KeyMode.hint].handle)
|
||||
self.modeman.register(utypes.KeyMode.insert,
|
||||
modeman_obj.register(utypes.KeyMode.insert,
|
||||
self._keyparsers[utypes.KeyMode.insert].handle,
|
||||
passthrough=True)
|
||||
self.modeman.register(
|
||||
modeman_obj.register(
|
||||
utypes.KeyMode.passthrough,
|
||||
self._keyparsers[utypes.KeyMode.passthrough].handle,
|
||||
passthrough=True)
|
||||
self.modeman.register(utypes.KeyMode.command,
|
||||
modeman_obj.register(utypes.KeyMode.command,
|
||||
self._keyparsers[utypes.KeyMode.command].handle,
|
||||
passthrough=True)
|
||||
self.modeman.register(utypes.KeyMode.prompt,
|
||||
modeman_obj.register(utypes.KeyMode.prompt,
|
||||
self._keyparsers[utypes.KeyMode.prompt].handle,
|
||||
passthrough=True)
|
||||
self.modeman.register(utypes.KeyMode.yesno,
|
||||
modeman_obj.register(utypes.KeyMode.yesno,
|
||||
self._keyparsers[utypes.KeyMode.yesno].handle)
|
||||
|
||||
def _init_misc(self):
|
||||
@ -378,16 +378,17 @@ class Application(QApplication):
|
||||
completer = self.mainwindow.completion.completer
|
||||
searchrunner = self.registry['searchrunner']
|
||||
messagebridge = self.registry['messagebridge']
|
||||
modeman = self.registry['modeman']
|
||||
|
||||
# misc
|
||||
self.lastWindowClosed.connect(self.shutdown)
|
||||
tabs.quit.connect(self.shutdown)
|
||||
|
||||
# status bar
|
||||
self.modeman.entered.connect(status.on_mode_entered)
|
||||
self.modeman.left.connect(status.on_mode_left)
|
||||
self.modeman.left.connect(status.cmd.on_mode_left)
|
||||
self.modeman.left.connect(status.prompt.prompter.on_mode_left)
|
||||
modeman.entered.connect(status.on_mode_entered)
|
||||
modeman.left.connect(status.on_mode_left)
|
||||
modeman.left.connect(status.cmd.on_mode_left)
|
||||
modeman.left.connect(status.prompt.prompter.on_mode_left)
|
||||
|
||||
# commands
|
||||
cmd.got_cmd.connect(self._commandrunner.run_safely)
|
||||
@ -418,7 +419,7 @@ class Application(QApplication):
|
||||
# config
|
||||
self.config.style_changed.connect(style.get_stylesheet.cache_clear)
|
||||
for obj in (tabs, completion, self.mainwindow, self.cmd_history,
|
||||
websettings, self.modeman, status, status.txt):
|
||||
websettings, modeman, status, status.txt):
|
||||
self.config.changed.connect(obj.on_config_changed)
|
||||
for obj in kp.values():
|
||||
self.keyconfig.changed.connect(obj.on_keyconfig_changed)
|
||||
@ -444,7 +445,7 @@ class Application(QApplication):
|
||||
tabs.cur_load_status_changed.connect(status.url.on_load_status_changed)
|
||||
|
||||
# command input / completion
|
||||
self.modeman.left.connect(tabs.on_mode_left)
|
||||
modeman.left.connect(tabs.on_mode_left)
|
||||
cmd.clear_completion_selection.connect(
|
||||
completion.on_clear_completion_selection)
|
||||
cmd.hide_completion.connect(completion.hide)
|
||||
@ -747,9 +748,11 @@ class Application(QApplication):
|
||||
"""Second stage of shutdown."""
|
||||
log.destroy.debug("Stage 2 of shutting down...")
|
||||
# Remove eventfilter
|
||||
if self.modeman is not None:
|
||||
try:
|
||||
log.destroy.debug("Removing eventfilter...")
|
||||
self.removeEventFilter(self.modeman)
|
||||
self.removeEventFilter(self.registry['modeman'])
|
||||
except KeyError:
|
||||
pass
|
||||
# Close all tabs
|
||||
if self.mainwindow is not None:
|
||||
log.destroy.debug("Closing tabs...")
|
||||
|
@ -149,8 +149,8 @@ class HintManager(QObject):
|
||||
"""
|
||||
super().__init__(parent)
|
||||
self._context = None
|
||||
modeman.instance().left.connect(self.on_mode_left)
|
||||
modeman.instance().entered.connect(self.on_mode_entered)
|
||||
utils.get_object('modeman').left.connect(self.on_mode_left)
|
||||
utils.get_object('modeman').entered.connect(self.on_mode_entered)
|
||||
|
||||
def _cleanup(self):
|
||||
"""Clean up after hinting."""
|
||||
|
@ -98,9 +98,7 @@ class Command:
|
||||
Raise:
|
||||
PrerequisitesError if the command can't be called currently.
|
||||
"""
|
||||
# We don't use modeman.instance() here to avoid a circular import
|
||||
# of qutebrowser.keyinput.modeman.
|
||||
curmode = QCoreApplication.instance().modeman.mode()
|
||||
curmode = utils.get_object('modeman').mode()
|
||||
if self.modes is not None and curmode not in self.modes:
|
||||
mode_names = '/'.join(mode.name for mode in self.modes)
|
||||
raise cmdexc.PrerequisitesError(
|
||||
|
@ -29,7 +29,7 @@ from PyQt5.QtWidgets import QApplication
|
||||
|
||||
from qutebrowser.config import config
|
||||
from qutebrowser.commands import cmdexc, cmdutils
|
||||
from qutebrowser.utils import usertypes, log
|
||||
from qutebrowser.utils import usertypes, log, utils
|
||||
|
||||
|
||||
class ModeLockedError(Exception):
|
||||
@ -37,25 +37,20 @@ class ModeLockedError(Exception):
|
||||
"""Exception raised when the mode is currently locked."""
|
||||
|
||||
|
||||
def instance():
|
||||
"""Get the global modeman instance."""
|
||||
return QApplication.instance().modeman
|
||||
|
||||
|
||||
def enter(mode, reason=None):
|
||||
"""Enter the mode 'mode'."""
|
||||
instance().enter(mode, reason)
|
||||
utils.get_object('modeman').enter(mode, reason)
|
||||
|
||||
|
||||
def leave(mode, reason=None):
|
||||
"""Leave the mode 'mode'."""
|
||||
instance().leave(mode, reason)
|
||||
utils.get_object('modeman').leave(mode, reason)
|
||||
|
||||
|
||||
def maybe_enter(mode, reason=None):
|
||||
"""Convenience method to enter 'mode' without exceptions."""
|
||||
try:
|
||||
instance().enter(mode, reason)
|
||||
utils.get_object('modeman').enter(mode, reason)
|
||||
except ModeLockedError:
|
||||
pass
|
||||
|
||||
@ -63,7 +58,7 @@ def maybe_enter(mode, reason=None):
|
||||
def maybe_leave(mode, reason=None):
|
||||
"""Convenience method to leave 'mode' without exceptions."""
|
||||
try:
|
||||
instance().leave(mode, reason)
|
||||
utils.get_object('modeman').leave(mode, reason)
|
||||
except ValueError as e:
|
||||
# This is rather likely to happen, so we only log to debug log.
|
||||
log.modes.debug(e)
|
||||
|
@ -27,7 +27,7 @@ from PyQt5.QtWidgets import QWidget, QHBoxLayout, QStackedLayout, QSizePolicy
|
||||
|
||||
from qutebrowser.keyinput import modeman
|
||||
from qutebrowser.config import config, style
|
||||
from qutebrowser.utils import usertypes, log
|
||||
from qutebrowser.utils import usertypes, log, utils
|
||||
from qutebrowser.widgets.statusbar import (command, progress, keystring,
|
||||
percentage, url, prompt)
|
||||
from qutebrowser.widgets.statusbar import text as textwidget
|
||||
@ -376,7 +376,7 @@ class StatusBar(QWidget):
|
||||
@pyqtSlot(usertypes.KeyMode)
|
||||
def on_mode_entered(self, mode):
|
||||
"""Mark certain modes in the commandline."""
|
||||
if mode in modeman.instance().passthrough:
|
||||
if mode in utils.get_object('modeman').passthrough:
|
||||
text = "-- {} MODE --".format(mode.name.upper())
|
||||
self.txt.set_text(self.txt.Text.normal, text)
|
||||
if mode == usertypes.KeyMode.insert:
|
||||
@ -385,7 +385,7 @@ class StatusBar(QWidget):
|
||||
@pyqtSlot(usertypes.KeyMode)
|
||||
def on_mode_left(self, mode):
|
||||
"""Clear marked mode."""
|
||||
if mode in modeman.instance().passthrough:
|
||||
if mode in utils.get_object('modeman').passthrough:
|
||||
self.txt.set_text(self.txt.Text.normal, '')
|
||||
if mode == usertypes.KeyMode.insert:
|
||||
self._set_insert_active(False)
|
||||
|
@ -280,13 +280,14 @@ class Prompter:
|
||||
self.question = question
|
||||
mode = self._display_question()
|
||||
question.aborted.connect(lambda: modeman.maybe_leave(mode, 'aborted'))
|
||||
modeman_obj = utils.get_object('modeman')
|
||||
try:
|
||||
modeman.enter(mode, 'question asked')
|
||||
except modeman.ModeLockedError:
|
||||
if modeman.instance().mode() != usertypes.KeyMode.prompt:
|
||||
if modeman_obj.mode() != usertypes.KeyMode.prompt:
|
||||
question.abort()
|
||||
return None
|
||||
modeman.instance().locked = True
|
||||
modeman_obj.locked = True
|
||||
if blocking:
|
||||
loop = qtutils.EventLoop()
|
||||
self._loops.append(loop)
|
||||
|
@ -358,7 +358,8 @@ class WebView(QWebView):
|
||||
self._set_load_status(LoadStatus.error)
|
||||
if not config.get('input', 'auto-insert-mode'):
|
||||
return
|
||||
if modeman.instance().mode() == usertypes.KeyMode.insert or not ok:
|
||||
if (utils.get_object('modeman').mode() == usertypes.KeyMode.insert or
|
||||
not ok):
|
||||
return
|
||||
frame = self.page().currentFrame()
|
||||
try:
|
||||
|
Loading…
Reference in New Issue
Block a user