diff --git a/src/Main_Class.ahk b/src/Main_Class.ahk index 81c2bb0..780ebb9 100644 --- a/src/Main_Class.ahk +++ b/src/Main_Class.ahk @@ -43,6 +43,7 @@ AutoForwardVisited := Map() ; Map of group index => array of visited window names AutoForwardToggleMode := Map() ; Map of group index => toggle mode setting AutoForwardProcessedWindow := 0 ; Track which window hwnd already got its input processed + AutoForwardToggleVKCodes := [] ; Array of VK codes for toggle hotkeys __New() { @@ -341,13 +342,27 @@ ; Register separate AutoForwardToggleHotkey if set if (v.Has("AutoForwardToggleHotkey") && v["AutoForwardToggleHotkey"] != "") { + toggleKey := v["AutoForwardToggleHotkey"] + vkCode := GetKeyVK(toggleKey) + if (vkCode) { + found := false + for code in This.AutoForwardToggleVKCodes { + if (code = vkCode) { + found := true + break + } + } + if (!found) { + This.AutoForwardToggleVKCodes.Push(vkCode) + } + } if(This.Global_Hotkeys) { HotIf ObjBindMethod(This, "OnWinExist", v["Characters"]) } else { HotIf ObjBindMethod(This, "OnWinActive", v["Characters"]) } try { - Hotkey(v["AutoForwardToggleHotkey"], ObjBindMethod(This, "ToggleAutoForward", groupIdx, v["Characters"]), "P1") + Hotkey(toggleKey, ObjBindMethod(This, "ToggleAutoForward", groupIdx, v["Characters"]), "P1") } catch ValueError as e { MsgBox(e.Message ": --> " e.Extra " <-- in Profile Settings - " This.LastUsedProfile " - Hotkey Groups - " k " - Auto-Forward Toggle Hotkey" ) @@ -369,18 +384,14 @@ This.AutoForwardEnabled[groupIdx] := false This.AutoForwardVisited[groupIdx] := [] } else { - ; Enable with delay to allow keyup to process first - SetTimer(ObjBindMethod(This, "EnableAutoForward", groupIdx), -100) - } - } - - EnableAutoForward(groupIdx) { - This.AutoForwardEnabled[groupIdx] := true - This.AutoForwardVisited[groupIdx] := [] - This.AutoForwardProcessedWindow := 0 - try { - ActiveTitle := This.CleanTitle(WinGetTitle("A")) - This.AutoForwardVisited[groupIdx].Push(ActiveTitle) + ; Enable and mark current window as first visited + This.AutoForwardEnabled[groupIdx] := true + This.AutoForwardVisited[groupIdx] := [] + This.AutoForwardProcessedWindow := 0 ; Reset so current window can receive input + try { + ActiveTitle := This.CleanTitle(WinGetTitle("A")) + This.AutoForwardVisited[groupIdx].Push(ActiveTitle) + } } } @@ -427,6 +438,13 @@ return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "Ptr", wParam, "Ptr", lParam) } + ; Ignore toggle hotkeys + for code in This.AutoForwardToggleVKCodes { + if (code = vkCode) { + return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "Ptr", wParam, "Ptr", lParam) + } + } + if (This.IsAutoForwardActive()) { try { currentWindow := WinGetID("A")