Compare commits

..

5 Commits

Author SHA1 Message Date
Marc Brooks 4883fb615e
Merge 9fafcfb94c into 8f4081a5b1 2025-09-26 17:50:19 +00:00
Marc Brooks 9fafcfb94c
Use Once instead of init() 2025-09-26 12:47:54 -05:00
Marc Brooks faa35a4dca
Run paste/macros in background on their own queue.
Also returns a token for cancellation.
Fixed error in length check for macro key state.
Removed redundant clear operation.
2025-09-26 12:47:54 -05:00
Marc Brooks f54b6283d6
Move the HID keyboard descriptor LED state
Seems to interfere with boot mode
2025-09-26 12:47:54 -05:00
Marc Brooks 262df47f7d
Reduce traffic during pastes
Suspend KeyDownMessages while processing a macro.
Make sure we don't emit huge debugging traces.
Allow 30 seconds for RPC to finish (not ideal)
Reduced default delay between keys (and allow as low as 0)
2025-09-26 12:47:53 -05:00
1 changed files with 11 additions and 2 deletions

View File

@ -1078,15 +1078,20 @@ type RunningMacro struct {
var (
keyboardMacroCancelMap map[uuid.UUID]RunningMacro
keyboardMacroLock sync.Mutex
keyboardMacroOnce sync.Once
)
func init() {
keyboardMacroCancelMap = make(map[uuid.UUID]RunningMacro)
func getKeyboardMacroCancelMap() map[uuid.UUID]RunningMacro {
keyboardMacroOnce.Do(func() {
keyboardMacroCancelMap = make(map[uuid.UUID]RunningMacro)
})
return keyboardMacroCancelMap
}
func addKeyboardMacro(isPaste bool, cancel context.CancelFunc) uuid.UUID {
keyboardMacroLock.Lock()
defer keyboardMacroLock.Unlock()
keyboardMacroCancelMap := getKeyboardMacroCancelMap()
token := uuid.New() // Generate a unique token
keyboardMacroCancelMap[token] = RunningMacro{
@ -1099,6 +1104,7 @@ func addKeyboardMacro(isPaste bool, cancel context.CancelFunc) uuid.UUID {
func removeRunningKeyboardMacro(token uuid.UUID) {
keyboardMacroLock.Lock()
defer keyboardMacroLock.Unlock()
keyboardMacroCancelMap := getKeyboardMacroCancelMap()
delete(keyboardMacroCancelMap, token)
}
@ -1106,6 +1112,7 @@ func removeRunningKeyboardMacro(token uuid.UUID) {
func cancelRunningKeyboardMacro(token uuid.UUID) {
keyboardMacroLock.Lock()
defer keyboardMacroLock.Unlock()
keyboardMacroCancelMap := getKeyboardMacroCancelMap()
if runningMacro, exists := keyboardMacroCancelMap[token]; exists {
runningMacro.cancel()
@ -1119,6 +1126,7 @@ func cancelRunningKeyboardMacro(token uuid.UUID) {
func cancelAllRunningKeyboardMacros() {
keyboardMacroLock.Lock()
defer keyboardMacroLock.Unlock()
keyboardMacroCancelMap := getKeyboardMacroCancelMap()
for token, runningMacro := range keyboardMacroCancelMap {
runningMacro.cancel()
@ -1131,6 +1139,7 @@ func reportRunningMacrosState() {
if currentSession != nil {
keyboardMacroLock.Lock()
defer keyboardMacroLock.Unlock()
keyboardMacroCancelMap := getKeyboardMacroCancelMap()
isPaste := false
anyRunning := false