From 00f4babb4e44c1f3480f6ed91ad7c35cb077d7b6 Mon Sep 17 00:00:00 2001 From: Expro Date: Thu, 30 Sep 2010 02:05:43 +0200 Subject: [PATCH 1/2] fixed SD-1150 --- .../Project/Src/Commands/FileMenuCommands.cs | 3 +- src/Main/Base/Project/Src/Gui/IWorkbench.cs | 8 ++++ .../Project/Src/Gui/Workbench/WpfWorkbench.cs | 38 +++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/Main/Base/Project/Src/Commands/FileMenuCommands.cs b/src/Main/Base/Project/Src/Commands/FileMenuCommands.cs index a7b07b2a690..f5e0bb27d30 100644 --- a/src/Main/Base/Project/Src/Commands/FileMenuCommands.cs +++ b/src/Main/Base/Project/Src/Commands/FileMenuCommands.cs @@ -40,8 +40,7 @@ public class CloseSolution : AbstractMenuCommand public override void Run() { ProjectService.SaveSolutionPreferences(); - WorkbenchSingleton.Workbench.CloseAllViews(); - if (WorkbenchSingleton.Workbench.WorkbenchWindowCollection.Count == 0) { + if (WorkbenchSingleton.Workbench.CloseAllSolutionViews()) { ProjectService.CloseSolution(); } } diff --git a/src/Main/Base/Project/Src/Gui/IWorkbench.cs b/src/Main/Base/Project/Src/Gui/IWorkbench.cs index 5f4afa32e3e..3e44abe3804 100644 --- a/src/Main/Base/Project/Src/Gui/IWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/IWorkbench.cs @@ -163,6 +163,14 @@ bool IsActiveWindow { /// void CloseAllViews(); + /// + /// Closes all views related to current solution. + /// + /// + /// True if all views were closed properly, false if closing was aborted. + /// + bool CloseAllSolutionViews(); + /// /// Is called, when a workbench view was opened /// diff --git a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs index a5431e6c7d3..b335d5512c1 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs @@ -17,6 +17,7 @@ using System.Windows.Navigation; using ICSharpCode.Core; using ICSharpCode.Core.Presentation; +using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.SharpDevelop.Gui { @@ -433,6 +434,43 @@ public void CloseAllViews() } } + public bool CloseAllSolutionViews() + { + bool isSolutionWindow; + bool result = true; + + WorkbenchSingleton.AssertMainThread(); + try + { + closeAll = true; + foreach (IWorkbenchWindow window in this.WorkbenchWindowCollection.ToArray()) + { + isSolutionWindow = false; + foreach (IViewContent content in window.ViewContents) + { + foreach (OpenedFile file in content.Files) + { + if (ProjectService.OpenSolution.FindProjectContainingFile(file.FileName) != null) + { + isSolutionWindow = true; + break; + } + } + } + + if (isSolutionWindow) + result = window.CloseWindow(false) && result; + } + } + finally + { + closeAll = false; + OnActiveWindowChanged(this, EventArgs.Empty); + } + + return result; + } + #region ViewContent Memento Handling string viewContentMementosFileName; From 9cab7cbfdf2a1fdf22fab4d089f61252137726e9 Mon Sep 17 00:00:00 2001 From: Expro Date: Thu, 30 Sep 2010 13:00:17 +0200 Subject: [PATCH 2/2] little performance update --- src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs index b335d5512c1..724deb80bab 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs @@ -456,6 +456,9 @@ public bool CloseAllSolutionViews() break; } } + + if (isSolutionWindow) + break; } if (isSolutionWindow)