summaryrefslogtreecommitdiff
path: root/qutebrowser/mainwindow/prompt.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/mainwindow/prompt.py')
-rw-r--r--qutebrowser/mainwindow/prompt.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/qutebrowser/mainwindow/prompt.py b/qutebrowser/mainwindow/prompt.py
index 84b6cd18f..92d3cc2ea 100644
--- a/qutebrowser/mainwindow/prompt.py
+++ b/qutebrowser/mainwindow/prompt.py
@@ -202,6 +202,7 @@ class PromptQueue(QObject):
log.prompt.debug("Left mode {}, hiding {}".format(
mode, self._question))
self.show_prompts.emit(None)
+
if self._question.answer is None and not self._question.is_aborted:
log.prompt.debug("Cancelling {} because {} was left".format(
self._question, mode))
@@ -261,6 +262,7 @@ class PromptContainer(QWidget):
}
"""
update_geometry = pyqtSignal()
+ release_focus = pyqtSignal()
def __init__(self, win_id, parent=None):
super().__init__(parent)
@@ -287,19 +289,26 @@ class PromptContainer(QWidget):
Args:
question: A Question object or None.
"""
- item = self._layout.takeAt(0)
- if item is not None:
+ item = qtutils.add_optional(self._layout.takeAt(0))
+ if item is None:
+ widget = None
+ else:
widget = item.widget()
assert widget is not None
- log.prompt.debug("Deleting old prompt {}".format(widget))
- widget.hide()
+ log.prompt.debug(f"Deleting old prompt {widget!r}")
widget.deleteLater()
if question is None:
log.prompt.debug("No prompts left, hiding prompt container.")
self._prompt = None
+ self.release_focus.emit()
self.hide()
return
+ elif widget is not None:
+ # We have more prompts to show, just hide the old one.
+ # This needs to happen *after* we possibly hid the entire prompt container,
+ # so that keyboard focus can be reassigned properly via release_focus.
+ widget.hide()
classes = {
usertypes.PromptMode.yesno: YesNoPrompt,