From 3196f5838b26c31865bdba58dee799f499e39e4c Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 25 Feb 2010 12:30:51 +0000 Subject: [PATCH] Fixed ProjectBrowserPad selecting the currently opened file. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5537 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Pads/ProjectBrowser/ProjectBrowserPad.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) 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 372ae73abe..f4bf5fb795 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs @@ -145,25 +145,36 @@ namespace ICSharpCode.SharpDevelop.Project projectBrowserPanel.Clear(); } - string lastFileName; + bool activeContentChangedEnqueued; void ActiveContentChanged(object sender, EventArgs e) { + // this event may occur several times quickly after another (e.g. when opening or closing multiple files) + // do the potentially expensive selection of the item in the tree view only once after the last change + if (!activeContentChangedEnqueued) { + activeContentChangedEnqueued = true; + WorkbenchSingleton.SafeThreadAsyncCall(ActiveContentChangedInvoked); + } + } + + void ActiveContentChangedInvoked() + { + activeContentChangedEnqueued = false; if (WorkbenchSingleton.Workbench.ActiveContent == this) { projectBrowserPanel.ProjectBrowserControl.PadActivated(); } else { - IViewContent content = WorkbenchSingleton.Workbench.ActiveViewContent; + // we don't use ActiveViewContent here as this is the ActiveContent change event handler + IViewContent content = WorkbenchSingleton.Workbench.ActiveContent as IViewContent; if (content == null) return; string fileName = content.PrimaryFileName; - if (fileName == null || lastFileName == fileName) { + if (fileName == null) { return; } if (!FileUtility.IsValidPath(fileName)) { return; } - lastFileName = fileName; projectBrowserPanel.SelectFile(fileName); } }