Files

32 lines
921 B
Go

// Copyright (c) 2026 Storm Dragon
// Authors: Storm Dragon, Angus Kola
// SPDX-License-Identifier: GPL-3.0-or-later
package input
// RepeatTracker is owned by the native input producer. Classic X11 repeats
// release and press with the same timestamp; detectable autorepeat emits
// another press while the key remains down. Neither is a fresh physical press.
type RepeatTracker struct {
held [256]bool
releasedTimestamp [256]uint32
}
func (tracker *RepeatTracker) Observe(event Event) bool {
code := event.Keycode
if !event.Pressed {
tracker.held[code] = false
tracker.releasedTimestamp[code] = event.Timestamp
return false
}
repeated := tracker.held[code] || event.Timestamp != 0 &&
tracker.releasedTimestamp[code] == event.Timestamp
tracker.held[code] = true
tracker.releasedTimestamp[code] = 0
return repeated
}
func (tracker *RepeatTracker) Reset() {
*tracker = RepeatTracker{}
}