Skip to content

Commit

Permalink
Merge from 5.x: PR #17735
Browse files Browse the repository at this point in the history
Fixes #17726
  • Loading branch information
ccordoba12 committed Apr 22, 2022
2 parents 311f820 + 313a20b commit aa66fef
Showing 1 changed file with 26 additions and 48 deletions.
74 changes: 26 additions & 48 deletions spyder/api/plugin_registration/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,28 @@ def delete_plugin(self, plugin_name: str, teardown: bool = True) -> bool:
return False

if isinstance(plugin_instance, SpyderPluginV2):
# Cleanly delete plugin widgets. This avoids segfautls with
# PyQt 5.15
if isinstance(plugin_instance, SpyderDockablePlugin):
try:
plugin_instance.get_widget().close()
plugin_instance.get_widget().deleteLater()
except RuntimeError:
pass
else:
container = plugin_instance.get_container()
if container:
try:
container.close()
container.deleteLater()
except RuntimeError:
pass

# Delete plugin
try:
plugin_instance.deleteLater()
except RuntimeError:
pass
if teardown:
# Disconnect plugin from other plugins
self._teardown_plugin(plugin_name)
Expand All @@ -449,6 +471,10 @@ def delete_plugin(self, plugin_name: str, teardown: bool = True) -> bool:
except RuntimeError:
pass
elif isinstance(plugin_instance, SpyderPlugin):
try:
plugin_instance.deleteLater()
except RuntimeError:
pass
if teardown:
# Disconnect depending plugins from the plugin to delete
self._notify_plugin_teardown(plugin_name)
Expand Down Expand Up @@ -535,10 +561,6 @@ def delete_all_plugins(self, excluding: Optional[Set[str]] = None,
if plugin_name not in excluding:
plugin_instance = self.plugin_registry[plugin_name]
if isinstance(plugin_instance, SpyderPlugin):
try:
plugin_instance.deleteLater()
except RuntimeError:
pass
can_close &= self.delete_plugin(
plugin_name, teardown=False)
if not can_close and not close_immediately:
Expand All @@ -552,28 +574,6 @@ def delete_all_plugins(self, excluding: Optional[Set[str]] = None,
if plugin_name not in excluding:
plugin_instance = self.plugin_registry[plugin_name]
if isinstance(plugin_instance, SpyderPluginV2):
# Cleanly delete plugin widgets. This avoids segfautls with
# PyQt 5.15
if isinstance(plugin_instance, SpyderDockablePlugin):
try:
plugin_instance.get_widget().close()
plugin_instance.get_widget().deleteLater()
except RuntimeError:
pass
else:
container = plugin_instance.get_container()
if container:
try:
container.close()
container.deleteLater()
except RuntimeError:
pass

# Delete plugin
try:
plugin_instance.deleteLater()
except RuntimeError:
pass
can_close &= self.delete_plugin(
plugin_name, teardown=False)
if not can_close and not close_immediately:
Expand All @@ -587,28 +587,6 @@ def delete_all_plugins(self, excluding: Optional[Set[str]] = None,
if plugin_name not in excluding:
plugin_instance = self.plugin_registry[plugin_name]
if isinstance(plugin_instance, SpyderPluginV2):
# Cleanly delete plugin widgets. This avoids segfautls with
# PyQt 5.15
if isinstance(plugin_instance, SpyderDockablePlugin):
try:
plugin_instance.get_widget().close()
plugin_instance.get_widget().deleteLater()
except RuntimeError:
pass
else:
container = plugin_instance.get_container()
if container:
try:
container.close()
container.deleteLater()
except RuntimeError:
pass

# Delete plugin
try:
plugin_instance.deleteLater()
except RuntimeError:
pass
can_close &= self.delete_plugin(
plugin_name, teardown=False)
if not can_close and not close_immediately:
Expand Down

0 comments on commit aa66fef

Please sign in to comment.