From 9e324fe62b37c23f55844c05302c9e8f486f3f93 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Tue, 16 Jun 2026 12:11:24 -0400 Subject: [PATCH] Ignore collection-tree activation when multiple rows are selected Pressing Enter (or double-clicking) edited the focused row -- renaming a collection or opening the saved-search/feed editor -- even with several rows selected. Activation acts on one row, so ignore it for multi-selection. --- chrome/content/zotero/collectionTree.jsx | 5 +++++ test/tests/collectionTreeTest.js | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/chrome/content/zotero/collectionTree.jsx b/chrome/content/zotero/collectionTree.jsx index efff2a8a9b..398a5a519c 100644 --- a/chrome/content/zotero/collectionTree.jsx +++ b/chrome/content/zotero/collectionTree.jsx @@ -245,6 +245,11 @@ var CollectionTree = class CollectionTree extends LibraryTree { } handleActivate = (event, indices) => { + // Activation (rename collection, edit saved search/feed, open library) acts on + // a single row, so ignore it when multiple rows are selected + if (this.selection.count > 1) { + return; + } let index = indices[0]; let treeRow = this.getRow(index); if (treeRow.isCollection() && this.editable && this.selection.focused == index) { diff --git a/test/tests/collectionTreeTest.js b/test/tests/collectionTreeTest.js index 8248e6bc6a..33b91500ed 100644 --- a/test/tests/collectionTreeTest.js +++ b/test/tests/collectionTreeTest.js @@ -709,6 +709,20 @@ describe("Zotero.CollectionTree", function () { }); }); + describe("#handleActivate()", function () { + it("shouldn't start editing when multiple collections are selected", async function () { + let c1 = await createDataObject('collection'); + let c2 = await createDataObject('collection'); + await cv.selectByID("C" + c1.id); + cv.selection.toggleSelect(cv.getRowIndexByID("C" + c2.id)); + assert.equal(cv.selection.count, 2); + + cv.handleActivate(new Event('keydown'), [cv.selection.focused]); + + assert.notOk(cv._editing); + }); + }); + describe("#onDrop()", function () { /** * Simulate a drag and drop