Skip to content

Commit

Permalink
Hopefully fix intermittently broken items pane
Browse files Browse the repository at this point in the history
https://forums.zotero.org/discussion/69226/papers-become-invisible-in-the-middle-pane

I can't reproduce this, but it seems like if the tree disappears (due to
a collection change?) while the tree is refreshing, the toggleSelect()
in the rememberSelection() call can fail and break the tree.
  • Loading branch information
dstillman committed Dec 18, 2017
1 parent fa33eb7 commit 7cd1439
Showing 1 changed file with 30 additions and 20 deletions.
50 changes: 30 additions & 20 deletions chrome/content/zotero/xpcom/itemTreeView.js
Expand Up @@ -2103,30 +2103,40 @@ Zotero.ItemTreeView.prototype.rememberSelection = function (selection) {
var unsuppress = this.selection.selectEventsSuppressed = true;
this._treebox.beginUpdateBatch();
}
for(var i=0; i < selection.length; i++)
{
if (this._rowMap[selection[i]] != null) {
this.selection.toggleSelect(this._rowMap[selection[i]]);
}
// Try the parent
else {
var item = Zotero.Items.get(selection[i]);
if (!item) {
continue;
}

var parent = item.parentItemID;
if (!parent) {
continue;
}

if (this._rowMap[parent] != null) {
this._closeContainer(this._rowMap[parent]);
this.toggleOpenState(this._rowMap[parent]);

// Use try/catch to work around NS_ERROR_UNEXPECTED from nsITreeSelection::toggleSelect(),
// apparently when the tree disappears before it's called (though I can't reproduce it):
//
// https://forums.zotero.org/discussion/69226/papers-become-invisible-in-the-middle-pane
try {
for (let i = 0; i < selection.length; i++) {
if (this._rowMap[selection[i]] != null) {
this.selection.toggleSelect(this._rowMap[selection[i]]);
}
// Try the parent
else {
var item = Zotero.Items.get(selection[i]);
if (!item) {
continue;
}

var parent = item.parentItemID;
if (!parent) {
continue;
}

if (this._rowMap[parent] != null) {
this._closeContainer(this._rowMap[parent]);
this.toggleOpenState(this._rowMap[parent]);
this.selection.toggleSelect(this._rowMap[selection[i]]);
}
}
}
}
catch (e) {
Zotero.logError(e);
}

if (unsuppress) {
this._treebox.endUpdateBatch();
this.selection.selectEventsSuppressed = false;
Expand Down

0 comments on commit 7cd1439

Please sign in to comment.