Skip to content

Commit

Permalink
Merge pull request #22288 from ccordoba12/fix-layout-with-missing-plu…
Browse files Browse the repository at this point in the history
…gins

PR: Fix several errors with missing plugins when setting a layout
  • Loading branch information
ccordoba12 authored Jul 25, 2024
2 parents b610229 + 073a22e commit b40f192
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 23 deletions.
49 changes: 33 additions & 16 deletions spyder/plugins/layout/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
# Local imports
from spyder.api.exceptions import SpyderAPIError
from spyder.api.plugin_registration.registry import PLUGIN_REGISTRY
from spyder.api.translations import _


class BaseGridLayoutType:
Expand Down Expand Up @@ -194,15 +193,17 @@ def get_name(self):

# --- Public API
# ------------------------------------------------------------------------
def add_area(self,
plugin_ids,
row,
column,
row_span=1,
col_span=1,
default=False,
visible=True,
hidden_plugin_ids=[]):
def add_area(
self,
plugin_ids,
row,
column,
row_span=1,
col_span=1,
default=False,
visible=True,
hidden_plugin_ids=[],
):
"""
Add a new area and `plugin_ids` that will populate it to the layout.
Expand Down Expand Up @@ -381,8 +382,15 @@ def set_main_window_layout(self, main_window, dockable_plugins):
docks = {}
for area in patched_areas:
current_area = area
plugin_id = current_area["plugin_ids"][0]
plugin = main_window.get_plugin(plugin_id, error=False)

# Iterate over plugins in current_area until we find one that is
# available
plugin = None
for plugin_id in current_area["plugin_ids"]:
plugin = main_window.get_plugin(plugin_id, error=False)
if plugin is not None:
break

if plugin:
dock = plugin.dockwidget
docks[(current_area["row"], current_area["column"])] = dock
Expand Down Expand Up @@ -443,10 +451,18 @@ def set_main_window_layout(self, main_window, dockable_plugins):
plugins_to_tabify = []
for area in patched_areas:
area_visible = area["visible"]
base_plugin = main_window.get_plugin(
area["plugin_ids"][0], error=False)

# Iterate over plugins in area until we find one that is available
base_plugin = None
for i, plugin_id in enumerate(area["plugin_ids"]):
base_plugin = main_window.get_plugin(
area["plugin_ids"][i], error=False
)
if base_plugin is not None:
break

if base_plugin:
plugin_ids = area["plugin_ids"][1:]
plugin_ids = area["plugin_ids"][i + 1 :]
hidden_plugin_ids = area["hidden_plugin_ids"]
for plugin_id in plugin_ids:
current_plugin = main_window.get_plugin(
Expand Down Expand Up @@ -474,7 +490,8 @@ def set_main_window_layout(self, main_window, dockable_plugins):
for plugin, base_plugin in plugins_to_tabify:
if not self.plugin.tabify_plugin(plugin):
self.plugin.tabify_plugins(base_plugin, plugin)
current_plugin.toggle_view(False)
if current_plugin:
current_plugin.toggle_view(False)

column_docks = []
column_stretches = []
Expand Down
17 changes: 10 additions & 7 deletions spyder/plugins/layout/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -993,8 +993,12 @@ def restore_visible_plugins(self):

# This should only be necessary the first time this method is run
if not visible_plugins:
visible_plugins = [Plugins.IPythonConsole, Plugins.Help,
Plugins.Editor]
visible_plugins = [
Plugins.IPythonConsole,
Plugins.Help,
Plugins.VariableExplorer, # In case Help is not available
Plugins.Editor,
]

# Restore visible plugins
for plugin in visible_plugins:
Expand Down Expand Up @@ -1151,10 +1155,9 @@ def tabify_new_plugins(self):
if plugin:
self.tabify_plugin(plugin, Plugins.Console)

# Tabify new external plugins
# Tabify any new plugin that was not available in the previous session.
# This can include internal plugins that were automatically disabled
# in the first session (e.g. due to the lack of WebEngine).
for plugin in self.get_dockable_plugins():
if (
plugin.NAME in PLUGIN_REGISTRY.external_plugins
and plugin.get_conf('first_time', True)
):
if plugin.get_conf('first_time', True):
self.tabify_plugin(plugin, Plugins.Console)

0 comments on commit b40f192

Please sign in to comment.