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:
@@ -30,11 +30,14 @@ import SwiftUI
|
||||
/// **Only the trash side carries the confirmation host** (settled): the board side's Delete is the
|
||||
/// ordinary staged move into `.trash/` and never stands an alert, so `board` needs nothing beyond the
|
||||
/// card opener.
|
||||
enum CardFaceRole {
|
||||
/// `Sendable` because `CardFaceView.==` is nonisolated and a nonisolated context may only read a
|
||||
/// main-actor `let` of Sendable type — which is why `openCard` is typed `@MainActor` (an isolated
|
||||
/// function type is Sendable; a bare one is not, and would sink the whole enum).
|
||||
enum CardFaceRole: Sendable {
|
||||
|
||||
/// A card in a lane. Carries the board window's card opener — ⌘↩'s pointer twin
|
||||
/// (04-interactions.md ▸ Selection).
|
||||
case board(openCard: (ItemID) -> Void)
|
||||
case board(openCard: @MainActor (ItemID) -> Void)
|
||||
|
||||
/// A card in `<root>/.trash/`. Carries the window's purge-alert host, because the trash's Delete
|
||||
/// is the permanent one and "confirms exactly where the loss is real" (03 § Trash).
|
||||
|
||||
Reference in New Issue
Block a user