diff --git a/qutebrowser/utils/completion.py b/qutebrowser/utils/completion.py index a70a7f898..da48586ae 100644 --- a/qutebrowser/utils/completion.py +++ b/qutebrowser/utils/completion.py @@ -276,6 +276,7 @@ class CompletionFilterModel(QSortFilterProxyModel): """Subclass of QSortFilterProxyModel with custom sorting/filtering.""" _pattern = None + srcmodel = None def __init__(self, parent=None): super().__init__(parent) @@ -286,6 +287,11 @@ class CompletionFilterModel(QSortFilterProxyModel): """Getter for pattern.""" return self._pattern + def setsrc(self, model): + self.setSourceModel(model) + self.srcmodel = model + self.pattern = '' + @pattern.setter def pattern(self, val): """Setter for pattern. @@ -318,8 +324,8 @@ class CompletionFilterModel(QSortFilterProxyModel): """ if parent == QModelIndex(): return True - idx = self.sourceModel().index(row, 0, parent) - data = self.sourceModel().data(idx).value() + idx = self.srcmodel.index(row, 0, parent) + data = self.srcmodel.data(idx).value() # TODO more sophisticated filtering if not self.pattern: return True @@ -334,8 +340,8 @@ class CompletionFilterModel(QSortFilterProxyModel): Prefers all items which start with self.pattern. Other than that, uses normal Python string sorting. """ - left = self.sourceModel().data(lindex).value() - right = self.sourceModel().data(rindex).value() + left = self.srcmodel.data(lindex).value() + right = self.srcmodel.data(rindex).value() leftstart = left.startswith(self.pattern) rightstart = right.startswith(self.pattern) diff --git a/qutebrowser/widgets/completion.py b/qutebrowser/widgets/completion.py index 27f1a8f92..0453b145a 100644 --- a/qutebrowser/widgets/completion.py +++ b/qutebrowser/widgets/completion.py @@ -73,11 +73,10 @@ class CompletionView(QTreeView): self.completion_models['command'] = CommandCompletionModel() self.model = CompletionFilterModel() self.setModel(self.model) - self.model.setSourceModel(self.completion_models['command']) + self.setmodel('command') self.setItemDelegate(CompletionItemDelegate()) self.setStyleSheet(config.get_stylesheet(self._stylesheet)) self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Minimum) - self.expandAll() self.setHeaderHidden(True) self.setIndentation(0) self.setItemsExpandable(False) @@ -109,8 +108,7 @@ class CompletionView(QTreeView): model -- A QAbstractItemModel with available completions. """ - self.model.setSourceModel(self.completion_models[model]) - self.model.pattern = '' + self.model.setsrc(self.completion_models[model]) self.expandAll() def resize_to_bar(self, geom): @@ -147,7 +145,7 @@ class CompletionView(QTreeView): self.setmodel('command') text = text.lstrip(':') self.model.pattern = text - self.model.sourceModel().mark_all_items(text) + self.model.srcmodel.mark_all_items(text) if self.enabled: self.show()