From e07ea32dfdaa03cbfee6ee6b9ac55c0d38ab6f0d Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Mon, 26 Oct 2009 14:52:08 +0300 Subject: [PATCH] TreeUi: expand node when enqueued for update --- .../com/intellij/ide/util/treeView/AbstractTreeUi.java | 7 ++++++- .../intellij/ide/util/treeView/AbstractTreeUpdater.java | 9 +++++++++ .../com/intellij/ide/util/treeView/TreeUpdatePass.java | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java index 297d34242879..1197cbcdc0cc 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java @@ -2956,7 +2956,9 @@ public class AbstractTreeUi { if (myTree.isExpanded(getPathFor(toExpand)) && !myUnbuiltNodes.contains(toExpand)) { - processNodeActionsIfReady(toExpand); + if (!areChildrenToBeUpdated(toExpand)) { + processNodeActionsIfReady(toExpand); + } } else { if (!myUnbuiltNodes.contains(toExpand)) { @@ -2968,6 +2970,9 @@ public class AbstractTreeUi { } } + private boolean areChildrenToBeUpdated(DefaultMutableTreeNode node) { + return getUpdater().isEnqueuedToUpdate(node) || isUpdatingParent(node); + } private String asString(DefaultMutableTreeNode node) { if (node == null) return null; diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUpdater.java b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUpdater.java index c07e0f09b868..f3d8e100fee6 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUpdater.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUpdater.java @@ -316,4 +316,13 @@ public class AbstractTreeUpdater implements Disposable, Activatable { public void flush() { myUpdateQueue.sendFlush(); } + + public boolean isEnqueuedToUpdate(DefaultMutableTreeNode node) { + Iterator nodes = myNodeQueue.iterator(); + while (nodes.hasNext()) { + TreeUpdatePass each = nodes.next(); + if (each.willUpdate(node)) return true; + } + return false; + } } diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/TreeUpdatePass.java b/platform/platform-api/src/com/intellij/ide/util/treeView/TreeUpdatePass.java index 143565f69b71..8ce8fcd374b0 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/TreeUpdatePass.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/TreeUpdatePass.java @@ -79,4 +79,9 @@ public class TreeUpdatePass { public String toString() { return "TreUpdatePass node=" + myNode + " stamp=" + myUpdateStamp + " expired=" + myExpired + " currentNode=" + myCurrentNode + " allocation=" + myAllocation; } + + public boolean willUpdate(@NotNull DefaultMutableTreeNode node) { + @NotNull DefaultMutableTreeNode currentNode = myCurrentNode != null ? myCurrentNode : myNode; + return node.isNodeAncestor(currentNode); + } } \ No newline at end of file