www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit cbbdebc5b70fd1bc24cf4ba939ffae8d08ebd017
parent 43762248a4f55fc65791fca6e3034352c44d8d13
Author: Dan Stillman <dstillman@zotero.org>
Date:   Mon, 25 May 2015 01:43:07 -0400

Fix hang in collectionsTreeView::selectWait() if row is already selected

Diffstat:
Mchrome/content/zotero/xpcom/collectionTreeView.js | 3+++
Mchrome/content/zotero/xpcom/itemTreeView.js | 2+-
Mchrome/content/zotero/xpcom/libraryTreeView.js | 1+
Mtest/content/support.js | 1+
Mtest/tests/collectionTreeViewTest.js | 11++++++++++-
Mtest/tests/itemsTest.js | 5+++--
6 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/chrome/content/zotero/xpcom/collectionTreeView.js b/chrome/content/zotero/xpcom/collectionTreeView.js @@ -262,6 +262,9 @@ Zotero.CollectionTreeView.prototype.selectWait = Zotero.Promise.method(function this.selection.select(row); return; } + if (this.selection.currentIndex == row) { + return; + }; var deferred = Zotero.Promise.defer(); this.addEventListener('select', () => deferred.resolve()); this.selection.select(row); diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js @@ -68,7 +68,7 @@ Zotero.ItemTreeView.prototype.type = 'item'; Zotero.ItemTreeView.prototype.setTree = Zotero.serial(Zotero.Promise.coroutine(function* (treebox) { try { - Zotero.debug("Setting tree for items view " + this.id); + Zotero.debug("Setting tree for " + this.collectionTreeRow.id + " items view " + this.id); var start = Date.now(); // Try to set the window document if not yet set if (treebox && !this._ownerDocument) { diff --git a/chrome/content/zotero/xpcom/libraryTreeView.js b/chrome/content/zotero/xpcom/libraryTreeView.js @@ -82,6 +82,7 @@ Zotero.LibraryTreeView.prototype = { * @return {Integer} */ getRowByID: function (id) { + // FIXME: Should work for itemIDs too var type = id[0]; id = ('' + id).substr(1); return this._rowMap[type + id]; diff --git a/test/content/support.js b/test/content/support.js @@ -41,6 +41,7 @@ function loadBrowserWindow() { */ var loadZoteroPane = Zotero.Promise.coroutine(function* () { var win = yield loadBrowserWindow(); + Zotero.Prefs.clear('lastViewedFolder'); win.ZoteroOverlay.toggleDisplay(true); // Hack to wait for pane load to finish. This is the same hack diff --git a/test/tests/collectionTreeViewTest.js b/test/tests/collectionTreeViewTest.js @@ -49,7 +49,7 @@ describe("Zotero.CollectionTreeView", function() { }) }) - describe("#selectByID", function () { + describe("#selectByID()", function () { it("should select the trash", function* () { yield collectionsView.selectByID("T1"); var row = collectionsView.selection.currentIndex; @@ -59,6 +59,15 @@ describe("Zotero.CollectionTreeView", function() { }) }) + describe("#selectWait()", function () { + it("shouldn't hang if row is already selected", function* () { + var row = collectionsView.getRowByID("T" + Zotero.Libraries.userLibraryID); + collectionsView.selection.select(row); + yield Zotero.Promise.delay(50); + yield collectionsView.selectWait(row); + }) + }) + describe("#notify()", function () { it("should select a new collection", function* () { // Create collection diff --git a/test/tests/itemsTest.js b/test/tests/itemsTest.js @@ -1,9 +1,10 @@ describe("Zotero.Items", function () { - var win, collectionsView; + var win, collectionsView, zp; before(function* () { win = yield loadZoteroPane(); collectionsView = win.ZoteroPane.collectionsView; + zp = win.ZoteroPane; }) beforeEach(function () { return selectLibrary(win); @@ -36,7 +37,7 @@ describe("Zotero.Items", function () { assert.isFalse(yield Zotero.Items.getAsync(id1)); assert.isFalse(yield Zotero.Items.getAsync(id2)); assert.isFalse(yield Zotero.Items.getAsync(id3)); - assert.equal(win.ZoteroPane.itemsView.rowCount, 0); + assert.equal(zp.itemsView.rowCount, 0); }) }) });