From 2914b980af16547bbaaa0eca93603f6aff4ea593 Mon Sep 17 00:00:00 2001 From: Jason San Jose Date: Mon, 6 Jan 2014 12:05:25 -0800 Subject: [PATCH 1/3] maintain selection in refreshFileTree --- src/project/ProjectManager.js | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/project/ProjectManager.js b/src/project/ProjectManager.js index f343ce9c764..8a2c3752343 100644 --- a/src/project/ProjectManager.js +++ b/src/project/ProjectManager.js @@ -1155,20 +1155,30 @@ define(function (require, exports, module) { * fails to reload. */ 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); - }); + _findTreeNode(selectedEntry) + .then(function ($node) { + _forceSelection(null, $node); + deferred.resolve(); + }, deferred.reject); + } else { + deferred.resolve(); } - }); + }, deferred.reject); + + return deferred.promise(); } /** From 4f07182bb7d6cfd1a2661f23a711679441293f9b Mon Sep 17 00:00:00 2001 From: Ian Wehrman Date: Mon, 6 Jan 2014 15:31:23 -0800 Subject: [PATCH 2/3] Delay the promise resolution until after we find a tree node withe selection --- src/project/ProjectManager.js | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/project/ProjectManager.js b/src/project/ProjectManager.js index 8a2c3752343..3a148d8a06a 100644 --- a/src/project/ProjectManager.js +++ b/src/project/ProjectManager.js @@ -1155,8 +1155,7 @@ define(function (require, exports, module) { * fails to reload. */ function refreshFileTree() { - var selectedEntry, - deferred = new $.Deferred(); + var selectedEntry; if (_lastSelected) { selectedEntry = _lastSelected.data("entry"); @@ -1165,20 +1164,15 @@ define(function (require, exports, module) { } _lastSelected = null; - _loadProject(getProjectRoot().fullPath, true) + return _loadProject(getProjectRoot().fullPath, true) .then(function () { if (selectedEntry) { - _findTreeNode(selectedEntry) - .then(function ($node) { + return _findTreeNode(selectedEntry) + .done(function ($node) { _forceSelection(null, $node); - deferred.resolve(); - }, deferred.reject); - } else { - deferred.resolve(); + }); } - }, deferred.reject); - - return deferred.promise(); + }); } /** From 1d608b2a00dc2c2ecd2e4f3e29418a125ccf1229 Mon Sep 17 00:00:00 2001 From: Jason San Jose Date: Mon, 6 Jan 2014 15:52:26 -0800 Subject: [PATCH 3/3] Always resolve refreshFileTree when _loadProject succeeds --- src/project/ProjectManager.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/project/ProjectManager.js b/src/project/ProjectManager.js index 3a148d8a06a..1807454f795 100644 --- a/src/project/ProjectManager.js +++ b/src/project/ProjectManager.js @@ -1149,13 +1149,15 @@ 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"); @@ -1164,15 +1166,21 @@ define(function (require, exports, module) { } _lastSelected = null; - return _loadProject(getProjectRoot().fullPath, true) + _loadProject(getProjectRoot().fullPath, true) .then(function () { if (selectedEntry) { - return _findTreeNode(selectedEntry) + // restore selection, always resolve + _findTreeNode(selectedEntry) .done(function ($node) { _forceSelection(null, $node); - }); + }) + .always(deferred.resolve); + } else { + deferred.resolve(); } - }); + }, deferred.reject); + + return deferred.promise(); } /**