Hover walk: no arg1, held during a move, no fling, published mouseover (#941)

Four pointer defects: OnEnter and OnLeave set `arg1 = true`; a frame being moved or sized still ran the hover walk; the pointer leaving the window fed `f32::MIN` to a move in flight, flinging the frame off-screen; and the mouseover token read the world pick, not the published mouseover.

In 1.12.1 both scripts run through `0x702690`, which sets no arg global. While `[root+0xcfc]` holds a move or size target, the walk pumps it (`0x7655b0`) and returns before any probe (`0x766164`–`0x7661a0`); a hide clears that slot (`0x76492e`). The pump only sees real cursor events. The token resolver reads the published pair `[0xb4e2c8]` (`0x515970`).

OnEnter and OnLeave fire with no arguments, `mouse_move` pumps a move or size and returns, a hide ends it, the pointer leave has its own call, and the aura feed reads the published mouseover.

Tests bite on the parent for each.

Fixes #932
Fixes #933
Fixes #936
Fixes #938

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Sam Sung
2026-10-12 04:08:29 +07:00
committed by GitHub
co-authored by Claude Opus 5.5
parent 0fc40d3f87
commit 73623e31fa
13 changed files with 432 additions and 37 deletions
+1 -1
View File
@@ -194,7 +194,7 @@ pub(super) fn feed_ui_input(
// The OS pointer left: leave the hovered frame once, and disarm any press or drag every
// frame, since no release ends it and a stale gesture would fire on re-entry.
if hover.0.take().is_some() {
script.mouse_move(f32::MIN, f32::MIN);
script.pointer_left_hover();
}
script.pointer_left_window();
}