Fix refresh problems when Advanced Search is open, and maybe other times

This commit is contained in:
Dan Stillman 2017-09-29 04:17:30 -04:00
parent 48d4d2d5a5
commit 89babf8832

View file

@ -878,6 +878,7 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
} }
} }
var reselect = false;
if(madeChanges) if(madeChanges)
{ {
// If we made individual changes, we have to clear the cache // If we made individual changes, we have to clear the cache
@ -932,6 +933,7 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
// Reset to Info tab // Reset to Info tab
this._ownerDocument.getElementById('zotero-view-tabbox').selectedIndex = 0; this._ownerDocument.getElementById('zotero-view-tabbox').selectedIndex = 0;
yield this.selectItem(singleSelect); yield this.selectItem(singleSelect);
reselect = true;
} }
} }
// If single item is selected and was modified // If single item is selected and was modified
@ -939,9 +941,11 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
savedSelection.length == 1 && savedSelection[0] == ids[0]) { savedSelection.length == 1 && savedSelection[0] == ids[0]) {
if (activeWindow) { if (activeWindow) {
yield this.selectItem(ids[0]); yield this.selectItem(ids[0]);
reselect = true;
} }
else { else {
this.rememberSelection(savedSelection); this.rememberSelection(savedSelection);
reselect = true;
} }
} }
// On removal of a selected row, select item at previous position // On removal of a selected row, select item at previous position
@ -955,6 +959,7 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
var itemID = this._rows[previousFirstSelectedRow].ref.id; var itemID = this._rows[previousFirstSelectedRow].ref.id;
var setItemIDs = collectionTreeRow.ref.getSetItemsByItemID(itemID); var setItemIDs = collectionTreeRow.ref.getSetItemsByItemID(itemID);
this.selectItems(setItemIDs); this.selectItems(setItemIDs);
reselect = true;
} }
} }
else { else {
@ -973,15 +978,18 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
if (previousFirstSelectedRow !== undefined && this._rows[previousFirstSelectedRow]) { if (previousFirstSelectedRow !== undefined && this._rows[previousFirstSelectedRow]) {
this.selection.select(previousFirstSelectedRow); this.selection.select(previousFirstSelectedRow);
reselect = true;
} }
// If no item at previous position, select last item in list // If no item at previous position, select last item in list
else if (this._rows[this._rows.length - 1]) { else if (this._rows[this._rows.length - 1]) {
this.selection.select(this._rows.length - 1); this.selection.select(this._rows.length - 1);
reselect = true;
} }
} }
} }
else { else {
this.rememberSelection(savedSelection); this.rememberSelection(savedSelection);
reselect = true;
} }
} }
@ -998,11 +1006,15 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
//this._treebox.endUpdateBatch(); //this._treebox.endUpdateBatch();
let selectPromise; let selectPromise;
if (madeChanges) { // If we made changes to the selection (including reselecting the same item, which will register as
// a selection when selectEventsSuppressed is set to false), wait for selection handlers to be run
// before returning. This guarantees that changes are reflected in the middle and right-hand panes
// before returning from the save transaction.
if (reselect) {
selectPromise = this.waitForSelect(); selectPromise = this.waitForSelect();
} }
this.selection.selectEventsSuppressed = false; this.selection.selectEventsSuppressed = false;
if (madeChanges) { if (reselect) {
Zotero.debug("Yielding for select promise"); // TEMP Zotero.debug("Yielding for select promise"); // TEMP
return selectPromise; return selectPromise;
} }