From 87de67e1ef310c597883727bb2826c555971fb9d Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 25 Feb 2010 12:30:14 +0000 Subject: [PATCH] Fixed updating of the IWorkbench.ActiveWorkbenchWindow property. This fixes the bug "System.NullReferenceException in AvalonDock.DocumentContent.Close()" git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5536 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Base/Project/Src/Gui/IWorkbenchLayout.cs | 1 + .../Gui/Workbench/Layouts/AvalonDockLayout.cs | 23 ++++++++----------- .../Project/Src/Gui/WorkbenchSingleton.cs | 3 +++ 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs b/src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs index 3779e037bc..a4433448e7 100644 --- a/src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs +++ b/src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs @@ -40,6 +40,7 @@ namespace ICSharpCode.SharpDevelop.Gui get; } + event EventHandler ActiveWorkbenchWindowChanged; event EventHandler ActiveContentChanged; /// diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs index 234c8cd9d8..86071c0cc0 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs @@ -63,27 +63,26 @@ namespace ICSharpCode.SharpDevelop.Gui void dockingManager_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == "ActiveContent") { - UpdateActiveWorkbenchWindow(); if (ActiveContentChanged != null) ActiveContentChanged(this, e); CommandManager.InvalidateRequerySuggested(); } else if (e.PropertyName == "ActiveDocument") { - UpdateActiveWorkbenchWindow(); + if (ActiveWorkbenchWindowChanged != null) + ActiveWorkbenchWindowChanged(this, e); CommandManager.InvalidateRequerySuggested(); } } - public event EventHandler ActiveContentChanged; - - public IWorkbenchWindow ActiveWorkbenchWindow { get; private set; } + public event EventHandler ActiveWorkbenchWindowChanged; - void UpdateActiveWorkbenchWindow() - { - IWorkbenchWindow window = dockingManager.ActiveDocument as IWorkbenchWindow; - if (window != null) - this.ActiveWorkbenchWindow = window; + public IWorkbenchWindow ActiveWorkbenchWindow { + get { + return dockingManager.ActiveDocument as IWorkbenchWindow; + } } + public event EventHandler ActiveContentChanged; + public object ActiveContent { get { object activeContent = dockingManager.ActiveContent; @@ -240,10 +239,6 @@ namespace ICSharpCode.SharpDevelop.Gui void window_Closed(object sender, EventArgs e) { workbenchWindows.Remove((IWorkbenchWindow)sender); - if (this.ActiveWorkbenchWindow == sender) { - this.ActiveWorkbenchWindow = null; - UpdateActiveWorkbenchWindow(); - } } public void LoadConfiguration() diff --git a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs index 721547a1ca..10648204fb 100644 --- a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs +++ b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs @@ -89,12 +89,15 @@ namespace ICSharpCode.SharpDevelop.Gui NavigationService.InitializeService(); workbench.ActiveContentChanged += delegate { + Debug.WriteLine("ActiveContentChanged to " + workbench.ActiveContent); LoggingService.Debug("ActiveContentChanged to " + workbench.ActiveContent); }; workbench.ActiveViewContentChanged += delegate { + Debug.WriteLine("ActiveViewContentChanged to " + workbench.ActiveViewContent); LoggingService.Debug("ActiveViewContentChanged to " + workbench.ActiveViewContent); }; workbench.ActiveWorkbenchWindowChanged += delegate { + Debug.WriteLine("ActiveWorkbenchWindowChanged to " + workbench.ActiveWorkbenchWindow); LoggingService.Debug("ActiveWorkbenchWindowChanged to " + workbench.ActiveWorkbenchWindow); }; }