diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java index 7aa723491598..13b3d7cfe1ac 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java @@ -289,11 +289,10 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable { modifiableModel.commit(); } }.execute(); - myPackagingEditorContext.resetModifiableModel(); } - - - reset(); // TODO: fix to not reset on apply! + myPackagingEditorContext.resetModifiableModel(); + reloadTreeNodes(); + restoreLastSelection(); } @Override diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java index 2fa1581ee2a7..2d24e00e1ce1 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java @@ -233,19 +233,28 @@ public abstract class BaseStructureConfigurable extends MasterDetailsComponent i if (!myWasTreeInitialized) { initTree(); myTree.setShowsRootHandles(false); - loadTree(); - } else { - super.disposeUIResources(); - myTree.setShowsRootHandles(false); - loadTree(); + loadTreeNodes(); } - for (ProjectStructureElement element : getProjectStructureElements()) { - myContext.getDaemonAnalyzer().queueUpdate(element); + else { + reloadTreeNodes(); } super.reset(); } + private void loadTreeNodes() { + loadTree(); + for (ProjectStructureElement element : getProjectStructureElements()) { + myContext.getDaemonAnalyzer().queueUpdate(element); + } + } + + protected final void reloadTreeNodes() { + super.disposeUIResources(); + myTree.setShowsRootHandles(false); + loadTreeNodes(); + } + @NotNull protected Collection getProjectStructureElements() { return Collections.emptyList(); diff --git a/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java b/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java index ea81ec0030e3..e3df0c41b2f2 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java @@ -25,7 +25,6 @@ import com.intellij.ui.navigation.Place; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.PlatformIcons; import com.intellij.util.containers.ContainerUtil; -import java.util.HashSet; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.tree.TreeUtil; @@ -332,6 +331,10 @@ public abstract class MasterDetailsComponent implements Configurable, DetailsCom //myTree.requestFocus(); myState.getProportions().restoreSplitterProportions(myWholePanel); + restoreLastSelection(); + } + + protected final void restoreLastSelection() { final Enumeration enumeration = myRoot.breadthFirstEnumeration(); boolean selected = false; while (enumeration.hasMoreElements()) {