diff --git a/qutebrowser/app.py b/qutebrowser/app.py index bb2f1972f..becd548f6 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -392,6 +392,8 @@ class Application(QApplication): self.messagebridge.s_error.connect(status.disp_error) self.messagebridge.s_info.connect(status.disp_temp_text) self.messagebridge.s_set_text.connect(status.set_text) + self.messagebridge.s_maybe_reset_text.connect( + status.txt.maybe_reset_text) self.messagebridge.s_set_cmd_text.connect(cmd.set_cmd_text) self.messagebridge.s_question.connect( status.prompt.prompter.ask_question, Qt.DirectConnection) diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index f5da7a419..f1d2b3e57 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -157,8 +157,9 @@ class HintManager(QObject): for elem in self._context.elems.values(): if not elem.label.isNull(): elem.label.removeFromDocument() + text = self.HINT_TEXTS[self._context.target] + message.instance().maybe_reset_text(text) self._context = None - message.instance().set_text('') def _hint_strings(self, elems): """Calculate the hint strings for elems. diff --git a/qutebrowser/utils/message.py b/qutebrowser/utils/message.py index ab4619239..f1fa9221c 100644 --- a/qutebrowser/utils/message.py +++ b/qutebrowser/utils/message.py @@ -136,6 +136,8 @@ class MessageBridge(QObject): args: See s_error. s_set_text: Set a persistent text in the statusbar. arg: The text to set. + s_maybe_reset_text: Reset the text if it hasn't been changed yet. + arg: The expected text. s_set_cmd_text: Pre-set a text for the commandline prompt. arg: The text to set. @@ -150,6 +152,7 @@ class MessageBridge(QObject): s_error = pyqtSignal(str, bool) s_info = pyqtSignal(str, bool) s_set_text = pyqtSignal(str) + s_maybe_reset_text = pyqtSignal(str) s_set_cmd_text = pyqtSignal(str) s_question = pyqtSignal(usertypes.Question, bool) @@ -215,6 +218,14 @@ class MessageBridge(QObject): log.misc.debug(text) self._emit_later(self.s_set_text, text) + def maybe_reset_text(self, text): + """Reset the text in the statusbar if it matches an expected text. + + Args: + text: The expected text. + """ + self._emit_later(self.s_maybe_reset_text, str(text)) + def ask(self, question, blocking): """Ask a question to the user. diff --git a/qutebrowser/widgets/statusbar/text.py b/qutebrowser/widgets/statusbar/text.py index 978bb856f..f894a94df 100644 --- a/qutebrowser/widgets/statusbar/text.py +++ b/qutebrowser/widgets/statusbar/text.py @@ -23,7 +23,7 @@ from PyQt5.QtCore import pyqtSlot from qutebrowser.config import config from qutebrowser.widgets.statusbar import textbase -from qutebrowser.utils import usertypes +from qutebrowser.utils import usertypes, log class Text(textbase.TextBase): @@ -54,6 +54,8 @@ class Text(textbase.TextBase): which: Which text to set, a self.Text instance. text: The text to set. """ + log.statusbar.debug("Setting {} text to '{}'.".format( + which.name, text)) if which is self.Text.normal: self._normaltext = text elif which is self.Text.temp: @@ -64,6 +66,15 @@ class Text(textbase.TextBase): raise ValueError("Invalid value {} for which!".format(which)) self._update_text() + @pyqtSlot(str) + def maybe_reset_text(self, text): + """Clear a normal text if it still matches an expected text.""" + if self._normaltext == text: + log.misc.debug("Resetting: '{}'".format(text)) + self.set_text(self.Text.normal, '') + else: + log.misc.debug("Ignoring reset: '{}'".format(text)) + def _update_text(self): """Update QLabel text when needed.""" if self._temptext: