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:
parent
6b7f927b68
commit
076bb8c5c8
1 changed files with 424 additions and 415 deletions
|
@ -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()
|
||||||
{
|
{
|
||||||
Item[] items = _item.getItems();
|
if (_item.isDisposed()) {
|
||||||
_notReady = (items.length <= 0 || items[0].getText().equals(ProgressMessages.PendingUpdateAdapter_PendingLabel));
|
// 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()
|
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,18 +2575,20 @@ 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 (names != null)
|
if (!wb.isClosing() && !item.isDisposed()) {
|
||||||
selectRemoteObjects(names, subsys, item);
|
if (names != null)
|
||||||
else
|
selectRemoteObjects(names, subsys, item);
|
||||||
selectRemoteObjects(name, 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?
|
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 {
|
||||||
|
|
Loading…
Add table
Reference in a new issue