diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs index 9d05518bf5..00252e1ae0 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs @@ -149,7 +149,6 @@ namespace ICSharpCode.FormsDesigner serviceContainer.AddService(typeof(System.ComponentModel.Design.IEventBindingService), eventBindingService); designerResourceService.Host = Host; - serviceContainer.AddService(typeof(IDesignerHost), Host); DesignerLoader designerLoader = loaderProvider.CreateLoader(generator); designSurface.BeginLoad(designerLoader); @@ -309,7 +308,10 @@ namespace ICSharpCode.FormsDesigner public override void Deselected() { - LoggingService.Info("Deselected form designer, unloading..."); + // can happen if form designer is disposed and then deselected + if (!IsFormsDesignerVisible) + return; + LoggingService.Info("Deselected form designer, unloading..." + viewContent.TitleName); PropertyPad.PropertyValueChanged -= PropertyValueChanged; propertyContainer.Clear(); IsFormsDesignerVisible = false; diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs index a9a888df01..f19677f03f 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs @@ -34,7 +34,7 @@ namespace ICSharpCode.TextEditor /// This class paints the textarea. /// [ToolboxItem(false)] - public class TextArea : UserControl + public class TextArea : Control { public static bool HiddenMouseCursor = false; @@ -585,10 +585,11 @@ namespace ICSharpCode.TextEditor } } - protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) + protected override void OnKeyPress(KeyPressEventArgs e) { base.OnKeyPress(e); SimulateKeyPress(e.KeyChar); + e.Handled = true; } /// diff --git a/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs b/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs index 53450711a9..e9b6234e1e 100644 --- a/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs +++ b/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs @@ -46,14 +46,13 @@ namespace ICSharpCode.SharpDevelop.Gui { } - public virtual void RedrawContent() { } public virtual void Dispose() { - //workbenchWindow = null; + workbenchWindow = null; } protected virtual void OnWorkbenchWindowChanged(EventArgs e) diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs index 5fe5c97db0..3ce858f9bb 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs @@ -83,7 +83,8 @@ namespace ICSharpCode.SharpDevelop.Project if (WorkbenchSingleton.Workbench.ActiveContent == this) { projectBrowserPanel.ProjectBrowserControl.PadActivated(); } else { - if (WorkbenchSingleton.Workbench.ActiveWorkbenchWindow == null) { + IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow; + if (window == null) { return; } string fileName = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ViewContent.FileName; diff --git a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs index 38ffb56667..aeb1161bfc 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs @@ -75,20 +75,18 @@ namespace ICSharpCode.SharpDevelop.Gui } } - EventHandler windowChangeEventHandler; - public IWorkbenchLayout WorkbenchLayout { get { return layout; } set { if (layout != null) { - layout.ActiveWorkbenchWindowChanged -= windowChangeEventHandler; + layout.ActiveWorkbenchWindowChanged -= OnActiveWindowChanged; layout.Detach(); } value.Attach(this); layout = value; - layout.ActiveWorkbenchWindowChanged += windowChangeEventHandler; + layout.ActiveWorkbenchWindowChanged += OnActiveWindowChanged; } } @@ -131,8 +129,6 @@ namespace ICSharpCode.SharpDevelop.Gui Text = ResourceService.GetString("MainWindow.DialogName"); Icon = ResourceService.GetIcon("Icons.SharpDevelopIcon"); - windowChangeEventHandler = new EventHandler(OnActiveWindowChanged); - StartPosition = FormStartPosition.Manual; AllowDrop = true; } @@ -197,7 +193,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } finally { closeAll = false; - OnActiveWindowChanged(null, null); + OnActiveWindowChanged(this, EventArgs.Empty); } } diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs index b2b73baf78..3ed9350ce0 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs @@ -587,13 +587,22 @@ namespace ICSharpCode.SharpDevelop.Gui IWorkbenchWindow oldSelectedWindow = null; public virtual void OnActiveWorkbenchWindowChanged(EventArgs e) { - if (ActiveWorkbenchWindowChanged != null) { - ActiveWorkbenchWindowChanged(this, e); + IWorkbenchWindow newWindow = this.ActiveWorkbenchwindow; + if (newWindow == null || newWindow.ViewContent != null) { + if (ActiveWorkbenchWindowChanged != null) { + ActiveWorkbenchWindowChanged(this, e); + } + //if (newWindow == null) + // LoggingService.Debug("window change to null"); + //else + // LoggingService.Debug("window change to " + newWindow); + } else { + //LoggingService.Debug("ignore window change to disposed window"); } if (oldSelectedWindow != null) { oldSelectedWindow.OnWindowDeselected(EventArgs.Empty); } - oldSelectedWindow = ActiveWorkbenchwindow; + oldSelectedWindow = newWindow; if (oldSelectedWindow != null && oldSelectedWindow.ActiveViewContent != null && oldSelectedWindow.ActiveViewContent.Control != null) { oldSelectedWindow.OnWindowSelected(EventArgs.Empty); oldSelectedWindow.ActiveViewContent.SwitchedTo(); 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 0791cf64d2..24df8ce37c 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs @@ -97,8 +97,6 @@ namespace ICSharpCode.SharpDevelop.Gui protected override void Dispose(bool disposing) { - base.Dispose(disposing); - if (disposing) { if (content != null) DetachContent(); @@ -107,6 +105,8 @@ namespace ICSharpCode.SharpDevelop.Gui this.TabPageContextMenu = null; } } + // DetachContent must be called before the controls are disposed + base.Dispose(disposing); } public SdiWorkspaceWindow(IViewContent content) diff --git a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs index cf57bddbcf..846cc69f13 100644 --- a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs +++ b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs @@ -162,7 +162,10 @@ namespace ICSharpCode.SharpDevelop.Project if (viewContent == null && activeContent is ISecondaryViewContent) { // required if one creates a new winforms app and then immediately switches to design mode // without focussing the text editor - viewContent = ((ISecondaryViewContent)activeContent).WorkbenchWindow.ViewContent; + IWorkbenchWindow window = ((ISecondaryViewContent)activeContent).WorkbenchWindow; + if (window == null) // workbench window is being disposed + return; + viewContent = window.ViewContent; } if (OpenSolution == null || viewContent == null) { return; diff --git a/src/Main/StartUp/Project/Dialogs/SplashScreen.cs b/src/Main/StartUp/Project/Dialogs/SplashScreen.cs index aabe0cf2ea..ad0d5df408 100644 --- a/src/Main/StartUp/Project/Dialogs/SplashScreen.cs +++ b/src/Main/StartUp/Project/Dialogs/SplashScreen.cs @@ -7,6 +7,7 @@ using System; using System.Collections; +using System.IO; using System.Windows.Forms; using System.Drawing; using System.Reflection; @@ -16,7 +17,7 @@ namespace ICSharpCode.SharpDevelop { public class SplashScreenForm : Form { - public const string VersionText = "Corsavy alpha rev. " + RevisionClass.Revision; + public const string VersionText = "Corsavy Beta 1, rev. " + RevisionClass.Revision; static SplashScreenForm splashScreen = new SplashScreenForm(); static ArrayList requestedFileList = new ArrayList(); @@ -37,17 +38,19 @@ namespace ICSharpCode.SharpDevelop FormBorderStyle = FormBorderStyle.None; StartPosition = FormStartPosition.CenterScreen; ShowInTaskbar = false; - bitmap = new Bitmap(Assembly.GetEntryAssembly().GetManifestResourceStream("Resources.SplashScreen.jpg")); - Size = bitmap.Size; #if DEBUG string versionText = VersionText + " (debug)"; #else string versionText = VersionText; #endif - using (Font font = new Font("Vrinda", 4)) { + using (Stream stream = Assembly.GetEntryAssembly().GetManifestResourceStream("Resources.SplashScreen.jpg")) { + bitmap = new Bitmap(stream); + } + this.ClientSize = bitmap.Size; + using (Font font = new Font("Sans Serif", 4)) { using (Graphics g = Graphics.FromImage(bitmap)) { g.DrawRectangle(Pens.Black, 0, 0, bitmap.Size.Width - 1, bitmap.Size.Height - 1); - g.DrawString(versionText, font, Brushes.Black, 116, 142); + g.DrawString(versionText, font, Brushes.Black, 106, 142); } } BackgroundImage = bitmap;