diff --git a/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs index 003af771f0..82f717b7b1 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs @@ -44,6 +44,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic panel = widget; this.onStart = onStart; + Game.BeforeGameStart += OnGameStart; playerList = panel.Get("PLAYER_LIST"); playerHeader = playerList.Get("HEADER"); @@ -664,16 +665,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic void WatchReplay() { - Action startReplay = () => + if (selectedReplay != null && ReplayUtils.PromptConfirmReplayCompatibility(selectedReplay)) { cancelLoadingReplays = true; Game.JoinReplay(selectedReplay.FilePath); - Ui.CloseWindow(); - onStart(); - }; - - if (selectedReplay != null && ReplayUtils.PromptConfirmReplayCompatibility(selectedReplay)) - startReplay(); + } } void AddReplay(ReplayMetadata replay, ScrollItemWidget template) @@ -697,6 +693,24 @@ namespace OpenRA.Mods.Common.Widgets.Logic replayList.AddChild(item); } + void OnGameStart() + { + Ui.CloseWindow(); + onStart(); + } + + bool disposed; + protected override void Dispose(bool disposing) + { + if (disposing && !disposed) + { + disposed = true; + Game.BeforeGameStart -= OnGameStart; + } + + base.Dispose(disposing); + } + class ReplayState { public bool Visible;