Might fix 7764: UI Dead Lock - IDE frozen
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 ed6626a..a12b68a 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
@@ -320,36 +320,24 @@
Assert.isNotNull(viewer);
fListeners.remove(viewer);
}
- /**
- * Received a resource event. Since the delta could be created in a
- * separate thread this methods post the event into the viewer's
- * display thread.
- */
- public final void handleResourceChanged(final IResourceChangeEvent event) {
+
+ private final void handleSearchMarkersChanged(final IResourceChangeEvent event, IMarkerDelta[] markerDeltas) {
if (fIsNewSearch) {
fIsNewSearch= false;
handleNewSearchResult();
return;
}
+ Iterator iter= fListeners.iterator();
+ while (iter.hasNext())
+ ((SearchResultViewer)iter.next()).getControl().setRedraw(false);
+
+ for (int i=0; i < markerDeltas.length; i++)
+ handleSearchMarkerChanged(markerDeltas[i]);
- IMarkerDelta[] markerDeltas= event.findMarkerDeltas(SearchUI.SEARCH_MARKER, true);
- if (markerDeltas == null)
- return;
+ iter= fListeners.iterator();
+ while (iter.hasNext())
+ ((SearchResultViewer)iter.next()).getControl().setRedraw(true);
- int deltasLength= markerDeltas.length;
-
- if (deltasLength > 0) {
- Iterator iter= fListeners.iterator();
- while (iter.hasNext())
- ((SearchResultViewer)iter.next()).getControl().setRedraw(false);
-
- for (int i=0; i < deltasLength; i++)
- handleSearchMarkerChanged(markerDeltas[i]);
-
- iter= fListeners.iterator();
- while (iter.hasNext())
- ((SearchResultViewer)iter.next()).getControl().setRedraw(true);
- }
}
private void handleSearchMarkerChanged(IMarkerDelta markerDelta) {
@@ -455,12 +443,20 @@
* display thread.
*/
public final void resourceChanged(final IResourceChangeEvent event) {
+ if (event == null)
+ return;
+
+ 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;
+
Runnable runnable= new Runnable() {
public void run() {
- handleResourceChanged(event);
+ handleSearchMarkersChanged(event, markerDeltas);
// update title and actions
Iterator iter= fListeners.iterator();
while (iter.hasNext()) {