diff --git a/OpenRA.Game/Widgets/Widget.cs b/OpenRA.Game/Widgets/Widget.cs index ff9752713b..461718a85b 100644 --- a/OpenRA.Game/Widgets/Widget.cs +++ b/OpenRA.Game/Widgets/Widget.cs @@ -417,8 +417,11 @@ namespace OpenRA.Widgets public virtual void RemoveChild(Widget child) { - Children.Remove(child); - child.Removed(); + if (child != null) + { + Children.Remove(child); + child.Removed(); + } } public virtual void RemoveChildren() diff --git a/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs index a0fcd7f844..90c2c22645 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs @@ -47,7 +47,7 @@ namespace OpenRA.Mods.D2k.Widgets.Logic Action ShowLeaveRestartDialog = () => { - gameRoot.IsVisible = () => false; + gameRoot.RemoveChildren(); Game.LoadWidget(world, "LEAVE_RESTART_WIDGET", Ui.Root, new WidgetArgs()); }; world.GameOver += ShowLeaveRestartDialog; diff --git a/OpenRA.Mods.RA/Widgets/Logic/Ingame/LeaveMapLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/Ingame/LeaveMapLogic.cs index f8f1405e54..9c52a6e69a 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/Ingame/LeaveMapLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/Ingame/LeaveMapLogic.cs @@ -32,9 +32,8 @@ namespace OpenRA.Mods.RA.Widgets panelName = "LEAVE_RESTART_FULL"; var dialog = widget.Get(panelName); - var fmvPlayer = Ui.Root.GetOrNull("FMVPLAYER"); dialog.IsVisible = () => true; - widget.IsVisible = () => fmvPlayer == null || fmvPlayer != Ui.CurrentWindow(); + widget.IsVisible = () => Ui.CurrentWindow() == null; var leaveButton = dialog.Get("LEAVE_BUTTON"); leaveButton.OnClick = () => diff --git a/OpenRA.Mods.RA/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs b/OpenRA.Mods.RA/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs index ee3ded3342..366dedef46 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs @@ -45,7 +45,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic Action ShowLeaveRestartDialog = () => { - ingameRoot.IsVisible = () => false; + ingameRoot.RemoveChildren(); Game.LoadWidget(world, "LEAVE_RESTART_WIDGET", Ui.Root, new WidgetArgs()); }; world.GameOver += ShowLeaveRestartDialog; diff --git a/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs index 2b9d7141c7..f17e72ea77 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs @@ -21,6 +21,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic readonly World world; readonly Widget ingameRoot; bool disableSystemButtons; + Widget currentWidget; [ObjectCreator.UseCtor] public OrderButtonsChromeLogic(Widget widget, World world) @@ -28,6 +29,9 @@ namespace OpenRA.Mods.RA.Widgets.Logic this.world = world; ingameRoot = Ui.Root.Get("INGAME_ROOT"); + Action removeCurrentWidget = () => Ui.Root.RemoveChild(currentWidget); + world.GameOver += removeCurrentWidget; + // Order Buttons var sell = widget.GetOrNull("SELL_BUTTON"); if (sell != null) @@ -139,7 +143,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic disableSystemButtons = false; }); - Game.LoadWidget(world, button.MenuContainer, Ui.Root, widgetArgs); + currentWidget = Game.LoadWidget(world, button.MenuContainer, Ui.Root, widgetArgs); } static void BindOrderButton(World world, ButtonWidget w, string icon)