diff options
Diffstat (limited to 'qutebrowser/completion/completionwidget.py')
-rw-r--r-- | qutebrowser/completion/completionwidget.py | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/qutebrowser/completion/completionwidget.py b/qutebrowser/completion/completionwidget.py index 01527e763..665757e89 100644 --- a/qutebrowser/completion/completionwidget.py +++ b/qutebrowser/completion/completionwidget.py @@ -156,6 +156,15 @@ class CompletionView(QTreeView): assert isinstance(model, completionmodel.CompletionModel), model return model + def _selection_model(self) -> QItemSelectionModel: + """Get the current selection model. + + Ensures the model is not None. + """ + model = self.selectionModel() + assert model is not None + return model + @pyqtSlot(str) def _on_config_changed(self, option): if option in ['completion.height', 'completion.shrink']: @@ -169,7 +178,9 @@ class CompletionView(QTreeView): column_widths = self._model().column_widths pixel_widths = [(width * perc // 100) for perc in column_widths] - delta = self.verticalScrollBar().sizeHint().width() + bar = self.verticalScrollBar() + assert bar is not None + delta = bar.sizeHint().width() for i, width in reversed(list(enumerate(pixel_widths))): if width > delta: pixel_widths[i] -= delta @@ -191,7 +202,7 @@ class CompletionView(QTreeView): A QModelIndex. """ model = self._model() - idx = self.selectionModel().currentIndex() + idx = self._selection_model().currentIndex() if not idx.isValid(): # No item selected yet if upwards: @@ -223,7 +234,7 @@ class CompletionView(QTreeView): Return: A QModelIndex. """ - old_idx = self.selectionModel().currentIndex() + old_idx = self._selection_model().currentIndex() idx = old_idx model = self._model() @@ -267,7 +278,7 @@ class CompletionView(QTreeView): Return: A QModelIndex. """ - idx = self.selectionModel().currentIndex() + idx = self._selection_model().currentIndex() model = self._model() if not idx.isValid(): return self._next_idx(upwards).sibling(0, 0) @@ -323,7 +334,7 @@ class CompletionView(QTreeView): if not self._active: return - selmodel = self.selectionModel() + selmodel = self._selection_model() indices = { 'next': lambda: self._next_idx(upwards=False), 'prev': lambda: self._next_idx(upwards=True), @@ -363,9 +374,10 @@ 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() + old_model = self.model() + if old_model is not None and model is not old_model: + old_model.deleteLater() + self._selection_model().deleteLater() self.setModel(model) @@ -395,7 +407,7 @@ class CompletionView(QTreeView): self.pattern = pattern with debug.log_time(log.completion, 'Set pattern {}'.format(pattern)): self._model().set_pattern(pattern) - self.selectionModel().clear() + self._selection_model().clear() self._maybe_update_geometry() self._maybe_show() @@ -415,7 +427,7 @@ class CompletionView(QTreeView): def on_clear_completion_selection(self): """Clear the selection model when an item is activated.""" self.hide() - selmod = self.selectionModel() + selmod = self._selection_model() if selmod is not None: selmod.clearSelection() selmod.clearCurrentIndex() @@ -426,14 +438,18 @@ class CompletionView(QTreeView): confheight = str(config.val.completion.height) if confheight.endswith('%'): perc = int(confheight.rstrip('%')) - height = self.window().height() * perc // 100 + window = self.window() + assert window is not None + height = window.height() * perc // 100 else: height = int(confheight) # Shrink to content size if needed and shrinking is enabled if config.val.completion.shrink: + bar = self.horizontalScrollBar() + assert bar is not None contents_height = ( self.viewportSizeHint().height() + - self.horizontalScrollBar().sizeHint().height()) + bar.sizeHint().height()) if contents_height <= height: height = contents_height # The width isn't really relevant as we're expanding anyways. |