diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
index e89daaecb0..1292f5c7c7 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
@@ -347,17 +347,17 @@ namespace ICSharpCode.FormsDesigner
{
disposing = true;
if (IsFormsDesignerVisible) {
- Deselected();
+ Deselecting();
}
base.Dispose();
}
- public override void Deselected()
+ public override void Deselecting()
{
// can happen if form designer is disposed and then deselected
if (!IsFormsDesignerVisible)
return;
- LoggingService.Info("Deselected form designer, unloading..." + viewContent.TitleName);
+ LoggingService.Info("Deselecting form designer, unloading..." + viewContent.TitleName);
PropertyPad.PropertyValueChanged -= PropertyValueChanged;
propertyContainer.Clear();
IsFormsDesignerVisible = false;
diff --git a/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs b/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs
index de368d1cf5..45af29e452 100644
--- a/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs
+++ b/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs
@@ -55,6 +55,10 @@ namespace ICSharpCode.SharpDevelop.Gui
public virtual void Deselected()
{
}
+
+ public virtual void Deselecting()
+ {
+ }
public virtual void RedrawContent()
{
diff --git a/src/Main/Base/Project/Src/Gui/IBaseViewContent.cs b/src/Main/Base/Project/Src/Gui/IBaseViewContent.cs
index 5d471b5430..ae20de4306 100644
--- a/src/Main/Base/Project/Src/Gui/IBaseViewContent.cs
+++ b/src/Main/Base/Project/Src/Gui/IBaseViewContent.cs
@@ -50,6 +50,12 @@ namespace ICSharpCode.SharpDevelop.Gui
/// tab. NOT when the windows is selected.
///
void Selected();
+
+ ///
+ /// Is called just before the view content is deselected inside the window
+ /// tab before the other window is selected. NOT when the windows is deselected.
+ ///
+ void Deselecting();
///
/// Is called when the view content is deselected inside the window
diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs
index 45bcf34bb0..0a508fbba3 100644
--- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs
+++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs
@@ -136,7 +136,9 @@ namespace ICSharpCode.SharpDevelop.Gui
viewTabControl = new TabControl();
viewTabControl.Alignment = TabAlignment.Bottom;
viewTabControl.Dock = DockStyle.Fill;
- viewTabControl.SelectedIndexChanged += new EventHandler(viewTabControlIndexChanged);
+ viewTabControl.Selected += viewTabControlSelected;
+ viewTabControl.Deselecting += viewTabControlDeselecting;
+ viewTabControl.Deselected += viewTabControlDeselected;
}
internal void InitControls()
@@ -200,11 +202,6 @@ namespace ICSharpCode.SharpDevelop.Gui
WorkbenchSingleton.SafeThreadAsyncCall(new MethodInvoker(this.RefreshSecondaryViewContents));
}
- void LeaveTabPage(object sender, EventArgs e)
- {
- OnWindowDeselected(EventArgs.Empty);
- }
-
public IViewContent ViewContent {
get {
return content;
@@ -260,6 +257,9 @@ namespace ICSharpCode.SharpDevelop.Gui
if (viewTabControl != null) {
foreach (TabPage page in viewTabControl.TabPages) {
+ if (viewTabControl.SelectedTab == page && page.Tag is IBaseViewContent) {
+ ((IBaseViewContent)page.Tag).Deselecting();
+ }
page.Controls.Clear();
if (viewTabControl.SelectedTab == page && page.Tag is IBaseViewContent) {
((IBaseViewContent)page.Tag).Deselected();
@@ -319,28 +319,40 @@ namespace ICSharpCode.SharpDevelop.Gui
return content.SecondaryViewContents[index - 1];
}
- int oldIndex = 0;
- void viewTabControlIndexChanged(object sender, EventArgs e)
+ void viewTabControlSelected(object sender, TabControlEventArgs e)
{
- if (oldIndex >= 0) {
- IBaseViewContent secondaryViewContent = GetSubViewContent(oldIndex);
+ if (e.Action == TabControlAction.Selected && e.TabPageIndex >= 0) {
+ IBaseViewContent secondaryViewContent = GetSubViewContent(e.TabPageIndex);
if (secondaryViewContent != null) {
secondaryViewContent.Deselected();
- }
- }
-
- if (viewTabControl.SelectedIndex >= 0) {
- IBaseViewContent secondaryViewContent = GetSubViewContent(viewTabControl.SelectedIndex);
- if (secondaryViewContent != null) {
secondaryViewContent.SwitchedTo();
secondaryViewContent.Selected();
}
}
- oldIndex = viewTabControl.SelectedIndex;
WorkbenchSingleton.Workbench.WorkbenchLayout.OnActiveWorkbenchWindowChanged(EventArgs.Empty);
ActiveViewContent.Control.Focus();
}
+ void viewTabControlDeselecting(object sender, TabControlCancelEventArgs e)
+ {
+ if (e.Action == TabControlAction.Deselecting && e.TabPageIndex >= 0) {
+ IBaseViewContent secondaryViewContent = GetSubViewContent(e.TabPageIndex);
+ if (secondaryViewContent != null) {
+ secondaryViewContent.Deselecting();
+ }
+ }
+ }
+
+ void viewTabControlDeselected(object sender, TabControlEventArgs e)
+ {
+ if (e.Action == TabControlAction.Deselected && e.TabPageIndex >= 0) {
+ IBaseViewContent secondaryViewContent = GetSubViewContent(e.TabPageIndex);
+ if (secondaryViewContent != null) {
+ secondaryViewContent.Deselected();
+ }
+ }
+ }
+
public virtual void RedrawContent()
{
if (viewTabControl != null) {