diff options
author | Bogdan Gheorghe <gheorghe@ca.ibm.com> | 2013-11-08 14:16:39 -0500 |
---|---|---|
committer | Bogdan Gheorghe <gheorghe@ca.ibm.com> | 2013-11-08 14:16:39 -0500 |
commit | af2ceea913da0eb8e3c4f98ae3ef685cf191b930 (patch) | |
tree | 2090e6c784cb8067b8cacb56e44fea5c9f5b02bd | |
parent | d88967513813f0273e47300eebb3093bd2845717 (diff) | |
download | org.eclipse.orion.client-origin/gheorghe/defTreeUpdate.zip org.eclipse.orion.client-origin/gheorghe/defTreeUpdate.tar.gz org.eclipse.orion.client-origin/gheorghe/defTreeUpdate.tar.bz2 |
Wait for all outstanding fetchChildren to complete before performing a revealorigin/gheorghe/defTreeUpdate
-rw-r--r-- | bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js | 28 | ||||
-rw-r--r-- | bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js | 4 |
2 files changed, 28 insertions, 4 deletions
diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js b/bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js index a867286..8d68122 100644 --- a/bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js +++ b/bundles/org.eclipse.orion.client.ui/web/orion/explorers/explorer-table.js @@ -26,6 +26,7 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/ this.idPrefix = idPrefix || ""; this.excludeFiles = !!excludeFiles; this.excludeFolders = !!excludeFolders; + this.queue = []; } FileModel.prototype = new mExplorer.ExplorerModel(); @@ -33,6 +34,10 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/ onItem(this.root); }; + FileModel.prototype.getPending = function(){ + return Deferred.all(this.queue); + }; + /* Process the parent and children, doing any filtering or sorting that may be necessary. */ @@ -82,12 +87,19 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/ onComplete([]); } else if (parentItem.Location) { var progress = this.registry.getService("orion.page.progress"); - progress.progress(this.fileClient.fetchChildren(parentItem.ChildrenLocation), "Fetching children of " + parentItem.Name).then( + var deferred = progress.progress(this.fileClient.fetchChildren(parentItem.ChildrenLocation), "Fetching children of " + parentItem.Name); + this.queue.push(deferred); + deferred.then( function(children) { if (self.destroyed) { return; } onComplete(self.processParent(parentItem, children)); + //remove deferred from queue + var index = self.queue.indexOf(deferred); + self.queue.splice(index, 1); } - ); + , function() { + //error handler remove this deferred from queue + }); } else { onComplete([]); } @@ -220,8 +232,12 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/ }); }, create: function(modelEvent) { + var that = this; // refresh the node - this.changedItem(modelEvent.parent, true, modelEvent.newValue); + this.changedItem(modelEvent.parent, true, modelEvent.newValue).then( + function (event) { + that.modelEventDispatcher.dispatchEvent({type: "postCreate", newValue: modelEvent.newValue}); + }); }, "delete": function(modelEvent) { //$NON-NLS-0$ // Handled by deleteMultiple @@ -497,6 +513,7 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/ var that = this; var deferred = new Deferred(); parent.children = null; + this.model.queue.push(deferred); this.model.getChildren(parent, function(children) { //If a key board navigator is hooked up, we need to sync up the model if(that.getNavHandler()){ @@ -504,6 +521,11 @@ define(['i18n!orion/navigate/nls/messages', 'require', 'orion/Deferred', 'orion/ } that.myTree.refresh.bind(that.myTree)(parent, children, forceExpand); deferred.resolve(children); + //remove deferred from queue + window.console.log("Model Size Before: " + that.queue.length); + var index = that.queue.indexOf(deferred); + that.queue.splice(index, 1); + window.console.log("Model Size After: " + that.queue.length); }); return deferred; }; diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js index 1374489..1018940 100644 --- a/bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js +++ b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/nav/common-nav.js @@ -55,7 +55,9 @@ define([ this.treeRoot = {}; // Needed by FileExplorer.prototype.loadResourceList var _self = this; this.editorInputListener = function(event) { - _self.reveal(event.metadata, true); + if (_self.model) { + _self.model.getPending().then(function() {_self.reveal(event.metadata, true);}); + } }; this.editorInputManager.addEventListener("InputChanged", this.editorInputListener); //$NON-NLS-0$ var dispatcher = this.modelEventDispatcher; |