The empty provider was never load-bearing — the dragless layer frees the rubber band
Measured on real events 2026-08-07, correcting the 2026-08-06 hosted finding: a bare count-1 tap on LaneView's empty-space layer fires in ~1-3 ms with no drag source at all — the hold that made the empty .onDrag look necessary was the sterile NSApp.postEvent stream over-disambiguating. And the provider was actively harmful: even an empty drag source claims the mouse-drag at threshold, starving the marquee's simultaneous DragGesture after one sample — the band froze and the mouseUp never arrived. The layer goes dragless; drags from empty space belong wholly to MarqueeControl. PointerClick's and the layer's comments retell the corrected story. Alongside: openCard is typed @MainActor throughout, which makes the closure Sendable and lets CardFaceRole carry it under CardFaceView's nonisolated ==. Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
@@ -260,7 +260,7 @@ struct BoardWindowHost: View {
|
||||
/// Opens a card's window. `openWindow(value:)` with a ref that already has a window focuses it,
|
||||
/// so "at most one card window per card (reopen focuses)" needs no bookkeeping here
|
||||
/// (02-architecture.md § Windows).
|
||||
private var openCard: (ItemID) -> Void {
|
||||
private var openCard: @MainActor (ItemID) -> Void {
|
||||
{ cardID in
|
||||
openWindow(id: WindowID.card, value: CardWindowRef(board: ref, cardID: cardID))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user