diff --git a/SharpDevelop.Tests.sln b/SharpDevelop.Tests.sln
index 407ba212bd..f9da0c21dd 100644
--- a/SharpDevelop.Tests.sln
+++ b/SharpDevelop.Tests.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 10
-# SharpDevelop 4.0.0.4966
+# SharpDevelop 4.0.0.4979
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@@ -556,6 +556,8 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -950,6 +952,10 @@ Global
{D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Release|Any CPU.Build.0 = Release|Any CPU
{D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {68D5EE3B-0C35-4DF1-BD29-6606851A02C1}.Debug|Win32.Build.0 = Debug|Win32
+ {68D5EE3B-0C35-4DF1-BD29-6606851A02C1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {68D5EE3B-0C35-4DF1-BD29-6606851A02C1}.Release|Win32.Build.0 = Release|Win32
+ {68D5EE3B-0C35-4DF1-BD29-6606851A02C1}.Release|Win32.ActiveCfg = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/Libraries/AvalonDock/DockableContent.cs b/src/Libraries/AvalonDock/DockableContent.cs
index fe6ffabacd..261ed678fa 100644
--- a/src/Libraries/AvalonDock/DockableContent.cs
+++ b/src/Libraries/AvalonDock/DockableContent.cs
@@ -415,7 +415,8 @@ namespace AvalonDock
}
else if (!e.Handled && e.Command == DockableContent.HideCommand)
{
- Manager.Hide(this);
+ //Manager.Hide(this);
+
e.Handled = true;
}
else if (!e.Handled && e.Command == DockableContent.FloatingCommand)
diff --git a/src/Libraries/AvalonDock/DockableFloatingWindow.cs b/src/Libraries/AvalonDock/DockableFloatingWindow.cs
index 6205113c4d..e0d0c08bb8 100644
--- a/src/Libraries/AvalonDock/DockableFloatingWindow.cs
+++ b/src/Libraries/AvalonDock/DockableFloatingWindow.cs
@@ -178,7 +178,8 @@ namespace AvalonDock
while (HostedPane.Items.Count > 0)
{
- Manager.Hide(HostedPane.Items[0] as DockableContent);
+ //Manager.Hide(HostedPane.Items[0] as DockableContent);
+ HostedPane.CloseOrHide(HostedPane.Items[0] as DockableContent);
}
Manager.UnregisterFloatingWindow(this);
@@ -228,8 +229,9 @@ namespace AvalonDock
}
else if (e.Command == CloseCommand)
{
- DockableContent currentContent = HostedPane.SelectedItem as DockableContent;
- Manager.Hide(currentContent);
+ //DockableContent currentContent = HostedPane.SelectedItem as DockableContent;
+ //Manager.Hide(currentContent);
+ HostedPane.CloseOrHide();
if (HostedPane.Items.Count == 0)
this.Close();
e.Handled = true;
diff --git a/src/Libraries/AvalonDock/DockablePane.cs b/src/Libraries/AvalonDock/DockablePane.cs
index af5c087d88..a58a7465bf 100644
--- a/src/Libraries/AvalonDock/DockablePane.cs
+++ b/src/Libraries/AvalonDock/DockablePane.cs
@@ -386,7 +386,7 @@ namespace AvalonDock
}
else if (e.Command == CloseCommand)
{
- Close();
+ CloseOrHide();
e.Handled = true;
}
else if (e.Command == ShowOptionsCommand)
@@ -481,21 +481,18 @@ namespace AvalonDock
GetManager().ToggleAutoHide(this);
}
+
///
- /// Close current content
+ /// Closes or hides current content depending on HideOnClose property
///
- internal virtual void Close()
+ internal void CloseOrHide()
{
- //GetManager().Hide(SelectedItem as DockableContent);
- if (SelectedItem is DockableContent)
- {
- DockableContent item = SelectedItem as DockableContent;
- if (item.HideOnClose)
- GetManager().Hide(SelectedItem as DockableContent);
- else
- this.Items.Remove(SelectedItem as DockableContent);
- }
+ CloseOrHide(SelectedItem as DockableContent);
}
+
+
+
+
#endregion
}
diff --git a/src/Libraries/AvalonDock/DockingManager.cs b/src/Libraries/AvalonDock/DockingManager.cs
index 4d7ec32637..be92b2756a 100644
--- a/src/Libraries/AvalonDock/DockingManager.cs
+++ b/src/Libraries/AvalonDock/DockingManager.cs
@@ -265,6 +265,9 @@ namespace AvalonDock
_activeDocument = value;
NotifyPropertyChanged("ActiveDocument");
+
+ if (ActiveContent == null)
+ ActiveContent = value;
}
}
}
@@ -340,11 +343,12 @@ namespace AvalonDock
{
List contents = FindContents();
- foreach (FloatingWindow flWindow in _floatingWindows)
- {
- foreach (DockableContent content in flWindow.HostedPane.Items)
- contents.Add(content);
- }
+ //FindContents already returns contents from FloatingWindows (sg #68987)
+ //foreach (FloatingWindow flWindow in _floatingWindows)
+ //{
+ // foreach (DockableContent content in flWindow.HostedPane.Items)
+ // contents.Add(content);
+ //}
foreach (DockableContent content in _hiddenContents)
contents.Add(content);
diff --git a/src/Libraries/AvalonDock/DocumentContent.cs b/src/Libraries/AvalonDock/DocumentContent.cs
index 5599335df6..0515782051 100644
--- a/src/Libraries/AvalonDock/DocumentContent.cs
+++ b/src/Libraries/AvalonDock/DocumentContent.cs
@@ -204,9 +204,20 @@ namespace AvalonDock
///
internal void InternalClose()
{
+
+
DocumentPane parentPane = ContainerPane as DocumentPane;
DockingManager manager = Manager;
+ if (manager != null)
+ {
+ if (manager.ActiveContent == this)
+ manager.ActiveContent = null;
+
+ if (manager.ActiveDocument == this)
+ manager.ActiveDocument = null;
+ }
+
if (parentPane != null)
{
parentPane.Items.Remove(this);
@@ -219,20 +230,15 @@ namespace AvalonDock
if (floatingParentPane != null)
{
floatingParentPane.RemoveContent(0);
- floatingParentPane.FloatingWindow.Close();
+ if (floatingParentPane.FloatingWindow != null &&
+ !floatingParentPane.FloatingWindow.IsClosing)
+ floatingParentPane.FloatingWindow.Close();
}
}
- if (manager != null)
- {
- if (manager.ActiveDocument == this)
- manager.ActiveDocument = null;
- if (manager.ActiveContent == this)
- manager.ActiveContent = null;
- }
}
///
@@ -277,9 +283,9 @@ namespace AvalonDock
oldManager.FireDocumentClosedEvent();
- if (Parent != null)
- throw new InvalidOperationException("Parent MUST bu null after Doc is closed");
-
+ //if (Parent != null)
+ // throw new InvalidOperationException();
+ Debug.Assert(Parent == null, "Parent MUST bu null after Doc is closed");
return true;
}
diff --git a/src/Libraries/AvalonDock/DocumentFloatingWindow.cs b/src/Libraries/AvalonDock/DocumentFloatingWindow.cs
index 6072d9e4fd..bc2faadef9 100644
--- a/src/Libraries/AvalonDock/DocumentFloatingWindow.cs
+++ b/src/Libraries/AvalonDock/DocumentFloatingWindow.cs
@@ -343,6 +343,11 @@ namespace AvalonDock
protected override void OnClosing(CancelEventArgs e)
{
+ base.OnClosing(e);
+
+ if (e.Cancel)
+ return;
+
if (this.HostedPane.Items.Count > 0)
{
DocumentContent docContent = this.HostedPane.Items[0] as DocumentContent;
@@ -352,7 +357,6 @@ namespace AvalonDock
this.HostedPane.Items.Remove(docContent);
}
- base.OnClosing(e);
}
}
}
diff --git a/src/Libraries/AvalonDock/DocumentPane.cs b/src/Libraries/AvalonDock/DocumentPane.cs
index c2d5e08fb1..68c4a11cf8 100644
--- a/src/Libraries/AvalonDock/DocumentPane.cs
+++ b/src/Libraries/AvalonDock/DocumentPane.cs
@@ -144,7 +144,7 @@ namespace AvalonDock
DockableContent dockableContent = contentToClose as DockableContent;
if (dockableContent != null)
- GetManager().Hide(dockableContent);
+ CloseOrHide(dockableContent);
else
{
DocumentContent documentContent = contentToClose as DocumentContent;
diff --git a/src/Libraries/AvalonDock/FloatingWindow.cs b/src/Libraries/AvalonDock/FloatingWindow.cs
index f4193e6e60..8071ffbdd8 100644
--- a/src/Libraries/AvalonDock/FloatingWindow.cs
+++ b/src/Libraries/AvalonDock/FloatingWindow.cs
@@ -141,6 +141,21 @@ namespace AvalonDock
}
#endregion
+ #region IsClosing Flag Management
+ internal bool IsClosing { get; private set; }
+
+ protected override void OnClosing(CancelEventArgs e)
+ {
+ IsClosing = true;
+ base.OnClosing(e);
+ }
+
+ protected override void OnClosed(EventArgs e)
+ {
+ IsClosing = false;
+ base.OnClosed(e);
+ }
+ #endregion
public abstract Pane ClonePane();
diff --git a/src/Libraries/AvalonDock/FlyoutDockablePane.cs b/src/Libraries/AvalonDock/FlyoutDockablePane.cs
index fd29864cf9..a09404b7ef 100644
--- a/src/Libraries/AvalonDock/FlyoutDockablePane.cs
+++ b/src/Libraries/AvalonDock/FlyoutDockablePane.cs
@@ -101,9 +101,11 @@ namespace AvalonDock
{
GetManager().ToggleAutoHide(_referencedPane);
}
- internal override void Close()
- {
- GetManager().Hide(SelectedItem as DockableContent);
- }
+ //internal override void Close()
+ //{
+ // DockingManager manager = GetManager();
+ // if (manager != null)
+ // Manager.Hide(SelectedItem as DockableContent);
+ //}
}
}
diff --git a/src/Libraries/AvalonDock/Pane.cs b/src/Libraries/AvalonDock/Pane.cs
index 3e451731f7..9f06461243 100644
--- a/src/Libraries/AvalonDock/Pane.cs
+++ b/src/Libraries/AvalonDock/Pane.cs
@@ -260,6 +260,21 @@ namespace AvalonDock
return LogicalTreeHelper.GetParent(this) as ResizingPanel;
}
+ ///
+ /// Closes or hides provided content depending on HideOnClose property
+ ///
+ internal virtual void CloseOrHide(DockableContent cntToCloseOrHide)
+ {
+ Debug.Assert(cntToCloseOrHide != null);
+
+ DockingManager manager = GetManager();
+ if (cntToCloseOrHide.HideOnClose && manager != null)
+ manager.Hide(cntToCloseOrHide);
+ else
+ RemoveContent(Items.IndexOf(cntToCloseOrHide));
+ }
+
+
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
diff --git a/src/Libraries/AvalonDock/Properties/AssemblyInfo.cs b/src/Libraries/AvalonDock/Properties/AssemblyInfo.cs
index a02fabaee4..83b153ec55 100644
--- a/src/Libraries/AvalonDock/Properties/AssemblyInfo.cs
+++ b/src/Libraries/AvalonDock/Properties/AssemblyInfo.cs
@@ -59,4 +59,4 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.2.2641")]
+[assembly: AssemblyVersion("1.2.2648")]