Hide prompts correctly

We now make sure to hide prompts everywhere when the prompt mode was
left. We also make sure to hide the prompt widget before deleting, as it
might be deleted later.
This commit is contained in:
Florian Bruhin 2016-11-02 22:16:49 +01:00
parent 293a388ac6
commit 9cf5d645f0

View File

@ -272,11 +272,6 @@ class PromptContainer(QWidget):
Args: Args:
question: A Question object or None. question: A Question object or None.
""" """
item = self._layout.takeAt(0)
assert self._layout.count() == 0
if item is not None:
item.widget().deleteLater()
if question is None: if question is None:
self._prompt = None self._prompt = None
self.hide() self.hide()
@ -318,13 +313,16 @@ class PromptContainer(QWidget):
def _on_global_mode_left(self, mode): def _on_global_mode_left(self, mode):
"""Leave prompt/yesno mode in this window if it was left elsewhere. """Leave prompt/yesno mode in this window if it was left elsewhere.
PromptQueue takes care of getting rid of the question if a mode was This ensures no matter where a prompt was answered, we leave the prompt
left, but if that happens in a different window, this window will still mode and dispose of the prompt object in every window.
be stuck in prompt mode. Here we make sure to leave that if it was left
anywhere else.
""" """
if mode in [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]: if mode in [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]:
modeman.maybe_leave(self._win_id, mode, 'left in other window') modeman.maybe_leave(self._win_id, mode, 'left in other window')
item = self._layout.takeAt(0)
if item is not None:
widget = item.widget()
widget.hide()
widget.deleteLater()
@cmdutils.register(instance='prompt-container', hide=True, scope='window', @cmdutils.register(instance='prompt-container', hide=True, scope='window',
modes=[usertypes.KeyMode.prompt, modes=[usertypes.KeyMode.prompt,