diff --git a/chrome/content/zotero/overlay.js b/chrome/content/zotero/overlay.js index d1029baf2..66f520752 100644 --- a/chrome/content/zotero/overlay.js +++ b/chrome/content/zotero/overlay.js @@ -838,6 +838,11 @@ var ZoteroPane = new function() if (this.itemsView) { this.itemsView.unregister(); + document.getElementById('zotero-items-tree').removeEventListener( + 'keypress', this.itemsView.wrappedJSObject.listener, false + ); + this.itemsView.wrappedJSObject.listener = null; + document.getElementById('zotero-items-tree').view = this.itemsView = null; } document.getElementById('zotero-tb-search').value = ""; diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js index a9690dc8f..7b7efdbbd 100644 --- a/chrome/content/zotero/xpcom/itemTreeView.js +++ b/chrome/content/zotero/xpcom/itemTreeView.js @@ -112,7 +112,7 @@ Zotero.ItemTreeView.prototype.setTree = function(treebox) var expandAllRows = obj.expandAllRows; var collapseAllRows = obj.collapseAllRows; var tree = obj._treebox.treeBody.parentNode; - tree.addEventListener('keypress', function(event) { + var listener = function(event) { var key = String.fromCharCode(event.which); if (key == '+' && !(event.ctrlKey || event.altKey || event.metaKey)) { @@ -124,7 +124,11 @@ Zotero.ItemTreeView.prototype.setTree = function(treebox) obj.collapseAllRows(treebox); return; } - }, false); + }; + // Store listener so we can call removeEventListener() + // in overlay.js::onCollectionSelected() + obj.listener = listener; + tree.addEventListener('keypress', listener, false); obj.sort(); obj.expandMatchParents(); @@ -774,6 +778,10 @@ Zotero.ItemTreeView.prototype.toggleOpenState = function(row, skipItemMapRefresh } } + if (!count) { + return; + } + this._dataItems[row].isOpen = !this._dataItems[row].isOpen; this._treebox.rowCountChanged(row+1, count); //tell treebox to repaint these this._treebox.invalidateRow(row);