From 39eb6912527b54a610dade1a7072151ca373de77 Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Wed, 22 Apr 2026 18:15:04 +0200 Subject: [PATCH] Fix status label mismatch after merging with a pre-existing selection (bug 2034111) --- test/integration/reorganize_pages_spec.mjs | 45 ++++++++++++++++++++++ web/pdf_thumbnail_viewer.js | 8 ++++ 2 files changed, 53 insertions(+) diff --git a/test/integration/reorganize_pages_spec.mjs b/test/integration/reorganize_pages_spec.mjs index 43d0f7de1..ab0a6aa4c 100644 --- a/test/integration/reorganize_pages_spec.mjs +++ b/test/integration/reorganize_pages_spec.mjs @@ -3123,5 +3123,50 @@ describe("Reorganize Pages View", () => { }) ); }); + + it("should show only merged pages as selected when a page was pre-selected (bug 2034111)", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + await waitForThumbnailVisible(page, 1); + + const labelSelector = "#viewsManagerStatusActionLabel"; + + // Select page 1 before merging. + await waitAndClick( + page, + `.thumbnail:has(${getThumbnailSelector(1)}) input` + ); + await waitForTextToBe(page, labelSelector, `${FSI}1${PDI} selected`); + + const handleMerged = await createPromise(page, resolve => { + window.PDFViewerApplication.eventBus._on( + "thumbnailsloaded", + resolve, + { once: true } + ); + }); + + const picker = await page.$("#viewsManagerAddFilePicker"); + await picker.uploadFile( + path.join(__dirname, "../pdfs/three_pages_with_number.pdf") + ); + await awaitPromise(handleMerged); + + // Original 3 pages + 3 merged pages = 6 pages total. + await page.waitForFunction( + () => parseInt(document.getElementById("pageNumber").max, 10) === 6 + ); + + // Label must show exactly the 3 newly inserted pages — the + // pre-merge selection of page 1 must have been cleared. + await waitForTextToBe(page, labelSelector, `${FSI}3${PDI} selected`); + + // Focus must move to the first newly inserted page (page 2). + await page.waitForFunction( + () => window.PDFViewerApplication.page === 2 + ); + }) + ); + }); }); }); diff --git a/web/pdf_thumbnail_viewer.js b/web/pdf_thumbnail_viewer.js index dcd2e4128..1c005d69d 100644 --- a/web/pdf_thumbnail_viewer.js +++ b/web/pdf_thumbnail_viewer.js @@ -339,6 +339,11 @@ class PDFThumbnailViewer { this.eventBus._on( "thumbnailsloaded", () => { + // Clear any pre-merge selection: thumbnails are rebuilt fresh + // (all unchecked), so the old set would cause a label/visual + // mismatch. + this.#selectedPages = null; + this.#updateMenuEntries(); this.#toggleBar("status"); const newPagesCount = this.#pagesMapper.pagesNumber; const insertedPagesCount = newPagesCount - pagesCount; @@ -351,6 +356,9 @@ class PDFThumbnailViewer { this._thumbnails[i].checkbox.checked = true; this.#selectPage(i + 1, true); } + if (insertedPagesCount) { + this.#updateCurrentPage(currentPageIndex + 2); + } }, { once: true } );