diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 1cfdbc876..2b0509491 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -379,6 +379,7 @@ class Application(QApplication): searchrunner = self.registry['searchrunner'] messagebridge = self.registry['messagebridge'] modeman = self.registry['modeman'] + prompter = self.registry['prompter'] # misc self.lastWindowClosed.connect(self.shutdown) @@ -388,7 +389,7 @@ class Application(QApplication): modeman.entered.connect(status.on_mode_entered) modeman.left.connect(status.on_mode_left) modeman.left.connect(cmd.on_mode_left) - modeman.left.connect(status.prompt.prompter.on_mode_left) + modeman.left.connect(prompter.on_mode_left) # commands cmd.got_cmd.connect(self._commandrunner.run_safely) @@ -413,7 +414,7 @@ class Application(QApplication): messagebridge.s_set_text.connect(status.set_text) messagebridge.s_maybe_reset_text.connect(status.txt.maybe_reset_text) messagebridge.s_set_cmd_text.connect(cmd.set_cmd_text) - messagebridge.s_question.connect(status.prompt.prompter.ask_question, + messagebridge.s_question.connect(prompter.ask_question, Qt.DirectConnection) # config @@ -730,7 +731,7 @@ class Application(QApplication): return self._shutting_down = True log.destroy.debug("Shutting down with status {}...".format(status)) - if self.mainwindow.status.prompt.prompter.shutdown(): + if self.registry['prompter'].shutdown(): # If shutdown was called while we were asking a question, we're in # a still sub-eventloop (which gets quitted now) and not in the # main one. diff --git a/qutebrowser/widgets/statusbar/prompt.py b/qutebrowser/widgets/statusbar/prompt.py index 80ed8405a..3122703dd 100644 --- a/qutebrowser/widgets/statusbar/prompt.py +++ b/qutebrowser/widgets/statusbar/prompt.py @@ -24,6 +24,7 @@ from PyQt5.QtWidgets import QHBoxLayout, QWidget, QLineEdit from qutebrowser.widgets import misc from qutebrowser.widgets.statusbar import textbase, prompter +from qutebrowser.utils import utils class PromptLineEdit(misc.MinimalLineEditMixin, QLineEdit): @@ -40,7 +41,6 @@ class Prompt(QWidget): """The prompt widget shown in the statusbar. Attributes: - prompter: The Prompter instance assosciated with this Prompt. txt: The TextBase instance (QLabel) used to display the prompt text. lineedit: The MinimalLineEdit instance (QLineEdit) used for the input. _hbox: The QHBoxLayout used to display the text and prompt. @@ -65,7 +65,8 @@ class Prompt(QWidget): self.lineedit = PromptLineEdit() self._hbox.addWidget(self.lineedit) - self.prompter = prompter.Prompter(self) + prompter_obj = prompter.Prompter(self) + utils.register_object('prompter', prompter_obj) def __repr__(self): return '<{}>'.format(self.__class__.__name__) diff --git a/qutebrowser/widgets/statusbar/prompter.py b/qutebrowser/widgets/statusbar/prompter.py index ec62551ad..9cfbb7cb1 100644 --- a/qutebrowser/widgets/statusbar/prompter.py +++ b/qutebrowser/widgets/statusbar/prompter.py @@ -26,7 +26,7 @@ from PyQt5.QtWidgets import QLineEdit from qutebrowser.keyinput import modeman from qutebrowser.commands import cmdutils -from qutebrowser.utils import usertypes, log, qtutils +from qutebrowser.utils import usertypes, log, qtutils, utils PromptContext = collections.namedtuple('PromptContext', @@ -185,7 +185,7 @@ class Prompter: if self.question.answer is None and not self.question.is_aborted: self.question.cancel() - @cmdutils.register(instance='mainwindow.status.prompt.prompter', hide=True, + @cmdutils.register(instance='prompter', hide=True, modes=[usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]) def prompt_accept(self): @@ -227,7 +227,7 @@ class Prompter: else: raise ValueError("Invalid question mode!") - @cmdutils.register(instance='mainwindow.status.prompt.prompter', hide=True, + @cmdutils.register(instance='prompter', hide=True, modes=[usertypes.KeyMode.yesno]) def prompt_yes(self): """Answer yes to a yes/no prompt.""" @@ -238,7 +238,7 @@ class Prompter: modeman.leave(usertypes.KeyMode.yesno, 'yesno accept') self.question.done() - @cmdutils.register(instance='mainwindow.status.prompt.prompter', hide=True, + @cmdutils.register(instance='prompter', hide=True, modes=[usertypes.KeyMode.yesno]) def prompt_no(self): """Answer no to a yes/no prompt."""