From 9c57a0c500a84798788f2a464ee00a53ea0e25bf Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Thu, 3 Dec 2009 19:59:34 +0300 Subject: [PATCH] IDEADEV-41812 - New project view: File selection is lost after rename --- .../ide/util/treeView/AbstractTreeUi.java | 18 +++++++++++++++++- .../ide/util/treeView/UpdaterTreeState.java | 4 +++- 2 files changed, 20 insertions(+), 2 deletions(-) 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 893d91942275..434ccefcd86c 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 @@ -1489,6 +1489,18 @@ public class AbstractTreeUi { myInitialized.setDone(); } + + if (myUpdaterState != null && !myUpdaterState.isProcessingNow()) { + UpdaterTreeState oldState = myUpdaterState; + if (!myUpdaterState.restore(null)) { + setUpdaterState(oldState); + } + + if (!isReady()) { + return; + } + } + if (myTree.isShowing()) { if (getBuilder().isToEnsureSelectionOnFocusGained() && Registry.is("ide.tree.ensureSelectionOnFocusGained")) { TreeUtil.ensureSelection(myTree); @@ -2868,7 +2880,11 @@ public class AbstractTreeUi { addNext(elementsToSelect, 0, new Runnable() { public void run() { if (getTree().isSelectionEmpty()) { - restoreSelection(currentElements); + processInnerChange(new Runnable() { + public void run() { + restoreSelection(currentElements); + } + }); } runDone(onDone); } diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/UpdaterTreeState.java b/platform/platform-api/src/com/intellij/ide/util/treeView/UpdaterTreeState.java index 5e61c53e07fd..31b5f1b70ef1 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/UpdaterTreeState.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/UpdaterTreeState.java @@ -143,7 +143,9 @@ public class UpdaterTreeState { } public boolean restore(@Nullable DefaultMutableTreeNode actionNode) { - if (isProcessingNow() || !myCanRunRestore || myUi.hasNodesToUpdate()) return false; + if (isProcessingNow() || !myCanRunRestore || myUi.hasNodesToUpdate()) { + return false; + } invalidateToSelectWithRefsToParent(actionNode);