diff --git a/bms-front/src/directive/common/textDragCopy.js b/bms-front/src/directive/common/textDragCopy.js index 00a55684..c451608d 100644 --- a/bms-front/src/directive/common/textDragCopy.js +++ b/bms-front/src/directive/common/textDragCopy.js @@ -250,10 +250,18 @@ function handleClick(event) { suppressClickRoot = null } +function handleFocusIn(event) { + if (!activeSelection) return + const target = event.target instanceof Element ? event.target : event.target?.parentElement + if (!target) return + + if (!activeSelection.context.el.contains(target) || target.closest(EDITABLE_SELECTOR)) { + clearSelection() + } +} + function handleCopy(event) { if (!activeSelection || dragging || !event.clipboardData) return - const target = event.target instanceof Element ? event.target : event.target?.parentElement - if (target?.closest(EDITABLE_SELECTOR)) return const text = selectedTextSegments().map(segment => segment.text).join('\n') if (!text) return @@ -268,6 +276,7 @@ function installListeners() { document.addEventListener('mouseup', handleMouseUp) document.addEventListener('dblclick', handleDoubleClick) document.addEventListener('click', handleClick, true) + document.addEventListener('focusin', handleFocusIn, true) document.addEventListener('copy', handleCopy, true) listenersInstalled = true } @@ -279,6 +288,7 @@ function removeListeners() { document.removeEventListener('mouseup', handleMouseUp) document.removeEventListener('dblclick', handleDoubleClick) document.removeEventListener('click', handleClick, true) + document.removeEventListener('focusin', handleFocusIn, true) document.removeEventListener('copy', handleCopy, true) listenersInstalled = false }