diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs index 7d2cec7fb8..84f0ed7668 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs @@ -78,7 +78,13 @@ namespace CSharpBinding CancellationToken = cancellationToken }, delegate (string fileName) { - FindReferencesInFile(args, searchScope, FileName.Create(fileName), callback, cancellationToken); + try { + FindReferencesInFile(args, searchScope, FileName.Create(fileName), callback, cancellationToken); + } catch (OperationCanceledException) { + throw; + } catch (Exception ex) { + throw new ApplicationException("Error searching in file '" + fileName + "'", ex); + } lock (progressLock) args.ProgressMonitor.Progress += workAmountInverse; }); diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs b/src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs index a343dbfaaa..3f5c478e4f 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs @@ -54,7 +54,11 @@ namespace SearchAndReplace return resultsTreeViewInstance; } - static IList toolbarItems; + public virtual void OnDeactivate() + { + } + + static IList toolbarItems; public virtual IList GetToolbarItems() { @@ -122,7 +126,8 @@ namespace SearchAndReplace collapseAll.Click += delegate { ExpandCollapseAll(false); }; toolbarItems.Add(collapseAll); } - return toolbarItems; + // Copy the list to avoid modifications to the static list + return new List(toolbarItems); } static void SetCheckedItem(MenuItem newTarget, ContextMenu menu) diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Gui/ObserverSearchResult.cs b/src/AddIns/Misc/SearchAndReplace/Project/Gui/ObserverSearchResult.cs index 88cb072d66..54dd9fbb0f 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Gui/ObserverSearchResult.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Gui/ObserverSearchResult.cs @@ -37,6 +37,13 @@ namespace SearchAndReplace return resultsTreeViewInstance; } + public override void OnDeactivate() + { + if (!finished) + StopButtonClick(null, null); + base.OnDeactivate(); + } + public override IList GetToolbarItems() { var items = base.GetToolbarItems(); diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchRootNode.cs b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchRootNode.cs index d11f2b6fba..470a002044 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchRootNode.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchRootNode.cs @@ -19,9 +19,19 @@ namespace SearchAndReplace ObservableCollection fileNodes; ObservableCollection projectNodes; ObservableCollection projectAndFileNodes; + bool wasCancelled; public string Title { get; private set; } - public bool WasCancelled { get; set; } + + public bool WasCancelled { + get { + return wasCancelled; + } + set { + wasCancelled = value; + InvalidateText(); + } + } public SearchRootNode(string title, IList results) { diff --git a/src/Main/Base/Project/Editor/Search/ISearchResult.cs b/src/Main/Base/Project/Editor/Search/ISearchResult.cs index 59640880f4..ec0b10a55f 100644 --- a/src/Main/Base/Project/Editor/Search/ISearchResult.cs +++ b/src/Main/Base/Project/Editor/Search/ISearchResult.cs @@ -26,6 +26,12 @@ namespace ICSharpCode.SharpDevelop.Editor.Search /// object GetControl(); + /// + /// Notifies the search that it is no longer active (another search result will be activated in the search results pad). + /// GetControl() will be called if the search result is activated again. + /// + void OnDeactivate(); + /// /// Gets the items for the toolbar that are visible only for this search result. /// diff --git a/src/Main/Base/Project/Editor/Search/SearchResultsPad.cs b/src/Main/Base/Project/Editor/Search/SearchResultsPad.cs index e255199f30..3b8252a534 100644 --- a/src/Main/Base/Project/Editor/Search/SearchResultsPad.cs +++ b/src/Main/Base/Project/Editor/Search/SearchResultsPad.cs @@ -66,6 +66,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Search } } + ISearchResult activeSearchResult; List lastSearches = new List(); public IEnumerable LastSearches { @@ -75,6 +76,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Search public void ClearLastSearchesList() { lastSearches.Clear(); + if (activeSearchResult != null) { + activeSearchResult.OnDeactivate(); + activeSearchResult = null; + } SD.WinForms.SetContent(contentPlaceholder, null); } @@ -95,6 +100,12 @@ namespace ICSharpCode.SharpDevelop.Editor.Search while (lastSearches.Count > 15) lastSearches.RemoveAt(15); + if (activeSearchResult != result) { + if (activeSearchResult != null) { + activeSearchResult.OnDeactivate(); + } + activeSearchResult = result; + } SD.WinForms.SetContent(contentPlaceholder, result.GetControl()); toolBar.Items.Clear(); @@ -206,6 +217,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Search { return null; } + + public void OnDeactivate() + { + } } } }