diff --git a/src/project/ProjectManager.js b/src/project/ProjectManager.js index f343ce9c764..1807454f795 100644 --- a/src/project/ProjectManager.js +++ b/src/project/ProjectManager.js @@ -1149,26 +1149,38 @@ define(function (require, exports, module) { } /** - * Reloads the project's file tree + * Reloads the project's file tree, maintaining the current selection. * @return {$.Promise} A promise object that will be resolved when the * project tree is reloaded, or rejected if the project path - * fails to reload. + * fails to reload. If the previous selected entry is not found, + * the promise is still resolved. */ function refreshFileTree() { - var selectedEntry; + var selectedEntry, + deferred = new $.Deferred(); + if (_lastSelected) { selectedEntry = _lastSelected.data("entry"); + } else { + selectedEntry = getSelectedItem(); } _lastSelected = null; - return _loadProject(getProjectRoot().fullPath, true) - .done(function () { + _loadProject(getProjectRoot().fullPath, true) + .then(function () { if (selectedEntry) { - _findTreeNode(selectedEntry).done(function ($node) { - _forceSelection(null, $node); - }); + // restore selection, always resolve + _findTreeNode(selectedEntry) + .done(function ($node) { + _forceSelection(null, $node); + }) + .always(deferred.resolve); + } else { + deferred.resolve(); } - }); + }, deferred.reject); + + return deferred.promise(); } /**