diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index 4694eddeb5..eeb7df7791 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -1178,16 +1178,17 @@ namespace BizHawk.Client.EmuHawk // zero 09-sep-2012 - all input is eligible for controller input. not sure why the above was done. // maybe because it doesn't make sense to me to bind hotkeys and controller inputs to the same keystrokes - bool handled = false; switch (Config.InputHotkeyOverrideOptions) { default: case 0: // Both allowed + { finalHostController.Receive(ie); + var handled = false; if (ie.EventType is InputEventType.Press) { - handled = triggers.Aggregate(false, (current, trigger) => current | CheckHotkey(trigger)); + handled = triggers.Aggregate(handled, (current, trigger) => current | CheckHotkey(trigger)); } // hotkeys which aren't handled as actions get coalesced as pollable virtual client buttons @@ -1197,11 +1198,14 @@ namespace BizHawk.Client.EmuHawk } break; + } case 1: // Input overrides Hotkeys + { finalHostController.Receive(ie); // don't check hotkeys when any of the pressed keys are input if (!ie.LogicalButton.ToString().Split('+').Any(activeControllerHasBinding)) { + var handled = false; if (ie.EventType is InputEventType.Press) { handled = triggers.Aggregate(false, (current, trigger) => current | CheckHotkey(trigger)); @@ -1215,7 +1219,10 @@ namespace BizHawk.Client.EmuHawk } break; + } case 2: // Hotkeys override Input + { + var handled = false; if (ie.EventType is InputEventType.Press) { handled = triggers.Aggregate(false, (current, trigger) => current | CheckHotkey(trigger)); @@ -1231,6 +1238,7 @@ namespace BizHawk.Client.EmuHawk } break; + } } } // foreach event