diff --git a/src/Main/Base/Project/Src/Commands/FileCommands.cs b/src/Main/Base/Project/Src/Commands/FileCommands.cs
index b2a975b75d..14c5ce50aa 100644
--- a/src/Main/Base/Project/Src/Commands/FileCommands.cs
+++ b/src/Main/Base/Project/Src/Commands/FileCommands.cs
@@ -55,7 +55,12 @@ namespace ICSharpCode.SharpDevelop.Commands
{
public override void Run()
{
- Save(WorkbenchSingleton.Workbench.ActiveViewContent);
+ Save(WorkbenchSingleton.Workbench.ActiveWorkbenchWindow);
+ }
+
+ internal static void Save(IWorkbenchWindow window)
+ {
+ window.ViewContents.Foreach(Save);
}
internal static void Save(IViewContent content)
@@ -121,7 +126,12 @@ namespace ICSharpCode.SharpDevelop.Commands
{
public override void Run()
{
- Save(WorkbenchSingleton.Workbench.ActiveViewContent);
+ Save(WorkbenchSingleton.Workbench.ActiveWorkbenchWindow);
+ }
+
+ internal static void Save(IWorkbenchWindow window)
+ {
+ window.ViewContents.Foreach(Save);
}
internal static void Save(IViewContent content)
diff --git a/src/Main/Base/Project/Src/Commands/FileTabStripCommands.cs b/src/Main/Base/Project/Src/Commands/FileTabStripCommands.cs
index 2d93942114..3795ba2451 100644
--- a/src/Main/Base/Project/Src/Commands/FileTabStripCommands.cs
+++ b/src/Main/Base/Project/Src/Commands/FileTabStripCommands.cs
@@ -48,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Commands.TabStrip
{
IWorkbenchWindow window = Owner as IWorkbenchWindow;
if (window != null) {
- SaveFile.Save(window.ActiveViewContent);
+ SaveFile.Save(window);
}
}
}
@@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Commands.TabStrip
IWorkbenchWindow window = Owner as IWorkbenchWindow;
if (window != null) {
- SaveFileAs.Save(window.ActiveViewContent);
+ SaveFileAs.Save(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 0cb1001ea2..ad125c962b 100644
--- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs
+++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs
@@ -11,6 +11,7 @@ using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
+using System.Linq;
using System.Windows.Forms;
using ICSharpCode.Core;
@@ -194,6 +195,14 @@ namespace ICSharpCode.SharpDevelop.Gui
get { return viewContents; }
}
+ ///
+ /// Gets whether any contained view content has changed
+ /// since the last save/load operation.
+ ///
+ public bool IsDirty {
+ get { return this.ViewContents.Any(vc => vc.IsDirty); }
+ }
+
public void SwitchView(int viewNumber)
{
if (viewTabControl != null) {
@@ -271,9 +280,7 @@ namespace ICSharpCode.SharpDevelop.Gui
void OnIsDirtyChanged(object sender, EventArgs e)
{
- if (sender == ActiveViewContent) {
- UpdateTitle();
- }
+ UpdateTitle();
}
void UpdateTitle()
@@ -284,7 +291,7 @@ namespace ICSharpCode.SharpDevelop.Gui
string newTitle = content.TitleName;
- if (content.IsDirty) {
+ if (this.IsDirty) {
newTitle += "*";
} else if (content.IsReadOnly) {
newTitle += "+";
@@ -322,7 +329,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public bool CloseWindow(bool force)
{
- if (!force && ActiveViewContent != null && ActiveViewContent.IsDirty) {
+ if (!force && this.IsDirty) {
DialogResult dr = MessageBox.Show(ResourceService.GetString("MainWindow.SaveChangesMessage"),
ResourceService.GetString("MainWindow.SaveChangesMessageHeader") + " " + Title + " ?",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,
@@ -330,16 +337,18 @@ namespace ICSharpCode.SharpDevelop.Gui
RightToLeftConverter.IsRightToLeft ? MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign : 0);
switch (dr) {
case DialogResult.Yes:
- if (ActiveViewContent.PrimaryFile != null) {
- while (true) {
- ActiveViewContent.Files.Foreach(ICSharpCode.SharpDevelop.Commands.SaveFile.Save);
- if (ActiveViewContent.IsDirty) {
-
- if (MessageService.AskQuestion("${res:MainWindow.DiscardChangesMessage}")) {
+ foreach (IViewContent vc in this.ViewContents) {
+ if (!vc.IsDirty) continue;
+ if (vc.PrimaryFile != null) {
+ while (true) {
+ vc.Files.Foreach(ICSharpCode.SharpDevelop.Commands.SaveFile.Save);
+ if (vc.IsDirty) {
+ if (MessageService.AskQuestion("${res:MainWindow.DiscardChangesMessage}")) {
+ break;
+ }
+ } else {
break;
}
- } else {
- break;
}
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs
index 1ebdab4538..7116fb1535 100644
--- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs
+++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs
@@ -9,6 +9,7 @@ using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
+using System.Linq;
using System.Windows.Forms;
using ICSharpCode.Core;
@@ -393,6 +394,14 @@ namespace ICSharpCode.SharpDevelop.Gui
get { return viewContents; }
}
+ ///
+ /// Gets whether any contained view content has changed
+ /// since the last save/load operation.
+ ///
+ public bool IsDirty {
+ get { return this.ViewContents.Any(vc => vc.IsDirty); }
+ }
+
public void SwitchView(int viewNumber)
{
if (viewTabControl != null) {
@@ -410,7 +419,7 @@ namespace ICSharpCode.SharpDevelop.Gui
viewContents = new ViewContentCollection(this);
OnTitleNameChanged(this, EventArgs.Empty);
- // this.TabPageContextMenuStrip = MenuService.CreateContextMenu(this, contextMenuPath);
+ // this.TabPageContextMenuStrip = MenuService.CreateContextMenu(this, contextMenuPath);
}
protected override void Dispose(bool disposing)
@@ -418,10 +427,10 @@ namespace ICSharpCode.SharpDevelop.Gui
if (disposing) {
// DetachContent must be called before the controls are disposed
this.ViewContents.Clear();
- // if (this.TabPageContextMenu != null) {
- // this.TabPageContextMenu.Dispose();
- // this.TabPageContextMenu = null;
- // }
+ // if (this.TabPageContextMenu != null) {
+ // this.TabPageContextMenu.Dispose();
+ // this.TabPageContextMenu = null;
+ // }
}
base.Dispose(disposing);
}
@@ -467,20 +476,18 @@ namespace ICSharpCode.SharpDevelop.Gui
void OnIsDirtyChanged(object sender, EventArgs e)
{
- if (sender == ActiveViewContent) {
- UpdateTitle();
- }
+ UpdateTitle();
}
void UpdateTitle()
{
IViewContent content = ActiveViewContent;
if (content != null) {
- // base.ToolTipText = content.PrimaryFileName;
+ // base.ToolTipText = content.PrimaryFileName;
string newTitle = content.TitleName;
- if (content.IsDirty) {
+ if (this.IsDirty) {
newTitle += "*";
} else if (content.IsReadOnly) {
newTitle += "+";
@@ -518,7 +525,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public bool CloseWindow(bool force)
{
- if (!force && ActiveViewContent != null && ActiveViewContent.IsDirty) {
+ if (!force && this.IsDirty) {
DialogResult dr = MessageBox.Show(ResourceService.GetString("MainWindow.SaveChangesMessage"),
ResourceService.GetString("MainWindow.SaveChangesMessageHeader") + " " + Title + " ?",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,
@@ -526,16 +533,18 @@ namespace ICSharpCode.SharpDevelop.Gui
RightToLeftConverter.IsRightToLeft ? MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign : 0);
switch (dr) {
case DialogResult.Yes:
- if (ActiveViewContent.PrimaryFile != null) {
- while (true) {
- ActiveViewContent.Files.Foreach(ICSharpCode.SharpDevelop.Commands.SaveFile.Save);
- if (ActiveViewContent.IsDirty) {
-
- if (MessageService.AskQuestion("${res:MainWindow.DiscardChangesMessage}")) {
+ foreach (IViewContent vc in this.ViewContents) {
+ if (!vc.IsDirty) continue;
+ if (vc.PrimaryFile != null) {
+ while (true) {
+ vc.Files.Foreach(ICSharpCode.SharpDevelop.Commands.SaveFile.Save);
+ if (vc.IsDirty) {
+ if (MessageService.AskQuestion("${res:MainWindow.DiscardChangesMessage}")) {
+ break;
+ }
+ } else {
break;
}
- } else {
- break;
}
}
}
@@ -546,7 +555,7 @@ namespace ICSharpCode.SharpDevelop.Gui
return false;
}
}
-
+
OnCloseEvent(null);
Dispose();
return true;