diff --git a/src/BizHawk.Client.EmuHawk/Input/Input.cs b/src/BizHawk.Client.EmuHawk/Input/Input.cs index ab539a7d2c..847f6ea68f 100644 --- a/src/BizHawk.Client.EmuHawk/Input/Input.cs +++ b/src/BizHawk.Client.EmuHawk/Input/Input.cs @@ -106,9 +106,7 @@ namespace BizHawk.Client.EmuHawk Alt = 262144 } - private static readonly Lazy _instance = new Lazy(() => new Input(() => GlobalWin.Config)); - - public static Input Instance => _instance.Value; + public static Input Instance; private readonly Thread _updateThread; @@ -116,9 +114,10 @@ namespace BizHawk.Client.EmuHawk private readonly Func _getConfigCallback; - private Input(Func getConfigCallback) + internal Input(IntPtr mainFormHandle, Func getConfigCallback, Func mainFormInputAllowedCallback) { _getConfigCallback = getConfigCallback; + MainFormInputAllowedCallback = mainFormInputAllowedCallback; var config = _getConfigCallback(); Adapter = config.HostInputMethod switch @@ -128,6 +127,7 @@ namespace BizHawk.Client.EmuHawk _ => throw new Exception() }; Adapter.UpdateConfig(config); + Adapter.FirstInitAll(mainFormHandle); _updateThread = new Thread(UpdateThreadProc) { IsBackground = true, @@ -327,7 +327,7 @@ namespace BizHawk.Client.EmuHawk /// /// Controls whether MainForm generates input events. should be turned off for most modal dialogs /// - public Func MainFormInputAllowedCallback; + public readonly Func MainFormInputAllowedCallback; private void UpdateThreadProc() { diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index 39673f7c0b..167d2ee882 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -392,20 +392,23 @@ namespace BizHawk.Client.EmuHawk Sound?.StartSound(); }; - Input.Instance.MainFormInputAllowedCallback = yieldAlt => ActiveForm switch - { - null => Config.AcceptBackgroundInput // none of our forms are focused, check the background input config - ? Config.AcceptBackgroundInputControllerOnly - ? Input.AllowInput.OnlyController - : Input.AllowInput.All - : Input.AllowInput.None, - TAStudio _ when yieldAlt => Input.AllowInput.None, - FormBase f when !f.BlocksInputWhenFocused => Input.AllowInput.All, - ControllerConfig _ => Input.AllowInput.All, - HotkeyConfig _ => Input.AllowInput.All, - _ => Input.AllowInput.None - }; - Input.Instance.Adapter.FirstInitAll(Handle); + Input.Instance = new Input( + Handle, + () => Config, + yieldAlt => ActiveForm switch + { + null => Config.AcceptBackgroundInput // none of our forms are focused, check the background input config + ? Config.AcceptBackgroundInputControllerOnly + ? Input.AllowInput.OnlyController + : Input.AllowInput.All + : Input.AllowInput.None, + TAStudio _ when yieldAlt => Input.AllowInput.None, + FormBase f when !f.BlocksInputWhenFocused => Input.AllowInput.All, + ControllerConfig _ => Input.AllowInput.All, + HotkeyConfig _ => Input.AllowInput.All, + _ => Input.AllowInput.None + } + ); InitControls(); InputManager.ActiveController = new Controller(NullController.Instance.Definition); diff --git a/src/BizHawk.Client.EmuHawk/Program.cs b/src/BizHawk.Client.EmuHawk/Program.cs index 5118ff330f..5844784ef5 100644 --- a/src/BizHawk.Client.EmuHawk/Program.cs +++ b/src/BizHawk.Client.EmuHawk/Program.cs @@ -255,7 +255,7 @@ namespace BizHawk.Client.EmuHawk GlobalWin.Sound?.Dispose(); GlobalWin.Sound = null; workingGL.Dispose(); - Input.Instance.Adapter.DeInitAll(); + Input.Instance?.Adapter?.DeInitAll(); } //cleanup: