1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-14 12:35: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;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Hashtable;
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.ITreeSelection;
import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
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 TreeItem _item;
@ -2440,8 +2438,16 @@ public class SystemView extends SafeTreeViewer
public void run()
{
Item[] items = _item.getItems();
_notReady = (items.length <= 0 || items[0].getText().equals(ProgressMessages.PendingUpdateAdapter_PendingLabel));
if (_item.isDisposed()) {
// Parent was deleted in the meantime
_notReady = false;
} else {
Item[] items = _item.getItems();
// 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()
@ -2553,6 +2559,7 @@ public class SystemView extends SafeTreeViewer
final String name = remoteResourceName;
final ISubSystem subsys = ss;
final TreeItem item = selectedItem;
final IWorkbench wb = RSEUIPlugin.getDefault().getWorkbench();
// do the selection after the query triggered via refreshRemoteObject() completes
Job job = new Job("select resource") //$NON-NLS-1$
@ -2560,7 +2567,7 @@ public class SystemView extends SafeTreeViewer
public IStatus run(IProgressMonitor monitor) {
boolean notReady = true;
while (notReady)
while (notReady && !wb.isClosing())
{
try {
Thread.sleep(100);
@ -2568,18 +2575,20 @@ public class SystemView extends SafeTreeViewer
catch (InterruptedException e){}
CheckPending checkRunnable = new CheckPending(item);
Display.getDefault().syncExec(checkRunnable);
wb.getDisplay().syncExec(checkRunnable);
notReady = checkRunnable.isNotReady();
}
Display.getDefault().asyncExec(new Runnable()
wb.getDisplay().asyncExec(new Runnable()
{
public void run()
{
if (names != null)
selectRemoteObjects(names, subsys, item);
else
selectRemoteObjects(name, subsys, item);
if (!wb.isClosing() && !item.isDisposed()) {
if (names != null)
selectRemoteObjects(names, subsys, item);
else
selectRemoteObjects(name, subsys, item);
}
}
});
@ -4076,12 +4085,12 @@ public class SystemView extends SafeTreeViewer
if (parent instanceof ISystemFilterContainerReference) // given a reference to parent?
{
refdParent = ((ISystemFilterContainerReference) parent).getReferencedSystemFilterContainer();
parentRefItem = (Item) internalFindReferencedItem(item, refdParent, SEARCH_INFINITE);
parentRefItem = internalFindReferencedItem(item, refdParent, SEARCH_INFINITE);
}
// 3b and 3d. (filter pool or filter)
else if (parent instanceof ISystemFilterContainer) {
refdParent = (ISystemFilterContainer) parent;
parentRefItem = (Item) internalFindReferencedItem(item, refdParent, SEARCH_INFINITE);
parentRefItem = internalFindReferencedItem(item, refdParent, SEARCH_INFINITE);
}
// 3c (subsystem)
else {