v0.8.3-alpha — the remote pointer actually shows up
Fixed: the remote pointer never changed shape
Hovering a window edge in an RDP session showed no resize arrows, text no I-beam,
dragging in Explorer no feedback — and dragging itself was unreliable. Support for
drawing the remote pointer shipped in 0.8.1, but it never reached the screen.
Instrumenting the RDP side showed the shapes were arriving and being converted
correctly all along: 65 distinct cursors and 403 set calls in a single session. The
problem was on the AppKit side. The only route the cursor had was the cursor-rect
machinery, and SwiftUI resets those underneath a view that redraws every frame, so
each cursor was installed and replaced by the plain arrow again immediately. The
view's tracking area now carries .cursorUpdate, which makes AppKit ask it
directly.
Dragging was collateral damage from the same code: the cursor rects were being
rebuilt on every shape change, hundreds of times, including in the middle of a
drag. That call is gone.
The same shape is also no longer rebuilt over and over — the RDP layer skips a
repeat of the pointer it last sent, which is what turns those 403 calls into 65.
Fixed: the cursor was wrong until you moved the mouse
Even once shapes arrived, a session that had just connected — or a tab brought to
the front — kept the plain arrow until the pointer was nudged.
AppKit asks about the cursor when the pointer crosses into a tracking area, and
never for one already sitting inside it. This view rebuilds its tracking area on
every layout, which is every frame, so a motionless pointer was never asked about
again. The cursor is now applied directly whenever that area is rebuilt with the
pointer inside it.