diff --git a/src/BizHawk.Client.EmuHawk/Api/ApiManager.cs b/src/BizHawk.Client.EmuHawk/Api/ApiManager.cs index ba8a81bf72..649b2b2fb4 100644 --- a/src/BizHawk.Client.EmuHawk/Api/ApiManager.cs +++ b/src/BizHawk.Client.EmuHawk/Api/ApiManager.cs @@ -21,7 +21,10 @@ namespace BizHawk.Client.EmuHawk private static ApiContainer? _luaContainer; - private static ApiContainer Register(IEmulatorServiceProvider serviceProvider, Action logCallback) + private static ApiContainer Register( + MainForm mainForm, + IEmulatorServiceProvider serviceProvider, + Action logCallback) { var libDict = new Dictionary(); foreach (var api in Assembly.GetAssembly(typeof(ApiSubsetContainer)).GetTypes() @@ -30,7 +33,7 @@ namespace BizHawk.Client.EmuHawk && typeof(IExternalApi).IsAssignableFrom(t) && ServiceInjector.IsAvailable(serviceProvider, t))) { - var instance = api.GetConstructor(CtorParamTypesA)?.Invoke(new object[] { logCallback, GlobalWin.DisplayManager, GlobalWin.InputManager, GlobalWin.MainForm }) + var instance = api.GetConstructor(CtorParamTypesA)?.Invoke(new object[] { logCallback, GlobalWin.DisplayManager, GlobalWin.InputManager, mainForm }) ?? api.GetConstructor(CtorParamTypesB)?.Invoke(new object[] { logCallback }) ?? Activator.CreateInstance(api); ServiceInjector.UpdateServices(serviceProvider, instance); @@ -42,10 +45,10 @@ namespace BizHawk.Client.EmuHawk return new ApiContainer(libDict); } - public static IExternalApiProvider Restart(IEmulatorServiceProvider newServiceProvider) - => new BasicApiProvider(_container = Register(newServiceProvider, Console.WriteLine)); + public static IExternalApiProvider Restart(MainForm mainForm, IEmulatorServiceProvider newServiceProvider) + => new BasicApiProvider(_container = Register(mainForm, newServiceProvider, Console.WriteLine)); - public static ApiContainer RestartLua(IEmulatorServiceProvider newServiceProvider, Action logCallback) - => _luaContainer = Register(newServiceProvider, logCallback); + public static ApiContainer RestartLua(MainForm mainForm, IEmulatorServiceProvider newServiceProvider, Action logCallback) + => _luaContainer = Register(mainForm, newServiceProvider, logCallback); } } diff --git a/src/BizHawk.Client.EmuHawk/GlobalWin.cs b/src/BizHawk.Client.EmuHawk/GlobalWin.cs index e362bb9d83..37200169eb 100644 --- a/src/BizHawk.Client.EmuHawk/GlobalWin.cs +++ b/src/BizHawk.Client.EmuHawk/GlobalWin.cs @@ -8,7 +8,6 @@ namespace BizHawk.Client.EmuHawk { public static class GlobalWin { - public static MainForm MainForm; public static ToolManager Tools; public static IEmulator Emulator { get; set; } diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index 2dc759008b..646bb4a872 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -276,7 +276,6 @@ namespace BizHawk.Client.EmuHawk public MainForm(string[] args) { - GlobalWin.MainForm = this; GlobalWin.ClientApi = new EmuClientApi(Config, DisplayManager, Emulator, Game, InputManager, this); //do this threaded stuff early so it has plenty of time to run in background diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs index ab29342839..cf15c6b9b4 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs @@ -206,7 +206,7 @@ namespace BizHawk.Client.EmuHawk } var currentScripts = LuaImp?.ScriptList; // Temp fix for now - LuaImp = OSTailoredCode.IsUnixHost ? (LuaLibraries) new UnixLuaLibraries() : new Win32LuaLibraries(Emulator.ServiceProvider, MainForm); + LuaImp = OSTailoredCode.IsUnixHost ? (LuaLibraries) new UnixLuaLibraries() : new Win32LuaLibraries(MainForm, Emulator.ServiceProvider); LuaImp.ScriptList.AddRange(currentScripts ?? Enumerable.Empty()); InputBox.AutoCompleteCustomSource.AddRange(LuaImp.Docs.Select(a => $"{a.Library}.{a.Name}").ToArray()); diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs index 714f44d381..79deb0e967 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs @@ -14,18 +14,15 @@ namespace BizHawk.Client.EmuHawk { public class Win32LuaLibraries : LuaLibraries { - private readonly MainForm _mainForm; public Win32LuaLibraries() { // if (NLua.Lua.WhichLua == "NLua") _lua["keepalives"] = _lua.NewTable(); } - public Win32LuaLibraries(IEmulatorServiceProvider serviceProvider, MainForm mainForm) + public Win32LuaLibraries(MainForm mainForm, IEmulatorServiceProvider serviceProvider) : this() { - _mainForm = mainForm; - LuaWait = new AutoResetEvent(false); Docs.Clear(); @@ -52,10 +49,10 @@ namespace BizHawk.Client.EmuHawk // and inject them here if (instance is ClientLuaLibrary clientLib) { - clientLib.MainForm = _mainForm; + clientLib.MainForm = mainForm; } - ApiContainerInstance = ApiManager.RestartLua(serviceProvider, ConsoleLuaLibrary.LogOutput); + ApiContainerInstance = ApiManager.RestartLua(mainForm, serviceProvider, ConsoleLuaLibrary.LogOutput); if (instance is DelegatingLuaLibraryEmu dlgInstanceEmu) dlgInstanceEmu.APIs = ApiContainerInstance; // this is necessary as the property has the `new` modifier else if (instance is DelegatingLuaLibrary dlgInstance) dlgInstance.APIs = ApiContainerInstance; diff --git a/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs index 4ff2eb9c4f..277429a743 100644 --- a/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -45,7 +45,7 @@ namespace BizHawk.Client.EmuHawk _emulator = emulator; _movieSession = movieSession; _game = game; - _apiProvider = ApiManager.Restart(_emulator.ServiceProvider); + _apiProvider = ApiManager.Restart(_owner, _emulator.ServiceProvider); } /// @@ -487,7 +487,7 @@ namespace BizHawk.Client.EmuHawk { _emulator = emulator; _game = game; - _apiProvider = ApiManager.Restart(_emulator.ServiceProvider); + _apiProvider = ApiManager.Restart(_owner, _emulator.ServiceProvider); // If Cheat tool is loaded, restarting will restart the list too anyway if (!Has()) {