From 0c246ade2ff3e461d7891b1b889457a82306efd6 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Tue, 16 Jun 2026 18:40:52 +0200 Subject: [PATCH] Fix scroll preservation on reader setting changes Observers got disconnected and started again. Since the images have already been rendered at this point of time, the mutation observer on the scroll element does not detect them anymore. Thus, exiting image resizes were not observed anymore and did not trigger the preservation logic --- CHANGELOG.md | 2 +- .../viewer/hooks/useReaderPreserveScrollPosition.ts | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7654f327..bd011cd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,7 +58,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - (**Reader**) Fix chapter not getting marked as read in continuous reading mode in case the last page is not big enough to get marked as the current page - (**Reader**) Fix infinite scrolling sometimes not opening previous/next chapter - (**Reader**) Fix infinite scroll immediately opening previous chapter with disabled transition page when opening reader -- (**Reader**) Fix preserving scroll position with RTL reading direction and a language that is read RTL +- (**Reader**) Fix preserving scroll position - (**Reader**) Fix missing gap between chapters in continuous vertical and horizontal reading modes with disabled transition page - (**Browse**) Fix showing only nsfw sources in the browse source page when the "show nsfw" setting is disabled - (**Manga/Library**) Fix mark as read/unread option not being disabled for manga without any chapters diff --git a/src/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts b/src/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts index df2082c4..4162dfc0 100644 --- a/src/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts +++ b/src/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts @@ -164,10 +164,14 @@ const useScrollPreservationData = ( updateObservation(entry.removedNodes, (element) => intersectionObserver.unobserve(element)); } }); + mutationObserver.observe(scrollElement, { childList: true, subtree: true, }); + + updateObservation(scrollElement.childNodes, (element) => intersectionObserver.observe(element)); + return () => { mutationObserver.disconnect(); intersectionObserver.disconnect(); @@ -253,6 +257,8 @@ const usePreserveOnLeadingPageRender = ( subtree: true, }); + updateObservation(scrollElement.childNodes, (element) => resizeObserver.observe(element)); + return () => { mutationObserver.disconnect(); resizeObserver.disconnect(); @@ -347,6 +353,8 @@ const usePreserveOnInfiniteScrollPreviousChapterInitialRender = ( subtree: true, }); + updateObservation(scrollElement.childNodes, (element) => resizeObserver.observe(element)); + return () => { mutationObserver.disconnect(); resizeObserver.disconnect();