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:
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);
})
})
});