cancel update threads while continue typing

This commit is contained in:
Konstantin Bulenkov
2011-12-29 18:38:45 +01:00
parent 0ff8d6073a
commit 07f694d37c
@@ -113,27 +113,41 @@ public class FilteringTreeBuilder extends AbstractTreeBuilder {
}
public ActionCallback refilter(final Object preferredSelection, final boolean adjustSelection, final boolean now) {
if (myRefilterQueue == null || now) {
return refilterNow(preferredSelection, adjustSelection);
if (myRefilterQueue != null) {
myRefilterQueue.cancelAllUpdates();
}
else {
final ActionCallback result = new ActionCallback();
myRefilterQueue.queue(new Update(this) {
public void run() {
refilterNow(preferredSelection, adjustSelection).notifyWhenDone(result);
final ActionCallback callback = new ActionCallback();
getUi().cancelUpdate().doWhenDone(new Runnable() {
@Override
public void run() {
if (myRefilterQueue == null || now) {
refilterNow(preferredSelection, adjustSelection).doWhenDone(new Runnable() {
@Override
public void run() {
callback.setDone();
}
});
}
else {
myRefilterQueue.queue(new Update(this) {
public void run() {
refilterNow(preferredSelection, adjustSelection).notifyWhenDone(callback);
}
@Override
public void setRejected() {
super.setRejected();
result.setDone();
@Override
public void setRejected() {
super.setRejected();
callback.setDone();
}
});
}
});
}
});
return result;
}
return callback;
}
protected ActionCallback refilterNow(final Object preferredSelection, final boolean adjustSelection) {
final ActionCallback selectionDone = new ActionCallback();