www

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

commit f38f5e9c7ceb4c0a66f2933398d363ceb31cd75a
parent 14862edb2ccbf74812386533f7dddad72b0ecd47
Author: Dan Stillman <dstillman@zotero.org>
Date:   Sat, 11 Apr 2009 07:54:17 +0000

The previous items list nsITreeView object wasn't being destroyed when changing collections. This could cause slow expand/collapse operations (since it was trying to expand each item in each collection you'd viewed since starting Zotero the number of times you'd viewed the collection) and was also causing a potentially large memory leak.


Diffstat:
Mchrome/content/zotero/overlay.js | 5+++++
Mchrome/content/zotero/xpcom/itemTreeView.js | 12++++++++++--
2 files changed, 15 insertions(+), 2 deletions(-)

diff --git 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 @@ -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);