From 387c84beffbcdd745bbf9711cc026e257195bfc2 Mon Sep 17 00:00:00 2001 From: Alexander Cogneau Date: Fri, 21 Aug 2015 16:05:33 +0200 Subject: [PATCH 1/3] Completion model filters are now per-window (via completer.py) --- qutebrowser/completion/completer.py | 18 ++++++++++++++++-- qutebrowser/completion/models/base.py | 6 ++++++ qutebrowser/completion/models/instances.py | 11 ++++------- qutebrowser/completion/models/sortfilter.py | 4 +++- qutebrowser/completion/models/urlmodel.py | 1 + 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/qutebrowser/completion/completer.py b/qutebrowser/completion/completer.py index 2df964658..91ebd9f71 100644 --- a/qutebrowser/completion/completer.py +++ b/qutebrowser/completion/completer.py @@ -25,6 +25,7 @@ from qutebrowser.config import config from qutebrowser.commands import cmdexc, cmdutils, runners from qutebrowser.utils import usertypes, log, objreg, utils from qutebrowser.completion.models import instances +from qutebrowser.completion.models.sortfilter import CompletionFilterModel class Completer(QObject): @@ -153,7 +154,19 @@ class Completer(QObject): model = None else: model = instances.get(completion) - return model + return self._get_filter_completion_model(model) + + def _get_filter_completion_model(self, model): + """Wraps the argument model with a CompletionFilterModel. + + Args: + model: the source model. + + Return: + A completion filter model. + """ + filtermodel = CompletionFilterModel(source=model, parent=self.parent()) + return filtermodel def _filter_cmdline_parts(self, parts, cursor_part): """Filter a list of commandline parts to exclude flags. @@ -202,7 +215,8 @@ class Completer(QObject): "{}".format(parts, cursor_part)) if cursor_part == 0: # '|' or 'set|' - return instances.get(usertypes.Completion.command) + model = instances.get(usertypes.Completion.command) + return self._get_filter_completion_model(model) # delegate completion to command try: completions = cmdutils.cmd_dict[parts[0]].completion diff --git a/qutebrowser/completion/models/base.py b/qutebrowser/completion/models/base.py index a35c7f063..df0d7eb77 100644 --- a/qutebrowser/completion/models/base.py +++ b/qutebrowser/completion/models/base.py @@ -40,12 +40,18 @@ class BaseCompletionModel(QStandardItemModel): Used for showing completions later in the CompletionView. Supports setting marks and adding new categories/items easily. + Attributes: + dumb_sort: the sorting that will be used by the wrapping + CompletionFilterModel + Class Attributes: COLUMN_WIDTHS: The width percentages of the columns used in the completion view. + DUMB_SORT: the dumb sorting used by the model """ COLUMN_WIDTHS = (30, 70, 0) + DUMB_SORT = None def __init__(self, parent=None): super().__init__(parent) diff --git a/qutebrowser/completion/models/instances.py b/qutebrowser/completion/models/instances.py index 0fc683488..4e993995b 100644 --- a/qutebrowser/completion/models/instances.py +++ b/qutebrowser/completion/models/instances.py @@ -27,10 +27,9 @@ Module attributes: import functools -from PyQt5.QtCore import pyqtSlot, Qt +from PyQt5.QtCore import pyqtSlot from qutebrowser.completion.models import miscmodels, urlmodel, configmodel -from qutebrowser.completion.models.sortfilter import CompletionFilterModel from qutebrowser.utils import objreg, usertypes, log, debug from qutebrowser.config import configdata @@ -38,7 +37,7 @@ from qutebrowser.config import configdata _instances = {} -def _init_model(klass, *args, dumb_sort=None, **kwargs): +def _init_model(klass, *args, **kwargs): """Helper to initialize a model. Args: @@ -48,8 +47,7 @@ def _init_model(klass, *args, dumb_sort=None, **kwargs): dumb_sort: Passed to CompletionFilterModel. """ app = objreg.get('app') - return CompletionFilterModel(klass(*args, parent=app, **kwargs), - dumb_sort=dumb_sort, parent=app) + return klass(*args, parent=app, **kwargs) def _init_command_completion(): @@ -70,8 +68,7 @@ def _init_url_completion(): """Initialize the URL completion model.""" log.completion.debug("Initializing URL completion.") with debug.log_time(log.completion, 'URL completion init'): - model = _init_model(urlmodel.UrlCompletionModel, - dumb_sort=Qt.DescendingOrder) + model = _init_model(urlmodel.UrlCompletionModel) _instances[usertypes.Completion.url] = model diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index 3c247a0a2..3312e3e7a 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -41,11 +41,13 @@ class CompletionFilterModel(QSortFilterProxyModel): _sort_order: The order to use for sorting if using dumb_sort. """ - def __init__(self, source, parent=None, *, dumb_sort=None): + def __init__(self, source, parent=None): super().__init__(parent) super().setSourceModel(source) self.srcmodel = source self.pattern = '' + + dumb_sort = self.srcmodel.DUMB_SORT if dumb_sort is None: # pylint: disable=invalid-name self.lessThan = self.intelligentLessThan diff --git a/qutebrowser/completion/models/urlmodel.py b/qutebrowser/completion/models/urlmodel.py index ca1ef31fe..9a2ffdfd2 100644 --- a/qutebrowser/completion/models/urlmodel.py +++ b/qutebrowser/completion/models/urlmodel.py @@ -41,6 +41,7 @@ class UrlCompletionModel(base.BaseCompletionModel): TIME_COLUMN = 2 COLUMN_WIDTHS = (40, 50, 10) + DUMB_SORT = Qt.DescendingOrder def __init__(self, parent=None): super().__init__(parent) From 729c10e0a96725d96ed18b560336e8a400b94175 Mon Sep 17 00:00:00 2001 From: Alexander Cogneau Date: Fri, 21 Aug 2015 16:23:28 +0200 Subject: [PATCH 2/3] Fix PEP issue --- qutebrowser/completion/completer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qutebrowser/completion/completer.py b/qutebrowser/completion/completer.py index 91ebd9f71..6fe4c24ad 100644 --- a/qutebrowser/completion/completer.py +++ b/qutebrowser/completion/completer.py @@ -157,7 +157,7 @@ class Completer(QObject): return self._get_filter_completion_model(model) def _get_filter_completion_model(self, model): - """Wraps the argument model with a CompletionFilterModel. + """Wrap the argument model with a CompletionFilterModel. Args: model: the source model. From 7ed4977d6403f1385ed47c43c9632533cc5d0723 Mon Sep 17 00:00:00 2001 From: Alexander Cogneau Date: Fri, 21 Aug 2015 16:56:36 +0200 Subject: [PATCH 3/3] Change parent of filter models --- qutebrowser/completion/completer.py | 2 +- qutebrowser/completion/models/base.py | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/qutebrowser/completion/completer.py b/qutebrowser/completion/completer.py index 6fe4c24ad..6cd11848a 100644 --- a/qutebrowser/completion/completer.py +++ b/qutebrowser/completion/completer.py @@ -165,7 +165,7 @@ class Completer(QObject): Return: A completion filter model. """ - filtermodel = CompletionFilterModel(source=model, parent=self.parent()) + filtermodel = CompletionFilterModel(source=model, parent=self) return filtermodel def _filter_cmdline_parts(self, parts, cursor_part): diff --git a/qutebrowser/completion/models/base.py b/qutebrowser/completion/models/base.py index df0d7eb77..3a0590bcd 100644 --- a/qutebrowser/completion/models/base.py +++ b/qutebrowser/completion/models/base.py @@ -40,10 +40,6 @@ class BaseCompletionModel(QStandardItemModel): Used for showing completions later in the CompletionView. Supports setting marks and adding new categories/items easily. - Attributes: - dumb_sort: the sorting that will be used by the wrapping - CompletionFilterModel - Class Attributes: COLUMN_WIDTHS: The width percentages of the columns used in the completion view.