diff --git a/qutebrowser/utils/completer.py b/qutebrowser/utils/completer.py index 510ad3cd4..5085e62b1 100644 --- a/qutebrowser/utils/completer.py +++ b/qutebrowser/utils/completer.py @@ -55,13 +55,13 @@ class Completer(QObject): self._win_id = win_id self._ignore_change = False - self.models = { + self._models = { usertypes.Completion.option: {}, usertypes.Completion.value: {}, } self._init_static_completions() self._init_setting_completions() - self._init_quickmark_completions() + self.init_quickmark_completions() def __repr__(self): return utils.get_repr(self) @@ -74,30 +74,35 @@ class Completer(QObject): def _init_static_completions(self): """Initialize the static completion models.""" - self.models[usertypes.Completion.command] = CFM( + self._models[usertypes.Completion.command] = CFM( models.CommandCompletionModel(self), self) - self.models[usertypes.Completion.helptopic] = CFM( + self._models[usertypes.Completion.helptopic] = CFM( models.HelpCompletionModel(self), self) def _init_setting_completions(self): """Initialize setting completion models.""" - self.models[usertypes.Completion.section] = CFM( + self._models[usertypes.Completion.section] = CFM( models.SettingSectionCompletionModel(self), self) - self.models[usertypes.Completion.option] = {} - self.models[usertypes.Completion.value] = {} + self._models[usertypes.Completion.option] = {} + self._models[usertypes.Completion.value] = {} for sectname in configdata.DATA: model = models.SettingOptionCompletionModel(sectname, self) - self.models[usertypes.Completion.option][sectname] = CFM( + self._models[usertypes.Completion.option][sectname] = CFM( model, self) - self.models[usertypes.Completion.value][sectname] = {} + self._models[usertypes.Completion.value][sectname] = {} for opt in configdata.DATA[sectname].keys(): model = models.SettingValueCompletionModel(sectname, opt, self) - self.models[usertypes.Completion.value][sectname][opt] = CFM( + self._models[usertypes.Completion.value][sectname][opt] = CFM( model, self) - def _init_quickmark_completions(self): + @pyqtSlot() + def init_quickmark_completions(self): """Initialize quickmark completion models.""" - self.models[usertypes.Completion.quickmark] = CFM( + try: + self._models[usertypes.Completion.quickmark].deleteLater() + except KeyError: + pass + self._models[usertypes.Completion.quickmark] = CFM( models.QuickmarkCompletionModel(self), self) def _get_new_completion(self, parts, cursor_part): @@ -109,7 +114,7 @@ class Completer(QObject): """ if cursor_part == 0: # '|' or 'set|' - return self.models[usertypes.Completion.command] + return self._models[usertypes.Completion.command] # delegate completion to command try: completions = cmdutils.cmd_dict[parts[0]].completion @@ -133,17 +138,17 @@ class Completer(QObject): ', '.join(dbg_completions))) if completion == usertypes.Completion.option: section = parts[cursor_part - 1] - model = self.models[completion].get(section) + model = self._models[completion].get(section) elif completion == usertypes.Completion.value: section = parts[cursor_part - 2] option = parts[cursor_part - 1] try: - model = self.models[completion][section][option] + model = self._models[completion][section][option] except KeyError: # No completion model for this section/option. model = None else: - model = self.models.get(completion) + model = self._models.get(completion) return model def _quote(self, s): @@ -186,11 +191,6 @@ class Completer(QObject): self._ignore_change = True self.change_completed_part.emit(data, False) - @pyqtSlot() - def on_quickmarks_changed(self): - self.clear() - self._init_quickmark_completions() - @pyqtSlot(str, list, int) def on_update_completion(self, prefix, parts, cursor_part): """Schedule updating/enabling completion. diff --git a/qutebrowser/widgets/mainwindow.py b/qutebrowser/widgets/mainwindow.py index 613809560..7e8ec2912 100644 --- a/qutebrowser/widgets/mainwindow.py +++ b/qutebrowser/widgets/mainwindow.py @@ -119,10 +119,6 @@ class MainWindow(QWidget): config.on_change(self.resize_completion, 'completion', 'height') config.on_change(self.resize_completion, 'completion', 'shrink') - quickmark_model = self._get_object('completer').models[usertypes.Completion.quickmark] - quickmark_manager = objreg.get('quickmark-manager') - quickmark_manager.changed.connect(quickmark_model.srcmodel.on_quickmarks_changed) - #self.retranslateUi(MainWindow) #self.tabWidget.setCurrentIndex(0) #QtCore.QMetaObject.connectSlotsByName(MainWindow) @@ -264,6 +260,11 @@ class MainWindow(QWidget): # downloads tabs.start_download.connect(download_manager.fetch) + # quickmark completion + completer = self._get_object('completer') + quickmark_manager = objreg.get('quickmark-manager') + quickmark_manager.changed.connect(completer.init_quickmark_completions) + @pyqtSlot() def resize_completion(self): """Adjust completion according to config."""