Skip to content

fix: 표 셀 내부 드래그 선택 시 셀 컨텍스트 이탈 방지 (#669)#795

Closed
oksure wants to merge 1 commit into
edwardkim:develfrom
oksure:contrib/table-cell-drag-select
Closed

fix: 표 셀 내부 드래그 선택 시 셀 컨텍스트 이탈 방지 (#669)#795
oksure wants to merge 1 commit into
edwardkim:develfrom
oksure:contrib/table-cell-drag-select

Conversation

@oksure

@oksure oksure commented May 11, 2026

Copy link
Copy Markdown
Contributor

문제

표 셀 내부에서 텍스트를 드래그 선택하면 선택이 보이지 않고 커서만 이동하는 현상.

원인 분석

드래그 중 hitTest가 셀 내부의 빈 영역(텍스트 라인 외부)에서 본문 레벨 위치를 반환하면:

  • anchor: 셀 내부 (parentParaIndex 있음)
  • focus: 본문 (parentParaIndex 없음)

updateSelection()에서 이 조합은 "셀↔본문 혼합 선택"으로 판별되어 selectionRenderer.clear()가 호출됨. 결과적으로 선택 하이라이트가 렌더링되지 않음.

수정

드래그 핸들러(onMouseMove)에서 anchor가 셀 내부일 때, hitTest 결과가 같은 셀 컨텍스트(parentParaIndex/controlIndex/cellIndex 일치)가 아니면 커서 이동을 건너뜀.

이로써 셀 내부 드래그 시 커서가 항상 같은 셀 내에 머물러 선택 렌더링이 정상 동작함.

테스트

  • TypeScript 타입 검사 통과
  • cargo test + cargo clippy 통과

감사합니다.

드래그 중 hitTest 결과가 anchor와 다른 셀(또는 본문)을 가리키면
커서 이동을 무시하여 셀 내부 선택이 유지되도록 수정.

원인: 셀 내부의 빈 영역(텍스트 라인 아래)을 드래그하면
hitTest가 본문 레벨 위치를 반환하여 셀↔본문 혼합 선택이
발생하고, updateSelection에서 렌더링이 생략되는 문제.
Copilot AI review requested due to automatic review settings May 11, 2026 00:52

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

표 셀 내부에서 드래그 선택 중 hitTest가 셀 밖(본문 레벨) 위치를 반환해 선택 하이라이트가 사라지는 문제를 방지하기 위해, 드래그 중 커서 이동을 “anchor와 동일한 셀 컨텍스트”로 제한합니다.

Changes:

  • 드래그 중(onMouseMove) selection anchor가 셀 컨텍스트를 가지는 경우, hitTest 결과가 동일한 셀 컨텍스트가 아니면 커서 이동을 무시하도록 가드 로직 추가
  • 셀↔본문(또는 다른 셀)로 인한 “혼합 선택”이 생성되지 않게 하여 선택 렌더링이 지속되도록 동작 보정

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

edwardkim added a commit that referenced this pull request May 11, 2026
표 셀 내부 텍스트 드래그 선택 시 선택 하이라이트 미렌더링 결함 정정 (Issue #669).

본질: 드래그 중 hitTest 가 셀 내부 빈 영역에서 본문 레벨 위치 반환 → anchor(셀) ↔ focus(본문) 혼합 → updateSelection() 영역 영역 selectionRenderer.clear() 호출 → 선택 미렌더링.

정정 (input-handler.ts:1014 updateTextSelectionDragFromPointer 래퍼 안 +14):
- anchor 셀 내부일 때 hit 가 같은 셀 컨텍스트 (parentParaIndex/controlIndex/cellIndex 모두 일치) 가 아니면 cursor.moveTo 건너뜀
- 셀 내 선택 유지

본 환경 충돌 수동 해결: HEAD (devel) 영역 영역 PR #718 (Task #661) updateTextSelectionDragFromPointer 래퍼 사용 영역 영역 incoming 의 onMouseMove 영역 영역 직접 hit + moveTo 영역 영역 비대칭. 본 환경 영역 영역 셀 가드 영역 영역 input-handler.ts 의 래퍼 안 적용 (PR #718 정합성 보존).

검증:
- tsc --noEmit ✅
- cargo test --release ALL GREEN
- 광범위 sweep 170/170 same
- WASM 4.68 MB 재빌드
- 작업지시자 웹 에디터 시각 검증 ✅ 통과

closes #669
@edwardkim

Copy link
Copy Markdown
Owner

@oksure 검토 완료했습니다. 감사합니다.

처리 결과

Merge commit: 58176ed3 (devel)

본질

표 셀 내부 텍스트 드래그 선택 시 hitTest 영역 영역 셀 빈 영역 영역 본문 레벨 반환 → anchor(셀) ↔ focus(본문) 혼합 → selectionRenderer.clear 호출 → 선택 미렌더링. 본 정정 영역 영역 anchor 셀 내부 영역 영역 hit 가 같은 셀 컨텍스트 아니면 cursor.moveTo 건너뜀 (셀 내 선택 유지).

본 환경 충돌 수동 해결

HEAD (devel) 영역 영역 PR #718 (Task #661) updateTextSelectionDragFromPointer 래퍼 사용 영역 영역 incoming 의 onMouseMove 직접 hit + moveTo 영역 영역 비대칭. 본 환경 영역 영역 셀 가드 영역 영역 input-handler.ts 래퍼 안 적용 영역 영역 PR #718 정합성 보존.

검증

  • TypeScript / cargo test ALL GREEN
  • 광범위 sweep 170/170 same
  • WASM 4.68 MB 재빌드
  • 작업지시자 웹 에디터 시각 검증 통과

closes #669.

5/11 사이클 5번째 PR — 수고하셨습니다.

@edwardkim

Copy link
Copy Markdown
Owner

Merged. Merge commit: 58176ed

@edwardkim edwardkim closed this May 11, 2026
edwardkim added a commit that referenced this pull request May 11, 2026
PR #795 (closes #669) — 표 셀 내부 드래그 선택 시 셀 컨텍스트 이탈 방지.
충돌 수동 해결: 셀 가드 영역 input-handler.ts 의 updateTextSelectionDragFromPointer 래퍼 안 적용 (PR #718 정합성 보존).

Merge commit: 58176ed
Cherry-pick: 2efe20c
@edwardkim edwardkim mentioned this pull request May 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants