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: