진행 상황: A-2~A-4 화면 이동 결함 기록

고친 곳은 플랫폼(UbisamPlatform 저장소)이고, 여기에는 무엇이 원인이었고
어떻게 확인했는지를 남긴다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
김승준 2026-09-09 09:45:10 +09:00
parent 5e667af35a
commit af27800978

View File

@ -101,9 +101,9 @@ CommunityToolkit 커맨드는 CommandManager 를 구독하지 않는데 이 둘
| 상태 | 항목 | 내용 | 확인 | | 상태 | 항목 | 내용 | 확인 |
|---|---|---|---| |---|---|---|---|
| **완료** | A-1 폴더 고르기에서 프로그램이 죽음 | 아래 따로 적음 | 왼쪽·오른쪽 10회 연속 · 파일 비교 쪽 2회 | | **완료** | A-1 폴더 고르기에서 프로그램이 죽음 | 아래 따로 적음 | 왼쪽·오른쪽 10회 연속 · 파일 비교 쪽 2회 |
| 대기 | A-2 화면 이동 시 종료·최소화 | | | | **완료** | A-2 화면 이동 시 종료·최소화 | 아래 A-2~A-4 에 함께 적음 | 21회 연속 이동 (누름 60·250·600ms) |
| 대기 | A-3 파일 비교에서 화면 이동이 원래 모니터로 복귀 | | | | **완료** | A-3 파일 비교에서 화면 이동이 원래 모니터로 복귀 | A-2 와 같은 원인 | 파일 비교 탭에서 6회 왕복 |
| 대기 | A-4 화면 이동 시 잠금 팝업 | | | | **완료** | A-4 화면 이동 시 잠금 팝업 | A-2 와 같은 원인 | 팝업 0회 · 잠금/바탕화면/종료 버튼은 그대로 동작 |
| 대기 | A-5 Git 저장소 최상위를 고를 수 없음 | | | | 대기 | A-5 Git 저장소 최상위를 고를 수 없음 | | |
### B. 3-Way 화면 ### B. 3-Way 화면
@ -136,6 +136,48 @@ CommunityToolkit 커맨드는 CommandManager 를 구독하지 않는데 이 둘
--- ---
### A-2 · A-3 · A-4. 화면 이동 결함 세 가지 — **완료** (2026-09-09)
세 가지가 아니라 <b>하나</b>였다.
증상은 셋으로 보였다. 화면 이동을 눌렀는데 창이 최소화되거나, 잠금 창이 뜨거나,
파일 비교 화면에서는 옮겨졌다가 원래 모니터로 되돌아왔다. 셋 다 같은 자리에서 나온다.
스택을 찍어 보니 이렇게 흘렀다.
```
ListBox.OnMouseMove
→ ItemsControl.DoAutoScroll
→ ListBox.FocusItem
→ ListBox.MakeSingleSelection ← 여기서 옆 항목이 선택된다
→ NavList_SelectionChanged ← 그 항목의 동작이 실행된다
```
**하단 탭 바는 ListBox 다.** ListBox 는 <b>누르는 순간</b> 항목을 고르고 마우스를 잡는다
(끌어서 여러 개 고르기 위해서다). 손을 떼기 전에 창이 다른 모니터로 넘어가면 커서는
목록 밖에 남게 되고, ListBox 는 그것을 "끌어서 화면 밖으로 나갔다"고 보고 <b>옆 항목을
대신 고른다.</b> 하단 탭 바의 오른쪽 끝은 `화면 잠금 · 화면 이동 · 바탕화면 · 종료` 순으로
붙어 있어서, 옆 항목이 무엇이냐에 따라 잠금 창이 뜨거나(A-4) 최소화되거나(A-2)
방금 옮긴 창이 도로 넘어온다(A-3). <b>어느 쪽으로 튈지 그때그때 달랐던 이유</b>가 이것이다.
전에 한 번 손을 댄 자리였는데, 그때는 실행을 `DispatcherPriority.Background` 로 미루는
방식이었다. **그것으로는 막히지 않는다** — 사람이 버튼을 누르고 있는 시간(보통 100ms 이상)이
그 지연보다 길기 때문이다. 누르고 있는 동안 창이 움직이면 똑같이 재현된다.
**고친 것**: 동작형 항목(화면 이동·바탕화면·화면 잠금·종료)은 탭이 아니라 <b>버튼</b>이다.
마우스로 누를 때는 ListBox 의 선택 경로를 아예 타지 않게 `PreviewMouseLeftButtonDown` 에서
끊고, 실행은 <b>손을 뗄 때</b> 한다. 창이 움직이는 순간에 눌린 버튼이 없으니 끌어서 스크롤이
일어날 여지가 없다. 누른 뒤 밖으로 끌고 나가 떼면 실행되지 않는 것도 버튼과 같은 규칙이다.
키보드로 항목을 옮겨 고르는 경로는 그대로 두었다.
**확인**: 두 모니터(2560×1600@150% ↔ 1920×1080@100%) 사이를 <b>21회 연속</b> 왕복.
버튼을 누르고 있는 시간을 60ms · 250ms · 600ms 로 나눠 각각 7회씩 했고 실패 0건.
파일 비교 화면에서도 6회 왕복 확인. 바탕화면·화면 잠금·종료 세 버튼도 그대로 동작한다.
**플랫폼 변경이라 모든 소비 프로그램에 적용된다.**
---
### A-1. 폴더 고르기에서 프로그램이 죽던 원인 — **완료** (2026-09-09) ### A-1. 폴더 고르기에서 프로그램이 죽던 원인 — **완료** (2026-09-09)
"왼쪽 폴더..." 를 누르면 창이 하얗게 굳었다가 그대로 사라졌다. 윈도우 이벤트 로그에 남은 것: "왼쪽 폴더..." 를 누르면 창이 하얗게 굳었다가 그대로 사라졌다. 윈도우 이벤트 로그에 남은 것: