Skip to content

fix: 오버레이 창 고정/항상 위 토글 시 오버레이가 사라지는 버그#80

Open
eun-yeon wants to merge 1 commit into
masterfrom
fix/overlay-visibility-desync
Open

fix: 오버레이 창 고정/항상 위 토글 시 오버레이가 사라지는 버그#80
eun-yeon wants to merge 1 commit into
masterfrom
fix/overlay-visibility-desync

Conversation

@eun-yeon

Copy link
Copy Markdown
Member

개요

설정에서 오버레이 창 고정이나 항상 위에 표시를 토글하면 오버레이 창이 꺼져버리는 버그 수정

Windows에서 오버레이 show/hide를 raw ShowWindow로 처리하고 있어서 tao 내부 VISIBLE 플래그가 실제 창 상태와 어긋나는 중
tao는 윈도우 플래그가 하나라도 바뀌면 내부 상태 기준으로 창 상태를 통째로 재적용하는데(apply_diff), 이때 내부 VISIBLE이 false면 무조건 SW_HIDE를 호출하는 문제가 있어요.
그래서 "숨김으로 생성됐다가 raw로 표시된" 창(= 앱 시작 시 오버레이가 꺼져 있다가 나중에 켠 세션)에서 set_ignore_cursor_events/set_always_on_top이 불리는 순간 창이 증발
앱 시작부터 오버레이가 켜져 있으면 플래그가 일치해서 멀쩡한 거였고 글로벌 단축키로 토글해도 동일하게 발생하는 문제였습니다.

같은 메커니즘으로 raw SetWindowLongW로 적용한 WS_EX_NOACTIVATE도 tao가 모르는 상태라 스타일 재적용 때 소실되고 토글 한 번 후부터 오버레이가 클릭 시 포커스를 뺏는 잠재 버그도 같이 있었습니다.

raw ShowWindow 우회가 들어온 92109f1(1.3.0)부터 있던 문제

변경 내용

백엔드

  • show_overlay_window: raw ShowWindow(SW_SHOWNOACTIVATE) 직후 window.show() 호출로 tao 내부 VISIBLE 플래그 동기화
  • hide_overlay_window: raw SW_HIDE → tao window.hide()로 교체 (숨김은 포커스 우려가 없어 우회 자체가 불필요)
  • raw set_window_no_activate 제거 → window.set_focusable(false)로 대체 — tao가 FOCUSABLE 플래그로 WS_EX_NOACTIVATE를 추적해서 스타일 재적용에도 보존
  • 오버레이 빌더에 .focused(false) 추가 tao의 첫 표시가 SW_SHOWNOACTIVATE로 처리되도록 변경

macOS는 원래 tao API 경로를 쓰고 있어서 변경 안 했어용

테스트

  • 오버레이를 끈 상태로 앱 시작 → 오버레이 켜기 → 창 고정/항상 위 토글 시 오버레이 유지 (기존 100% 재현 경로)
  • 토글 후 오버레이 클릭 시 포커스 미탈취 (NOACTIVATE 보존)
  • 오버레이 숨김/재표시 반복, 글로벌 단축키 토글 회귀 없음
  • cargo check / cargo clippy / cargo fmt 통과

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.

1 participant