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:
parent
6b7f927b68
commit
076bb8c5c8
1 changed files with 424 additions and 415 deletions
|
@ -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()
|
||||
{
|
||||
if (_item.isDisposed()) {
|
||||
// Parent was deleted in the meantime
|
||||
_notReady = false;
|
||||
} else {
|
||||
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()
|
||||
|
@ -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,19 +2575,21 @@ 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 (!wb.isClosing() && !item.isDisposed()) {
|
||||
if (names != null)
|
||||
selectRemoteObjects(names, subsys, item);
|
||||
else
|
||||
selectRemoteObjects(name, subsys, item);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return Status.OK_STATUS;
|
||||
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue