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")]