summaryrefslogtreecommitdiff
path: root/qutebrowser/completion/completionwidget.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/completion/completionwidget.py')
-rw-r--r--qutebrowser/completion/completionwidget.py40
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.