diff --git a/src/BizHawk.Client.EmuHawk/Input/Input.cs b/src/BizHawk.Client.EmuHawk/Input/Input.cs index aa0a5e01f2..ab539a7d2c 100644 --- a/src/BizHawk.Client.EmuHawk/Input/Input.cs +++ b/src/BizHawk.Client.EmuHawk/Input/Input.cs @@ -106,22 +106,28 @@ namespace BizHawk.Client.EmuHawk Alt = 262144 } - private static readonly Lazy _instance = new Lazy(() => new Input()); + private static readonly Lazy _instance = new Lazy(() => new Input(() => GlobalWin.Config)); public static Input Instance => _instance.Value; private readonly Thread _updateThread; - public readonly HostInputAdapter Adapter = GlobalWin.Config.HostInputMethod switch - { - EHostInputMethod.OpenTK => new OpenTKInputAdapter(), - EHostInputMethod.DirectInput => new DirectInputAdapter(), - _ => throw new Exception() - }; + public readonly HostInputAdapter Adapter; - private Input() + private readonly Func _getConfigCallback; + + private Input(Func getConfigCallback) { - Adapter.UpdateConfig(GlobalWin.Config); + _getConfigCallback = getConfigCallback; + + var config = _getConfigCallback(); + Adapter = config.HostInputMethod switch + { + EHostInputMethod.OpenTK => new OpenTKInputAdapter(), + EHostInputMethod.DirectInput => new DirectInputAdapter(), + _ => throw new Exception() + }; + Adapter.UpdateConfig(config); _updateThread = new Thread(UpdateThreadProc) { IsBackground = true, @@ -377,7 +383,7 @@ namespace BizHawk.Client.EmuHawk }; while (true) { - Adapter.UpdateConfig(GlobalWin.Config); + Adapter.UpdateConfig(_getConfigCallback()); var keyEvents = Adapter.ProcessHostKeyboards(); Adapter.PreprocessHostGamepads();