diff --git a/spyder/plugins/pylint/plugin.py b/spyder/plugins/pylint/plugin.py index 752f623d285..a1f2563cf26 100644 --- a/spyder/plugins/pylint/plugin.py +++ b/spyder/plugins/pylint/plugin.py @@ -16,7 +16,8 @@ # Local imports from spyder.api.plugins import Plugins, SpyderDockablePlugin -from spyder.api.plugin_registration.decorators import on_plugin_available +from spyder.api.plugin_registration.decorators import ( + on_plugin_available, on_plugin_teardown) from spyder.api.translations import get_translation from spyder.utils.programs import is_module_installed from spyder.plugins.mainmenu.api import ApplicationMenus @@ -116,10 +117,13 @@ def on_projects_available(self): # Connect to projects projects = self.get_plugin(Plugins.Projects) - projects.sig_project_loaded.connect( + self._set_project_dir = ( lambda value: widget.set_conf("project_dir", value)) - projects.sig_project_closed.connect( - lambda value: widget.set_conf("project_dir", None)) + self._unset_project_dir = ( + lambda value: widget.set_conf("project_dir", value)) + + projects.sig_project_loaded.connect(self._set_project_dir) + projects.sig_project_closed.connect(self._unset_project_dir) @on_plugin_available(plugin=Plugins.MainMenu) def on_main_menu_available(self): @@ -129,6 +133,46 @@ def on_main_menu_available(self): mainmenu.add_item_to_application_menu( pylint_act, menu_id=ApplicationMenus.Source) + @on_plugin_teardown(plugin=Plugins.Editor) + def on_editor_teardown(self): + widget = self.get_widget() + editor = self.get_plugin(Plugins.Editor) + + # Connect to Editor + widget.sig_edit_goto_requested.disconnect(editor.load) + editor.sig_editor_focus_changed.disconnect(self._set_filename) + + pylint_act = self.get_action(PylintActions.AnalyzeCurrentFile) + + # TODO: use new API when editor has migrated + editor.pythonfile_dependent_actions.remove(pylint_act) + + @on_plugin_teardown(plugin=Plugins.Preferences) + def on_preferences_teardown(self): + preferences = self.get_plugin(Plugins.Preferences) + preferences.deregister_plugin_preferences(self) + + @on_plugin_teardown(plugin=Plugins.Projects) + def on_projects_teardown(self): + widget = self.get_widget() + + # Connect to projects + projects = self.get_plugin(Plugins.Projects) + projects.sig_project_loaded.disconnect(self._set_project_dir) + projects.sig_project_closed.disconnect(self._unset_project_dir) + + self._set_project_dir = None + self._unset_project_dir = None + + @on_plugin_teardown(plugin=Plugins.MainMenu) + def on_main_menu_teardown(self): + mainmenu = self.get_plugin(Plugins.MainMenu) + + pylint_act = self.get_action(PylintActions.AnalyzeCurrentFile) + source_menu = mainmenu.get_application_menu( + ApplicationMenus.Source) + mainmenu.remove_item_from_application_menu(pylint_act, menu=source_menu) + # --- Private API # ------------------------------------------------------------------------ @Slot() diff --git a/spyder/plugins/run/plugin.py b/spyder/plugins/run/plugin.py index 34b1a6c4a61..3d0c0e42d30 100644 --- a/spyder/plugins/run/plugin.py +++ b/spyder/plugins/run/plugin.py @@ -12,7 +12,8 @@ # Local imports from spyder.api.plugins import Plugins, SpyderPluginV2 -from spyder.api.plugin_registration.decorators import on_plugin_available +from spyder.api.plugin_registration.decorators import ( + on_plugin_available, on_plugin_teardown) from spyder.api.translations import get_translation from spyder.plugins.run.confpage import RunConfigPage @@ -54,5 +55,10 @@ def on_preferences_available(self): preferences = self.get_plugin(Plugins.Preferences) preferences.register_plugin_preferences(self) + @on_plugin_teardown(plugin=Plugins.Preferences) + def on_preferences_teardown(self): + preferences = self.get_plugin(Plugins.Preferences) + preferences.deregister_plugin_preferences(self) + # --- Public API # ------------------------------------------------------------------------ diff --git a/spyder/plugins/shortcuts/plugin.py b/spyder/plugins/shortcuts/plugin.py index 72291f19873..f7e37a90833 100644 --- a/spyder/plugins/shortcuts/plugin.py +++ b/spyder/plugins/shortcuts/plugin.py @@ -21,7 +21,8 @@ # Local imports from spyder.api.plugins import Plugins, SpyderPluginV2 -from spyder.api.plugin_registration.decorators import on_plugin_available +from spyder.api.plugin_registration.decorators import ( + on_plugin_available, on_plugin_teardown) from spyder.api.translations import get_translation from spyder.plugins.mainmenu.api import ApplicationMenus, HelpMenuSections from spyder.plugins.shortcuts.confpage import ShortcutsConfigPage @@ -97,6 +98,24 @@ def on_main_menu_available(self): section=HelpMenuSections.Documentation, ) + @on_plugin_teardown(plugin=Plugins.Preferences) + def on_preferences_teardown(self): + preferences = self.get_plugin(Plugins.Preferences) + preferences.deregister_plugin_preferences(self) + + @on_plugin_teardown(plugin=Plugins.MainMenu) + def on_main_menu_teardown(self): + mainmenu = self.get_plugin(Plugins.MainMenu) + shortcuts_action = self.get_action( + ShortcutActions.ShortcutSummaryAction) + + # Add to Help menu. + help_menu = mainmenu.get_application_menu(ApplicationMenus.Help) + mainmenu.remove_item_from_application_menu( + shortcuts_action, + menu=help_menu + ) + def on_mainwindow_visible(self): self.apply_shortcuts()