From 61a1709141013a60c159d99b1b4919d611919be1 Mon Sep 17 00:00:00 2001 From: Ryan Roden-Corrent Date: Thu, 8 Jun 2017 22:27:46 -0400 Subject: [PATCH] Fix completion selection bug. Fix the issue where pressing `oo` would show a url completion dialog where attempting to select items would do nothing but show a Qt warning. The fix is to ensure we set _last_completion_func to None whenever we clear completion (there was a case I missed). It also ensures we always delete the old model and adds a safety to prevent deleting an in-use model is set_model is called with the current model. --- qutebrowser/completion/completer.py | 1 + qutebrowser/completion/completionwidget.py | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/qutebrowser/completion/completer.py b/qutebrowser/completion/completer.py index 491fe2e04..ae72add20 100644 --- a/qutebrowser/completion/completer.py +++ b/qutebrowser/completion/completer.py @@ -211,6 +211,7 @@ class Completer(QObject): # FIXME complete searches # https://github.com/qutebrowser/qutebrowser/issues/32 completion.set_model(None) + self._last_completion_func = None return before_cursor, pattern, after_cursor = self._partition() diff --git a/qutebrowser/completion/completionwidget.py b/qutebrowser/completion/completionwidget.py index 15f317c5a..7ea4edf13 100644 --- a/qutebrowser/completion/completionwidget.py +++ b/qutebrowser/completion/completionwidget.py @@ -269,17 +269,18 @@ class CompletionView(QTreeView): Args: model: The model to use. """ + if self.model() is not None and model is not self.model(): + self.model().deleteLater() + self.selectionModel().deleteLater() + + self.setModel(model) + if model is None: self._active = False self.hide() return - if self.model() is not None: - self.model().deleteLater() - self.selectionModel().deleteLater() - model.setParent(self) - self.setModel(model) self._active = True self._maybe_show()