1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-14 20:45:22 +02:00

[241722] Add safeguards for selecting newly created files with deferred queries

This commit is contained in:
Martin Oberhuber 2008-07-24 14:00:56 +00:00
parent 6b7f927b68
commit 076bb8c5c8

View file

@ -65,7 +65,6 @@
package org.eclipse.rse.internal.ui.view; package org.eclipse.rse.internal.ui.view;
import java.io.FileReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
@ -103,7 +102,6 @@ import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreePathContentProvider; import org.eclipse.jface.viewers.ITreePathContentProvider;
import org.eclipse.jface.viewers.ITreeSelection; import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.ITreeViewerListener; import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeExpansionEvent; import org.eclipse.jface.viewers.TreeExpansionEvent;
@ -2428,7 +2426,7 @@ public class SystemView extends SafeTreeViewer
// ------------------------------------ // ------------------------------------
private class CheckPending implements Runnable private static class CheckPending implements Runnable
{ {
private boolean _notReady = true; private boolean _notReady = true;
private TreeItem _item; private TreeItem _item;
@ -2440,8 +2438,16 @@ public class SystemView extends SafeTreeViewer
public void run() public void run()
{ {
if (_item.isDisposed()) {
// Parent was deleted in the meantime
_notReady = false;
} else {
Item[] items = _item.getItems(); Item[] items = _item.getItems();
_notReady = (items.length <= 0 || items[0].getText().equals(ProgressMessages.PendingUpdateAdapter_PendingLabel)); // We know that a child must appear eventualy, because the
// REMOTE_RESOURCE_CREATED event is only sent in case of
// successful creation of the element.
_notReady = (items.length <= 0 || ProgressMessages.PendingUpdateAdapter_PendingLabel.equals(items[0].getText()));
}
} }
public boolean isNotReady() public boolean isNotReady()
@ -2553,6 +2559,7 @@ public class SystemView extends SafeTreeViewer
final String name = remoteResourceName; final String name = remoteResourceName;
final ISubSystem subsys = ss; final ISubSystem subsys = ss;
final TreeItem item = selectedItem; final TreeItem item = selectedItem;
final IWorkbench wb = RSEUIPlugin.getDefault().getWorkbench();
// do the selection after the query triggered via refreshRemoteObject() completes // do the selection after the query triggered via refreshRemoteObject() completes
Job job = new Job("select resource") //$NON-NLS-1$ Job job = new Job("select resource") //$NON-NLS-1$
@ -2560,7 +2567,7 @@ public class SystemView extends SafeTreeViewer
public IStatus run(IProgressMonitor monitor) { public IStatus run(IProgressMonitor monitor) {
boolean notReady = true; boolean notReady = true;
while (notReady) while (notReady && !wb.isClosing())
{ {
try { try {
Thread.sleep(100); Thread.sleep(100);
@ -2568,19 +2575,21 @@ public class SystemView extends SafeTreeViewer
catch (InterruptedException e){} catch (InterruptedException e){}
CheckPending checkRunnable = new CheckPending(item); CheckPending checkRunnable = new CheckPending(item);
Display.getDefault().syncExec(checkRunnable); wb.getDisplay().syncExec(checkRunnable);
notReady = checkRunnable.isNotReady(); notReady = checkRunnable.isNotReady();
} }
Display.getDefault().asyncExec(new Runnable() wb.getDisplay().asyncExec(new Runnable()
{ {
public void run() public void run()
{ {
if (!wb.isClosing() && !item.isDisposed()) {
if (names != null) if (names != null)
selectRemoteObjects(names, subsys, item); selectRemoteObjects(names, subsys, item);
else else
selectRemoteObjects(name, subsys, item); selectRemoteObjects(name, subsys, item);
} }
}
}); });
return Status.OK_STATUS; return Status.OK_STATUS;
@ -4076,12 +4085,12 @@ public class SystemView extends SafeTreeViewer
if (parent instanceof ISystemFilterContainerReference) // given a reference to parent? if (parent instanceof ISystemFilterContainerReference) // given a reference to parent?
{ {
refdParent = ((ISystemFilterContainerReference) parent).getReferencedSystemFilterContainer(); refdParent = ((ISystemFilterContainerReference) parent).getReferencedSystemFilterContainer();
parentRefItem = (Item) internalFindReferencedItem(item, refdParent, SEARCH_INFINITE); parentRefItem = internalFindReferencedItem(item, refdParent, SEARCH_INFINITE);
} }
// 3b and 3d. (filter pool or filter) // 3b and 3d. (filter pool or filter)
else if (parent instanceof ISystemFilterContainer) { else if (parent instanceof ISystemFilterContainer) {
refdParent = (ISystemFilterContainer) parent; refdParent = (ISystemFilterContainer) parent;
parentRefItem = (Item) internalFindReferencedItem(item, refdParent, SEARCH_INFINITE); parentRefItem = internalFindReferencedItem(item, refdParent, SEARCH_INFINITE);
} }
// 3c (subsystem) // 3c (subsystem)
else { else {