Tell a tap on a photograph from a hand going past
A brush across the grid opened whichever photograph was under it. Travel was already answered — the Flickable claims the pointer and the press is cancelled — but a contact that neither travels nor lasts reaches a TouchArea as an ordinary press and release, and it was landing the user in develop. So a finger now has to stay down for `TAP_MIN_MS` before letting go counts as opening anything. That is the floor under a tap where the 450 ms `HOLD_DELAY_MS` is the ceiling: below is a graze, between is a tap, above is a hold that starts a selection. One scale, three gestures. Only a finger is held to it. A mouse click is a discrete decision made by a button and is routinely over in thirty milliseconds, so `cell-pressed` now reports whether a finger did it — the same finger-id convention the pinch arbitration beside it already uses — and the dwell applies to touch alone. A graze still *selects* the cell it landed on, because the press already did that. That is the right failure mode: something visible and reversible rather than a silent nothing, and rather than develop. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1215,7 +1215,15 @@ export component LibraryGrid inherits Rectangle {
|
||||
// also why there is no badge position to compute here any more.
|
||||
/// Modifier state at press time, so Rust can decide replace / add / extend
|
||||
/// without the .slint file encoding the selection policy.
|
||||
callback cell-pressed(int, bool, bool);
|
||||
///
|
||||
/// The last argument is **whether a finger did it**, and it is here because
|
||||
/// a finger and a pointer need different rules about what counts as a tap.
|
||||
/// A mouse click is over in tens of milliseconds and means it; a hand
|
||||
/// brushing a tablet on its way somewhere else produces exactly the same
|
||||
/// press-and-release, and used to land the user in develop. Rust holds the
|
||||
/// rule (`collections_ui::TAP_MIN_MS`) beside the hold timer it has to sit
|
||||
/// between — this file only reports which kind of contact it was.
|
||||
callback cell-pressed(int, bool, bool, bool);
|
||||
/// TRACES: FR-UI-2 | FR-UI-4
|
||||
/// The press on a cell ended — lifted, or taken away by the Flickable when
|
||||
/// the finger travelled. Cancels the long-press timer that would otherwise
|
||||
@@ -3011,6 +3019,10 @@ export component LibraryGrid inherits Rectangle {
|
||||
i,
|
||||
ev.modifiers.control || root.select-mode,
|
||||
ev.modifiers.shift || root.ranging,
|
||||
// Finger id 0 is the mouse — the same
|
||||
// convention the pinch arbitration a
|
||||
// few lines up already relies on.
|
||||
ev.touch-finger-id != 0,
|
||||
);
|
||||
// One shot. The range was between two taps
|
||||
// and the second has landed; left armed, it
|
||||
|
||||
Reference in New Issue
Block a user