diff options
author | Thomas Maeder | 2003-12-08 11:03:20 +0000 |
---|---|---|
committer | Thomas Maeder | 2003-12-08 11:03:20 +0000 |
commit | 1d010e922b93f691133903215b7f19fa59877513 (patch) | |
tree | e6c8a4a93d3062e556cfb4aa3820b60f315609e2 /org.eclipse.search | |
parent | ebff2ba5104a47ddd6c2036939343fc1410174a3 (diff) | |
download | eclipse.platform.text-1d010e922b93f691133903215b7f19fa59877513.tar.gz eclipse.platform.text-1d010e922b93f691133903215b7f19fa59877513.tar.xz eclipse.platform.text-1d010e922b93f691133903215b7f19fa59877513.zip |
fix for bug 47156
Diffstat (limited to 'org.eclipse.search')
3 files changed, 38 insertions, 68 deletions
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchManager.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchManager.java index 139d5cfde54..cb7ce5df244 100644 --- a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchManager.java +++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchManager.java @@ -57,7 +57,6 @@ public class SearchManager implements IResourceChangeListener { private HashSet fListeners= new HashSet(); private LinkedList fPreviousSearches= new LinkedList(); - private boolean fIsNewSearch= false; private boolean fIsRemoveAll= false; public static SearchManager getDefault() { @@ -287,7 +286,10 @@ public class SearchManager implements IResourceChangeListener { } } - void addNewSearch(Search newSearch) { + void addNewSearch(final Search newSearch) { + + SearchPlugin.getWorkspace().removeResourceChangeListener(this); + // Clear the viewers Iterator iter= fListeners.iterator(); Display display= getDisplay(); @@ -299,9 +301,7 @@ public class SearchManager implements IResourceChangeListener { public void run() { if (fCurrentSearch != null && viewer == visibleViewer) fCurrentSearch.setSelection(viewer.getSelection()); - viewer.handleRemoveAll(); - viewer.clearTitle(); - + setNewSearch(viewer, newSearch); } }); } @@ -324,22 +324,24 @@ public class SearchManager implements IResourceChangeListener { } } - void setCurrentResults(ArrayList results) { + void searchFinished(ArrayList results) { Assert.isNotNull(results); getCurrentSearch().setResults(results); - if (results.isEmpty()) { - // directly update because there will be no delta - Display display= getDisplay(); - if (display == null || display.isDisposed()) - return; - display.syncExec(new Runnable() { - public void run() { - handleNewSearchResult(); - } - }); + + Display display= getDisplay(); + if (display == null || display.isDisposed()) + return; + + if (Thread.currentThread() == display.getThread()) + handleNewSearchResult(); + else { + display.syncExec(new Runnable() { + public void run() { + handleNewSearchResult(); + } + }); } - else - fIsNewSearch= true; + SearchPlugin.getWorkspace().addResourceChangeListener(this); } //--- Change event handling ------------------------------------------------- @@ -353,12 +355,7 @@ public class SearchManager implements IResourceChangeListener { fListeners.remove(viewer); } - private final void handleSearchMarkersChanged(final IResourceChangeEvent event, IMarkerDelta[] markerDeltas) { - if (fIsNewSearch) { - fIsNewSearch= false; - handleNewSearchResult(); - return; - } + private final void handleSearchMarkersChanged(IMarkerDelta[] markerDeltas) { if (fIsRemoveAll) { handleRemoveAll(); fIsRemoveAll= false; @@ -369,8 +366,9 @@ public class SearchManager implements IResourceChangeListener { while (iter.hasNext()) ((SearchResultViewer)iter.next()).getControl().setRedraw(false); - for (int i=0; i < markerDeltas.length; i++) + for (int i=0; i < markerDeltas.length; i++) { handleSearchMarkerChanged(markerDeltas[i]); + } iter= fListeners.iterator(); while (iter.hasNext()) @@ -380,9 +378,8 @@ public class SearchManager implements IResourceChangeListener { private void handleSearchMarkerChanged(IMarkerDelta markerDelta) { int kind= markerDelta.getKind(); - if ((kind & IResourceDelta.ADDED) != 0) - handleAddMatch(markerDelta.getMarker()); - else if (((kind & IResourceDelta.REMOVED) != 0)) + // don't listen for adds will be done by ISearchResultView.addMatch(...) + if (((kind & IResourceDelta.REMOVED) != 0)) handleRemoveMatch(markerDelta.getMarker()); else if ((kind & IResourceDelta.CHANGED) != 0) handleUpdateMatch(markerDelta.getMarker()); @@ -395,40 +392,24 @@ public class SearchManager implements IResourceChangeListener { while (iter.hasNext()) ((SearchResultViewer)iter.next()).handleRemoveAll(); } - - private void handleAddMatch(IMarker marker) { - Object groupByKey= getCurrentSearch().getGroupByKeyComputer().computeGroupByKey(marker); - SearchResultViewEntry entry= findEntry(groupByKey); - if (entry == null) { - entry= new SearchResultViewEntry(groupByKey, marker.getResource()); - getCurrentResults().add(entry); - entry.add(marker); - Iterator iter= fListeners.iterator(); - while (iter.hasNext()) - ((SearchResultViewer)iter.next()).handleAddMatch(entry); - } - else { - entry.add(marker); - Iterator iter= fListeners.iterator(); - while (iter.hasNext()) - ((SearchResultViewer)iter.next()).handleUpdateMatch(entry, false); - } - } private void handleNewSearchResult() { Iterator iter= fListeners.iterator(); - final Search search= getCurrentSearch(); while (iter.hasNext()) { SearchResultViewer viewer= (SearchResultViewer)iter.next(); - viewer.setPageId(search.getPageId()); - viewer.setGotoMarkerAction(search.getGotoMarkerAction()); - viewer.setContextMenuTarget(search.getContextMenuContributor()); - viewer.setActionGroupFactory(null); viewer.setInput(getCurrentResults()); - viewer.setActionGroupFactory(search.getActionGroupFactory()); } } + private void setNewSearch(SearchResultViewer viewer, Search search) { + viewer.setInput(null); + viewer.clearTitle(); + viewer.setPageId(search.getPageId()); + viewer.setGotoMarkerAction(search.getGotoMarkerAction()); + viewer.setContextMenuTarget(search.getContextMenuContributor()); + viewer.setActionGroupFactory(search.getActionGroupFactory()); + } + private void handleRemoveMatch(IMarker marker) { SearchResultViewEntry entry= findEntry(marker); if (entry != null) { @@ -466,17 +447,6 @@ public class SearchManager implements IResourceChangeListener { return null; } - private SearchResultViewEntry findEntry(Object key) { - if (key == null) - return null; - Iterator entries= getCurrentResults().iterator(); - while (entries.hasNext()) { - SearchResultViewEntry entry= (SearchResultViewEntry)entries.next(); - if (key.equals(entry.getGroupByKey())) - return entry; - } - return null; - } /** * Received a resource event. Since the delta could be created in a * separate thread this methods post the event into the viewer's @@ -489,7 +459,7 @@ public class SearchManager implements IResourceChangeListener { final IMarkerDelta[] markerDeltas= event.findMarkerDeltas(SearchUI.SEARCH_MARKER, true); if (markerDeltas == null || markerDeltas.length < 1) return; - + Display display= getDisplay(); if (display == null || display.isDisposed()) return; @@ -497,7 +467,7 @@ public class SearchManager implements IResourceChangeListener { Runnable runnable= new Runnable() { public void run() { if (getCurrentSearch() != null) { - handleSearchMarkersChanged(event, markerDeltas); + handleSearchMarkersChanged(markerDeltas); // update title and actions Iterator iter= fListeners.iterator(); while (iter.hasNext()) { diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchResultView.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchResultView.java index a7336341fc9..8fc92a41475 100644 --- a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchResultView.java +++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchResultView.java @@ -319,7 +319,7 @@ public class SearchResultView extends ViewPart implements ISearchResultView { * Implements method from ISearchResultView */ public void searchFinished() { - SearchManager.getDefault().setCurrentResults(new ArrayList(fResponse.values())); + SearchManager.getDefault().searchFinished(new ArrayList(fResponse.values())); fResponse= null; } } diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchResultViewer.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchResultViewer.java index 8112f2f88c8..5069cd6c898 100644 --- a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchResultViewer.java +++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchResultViewer.java @@ -580,7 +580,7 @@ public class SearchResultViewer extends TableViewer { */ protected void clearTitle() { String title= SearchMessages.getString("SearchResultView.title"); //$NON-NLS-1$ - if (title == null || !title.equals(fOuterPart.getTitle())) + if (!title.equals(fOuterPart.getTitle())) fOuterPart.setTitle(title); } |