diff --git a/Source/Editor/GUI/Tabs/Tab.cs b/Source/Editor/GUI/Tabs/Tab.cs index 3968cc17d..85f805af0 100644 --- a/Source/Editor/GUI/Tabs/Tab.cs +++ b/Source/Editor/GUI/Tabs/Tab.cs @@ -13,6 +13,8 @@ namespace FlaxEditor.GUI.Tabs [HideInEditor] public class Tab : ContainerControl { + internal Tabs _selectedInTabs; + /// /// Gets or sets the text. /// @@ -86,5 +88,25 @@ namespace FlaxEditor.GUI.Tabs { return new Tabs.TabHeader((Tabs)Parent, this); } + + /// + protected override void OnParentChangedInternal() + { + if (_selectedInTabs != null) + _selectedInTabs.SelectedTab = null; + + base.OnParentChangedInternal(); + } + + /// + public override void OnDestroy() + { + if (IsDisposing) + return; + if (_selectedInTabs != null) + _selectedInTabs.SelectedTab = null; + + base.OnDestroy(); + } } } diff --git a/Source/Editor/GUI/Tabs/Tabs.cs b/Source/Editor/GUI/Tabs/Tabs.cs index d830b9e0f..b5e2cfe39 100644 --- a/Source/Editor/GUI/Tabs/Tabs.cs +++ b/Source/Editor/GUI/Tabs/Tabs.cs @@ -263,7 +263,12 @@ namespace FlaxEditor.GUI.Tabs // Check if index will change if (_selectedIndex != index) { - SelectedTab?.OnDeselected(); + var prev = SelectedTab; + if (prev != null) + { + prev._selectedInTabs = null; + prev.OnDeselected(); + } _selectedIndex = index; PerformLayout(); OnSelectedTabChanged(); @@ -342,8 +347,13 @@ namespace FlaxEditor.GUI.Tabs /// protected virtual void OnSelectedTabChanged() { + var selectedTab = SelectedTab; SelectedTabChanged?.Invoke(this); - SelectedTab?.OnSelected(); + if (selectedTab != null) + { + selectedTab._selectedInTabs = this; + selectedTab.OnSelected(); + } } ///