From b95248e4e5c4cf5f39e329e5ae09ee004d1099a9 Mon Sep 17 00:00:00 2001 From: ACX <8075870+acx10@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:45:48 -0700 Subject: [PATCH] Fix touch issues with ebook reader (#2395) Co-authored-by: acx10 --- .../features/readers/ebook-reader/core/event.service.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/booklore-ui/src/app/features/readers/ebook-reader/core/event.service.ts b/booklore-ui/src/app/features/readers/ebook-reader/core/event.service.ts index c238e0e27..88162b88b 100644 --- a/booklore-ui/src/app/features/readers/ebook-reader/core/event.service.ts +++ b/booklore-ui/src/app/features/readers/ebook-reader/core/event.service.ts @@ -48,6 +48,7 @@ export class ReaderEventService { private isTextSelectionInProgress = false; private touchStartTime = 0; private selectionChangeTimeout: ReturnType | null = null; + private lastTouchTime = 0; private eventSubject = new Subject(); public events$ = this.eventSubject.asObservable(); @@ -158,6 +159,11 @@ export class ReaderEventService { }); doc.addEventListener('click', (event: MouseEvent) => { + // Ignore synthesized mouse events that follow touch events + if (Date.now() - this.lastTouchTime < 500) { + return; + } + const iframe = doc.defaultView?.frameElement as HTMLIFrameElement | null; if (!iframe) return; @@ -275,6 +281,7 @@ export class ReaderEventService { private handleTouchEnd(event: TouchEvent, doc: Document): void { const touchEndTime = Date.now(); const touchDuration = touchEndTime - this.touchStartTime; + this.lastTouchTime = touchEndTime; const selection = doc.defaultView?.getSelection(); const hasSelection = selection && !selection.isCollapsed && selection.rangeCount > 0;