// Copyright (c) 2026 Storm Dragon // Authors: Storm Dragon, Angus Kola // SPDX-License-Identifier: GPL-3.0-or-later package input import "time" // The router owns this sequence across fully released chords and browse grab // updates. Another key/chord, timeout, or the final press retires it. Held-key // repeats never reach this helper. Reset only clears held keys, as for time/date. func (router *CommandRouter) review_press(command Command, chord CommandChord) Command { if command != ReviewCurrentCharacter && command != ReviewCurrentWord { router.lastReviewPress = time.Time{} return command } now := router.now() if chord == router.lastReviewChord && !router.lastReviewPress.IsZero() && now.Sub(router.lastReviewPress) >= 0 && now.Sub(router.lastReviewPress) <= 500*time.Millisecond { router.reviewPresses++ } else { router.reviewPresses = 1 } router.lastReviewChord, router.lastReviewPress = chord, now if command == ReviewCurrentCharacter && router.reviewPresses == 2 { router.lastReviewPress = time.Time{} return ReviewPhoneticCharacter } if command == ReviewCurrentWord { switch router.reviewPresses { case 2: return ReviewSpellWord case 3: router.lastReviewPress = time.Time{} return ReviewPhoneticWord } } return command }