diff --git a/OpenRA.Game/Chrome.cs b/OpenRA.Game/Chrome.cs index 1cb574d30e..0b4eadf18d 100644 --- a/OpenRA.Game/Chrome.cs +++ b/OpenRA.Game/Chrome.cs @@ -48,13 +48,10 @@ namespace OpenRA rootWidget = WidgetLoader.LoadWidget( widgetYaml.FirstOrDefault() ); rootWidget.Initialize(); rootWidget.InitDelegates(); - Widget.WindowList.Push("MAINMENU_BG"); } } public static Widget rootWidget = null; - public static Widget selectedWidget; - public static ChatDisplayWidget chatWidget; public void Tick(World world) { @@ -71,7 +68,7 @@ namespace OpenRA public int2 lastMousePos; public bool HandleInput(World world, MouseInput mi) { - if (selectedWidget != null && selectedWidget.HandleMouseInputOuter(mi)) + if (Widget.SelectedWidget != null && Widget.SelectedWidget.HandleMouseInputOuter(mi)) return true; if (rootWidget.HandleMouseInputOuter(mi)) @@ -88,8 +85,8 @@ namespace OpenRA public bool HandleKeyPress(System.Windows.Forms.KeyPressEventArgs e, Modifiers modifiers) { - if (selectedWidget != null) - return selectedWidget.HandleKeyPressOuter(e, modifiers); + if (Widget.SelectedWidget != null) + return Widget.SelectedWidget.HandleKeyPressOuter(e, modifiers); if (rootWidget.HandleKeyPressOuter(e, modifiers)) return true; @@ -98,7 +95,7 @@ namespace OpenRA public bool HitTest(int2 mousePos) { - if (selectedWidget != null) + if (Widget.SelectedWidget != null) return true; return rootWidget.HitTest(mousePos); diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index a7c8422b4f..8186a1fecc 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -412,7 +412,7 @@ namespace OpenRA { LoadMap(LobbyInfo.GlobalSettings.Map); if (orderManager.GameStarted) return; - Chrome.selectedWidget = null; + Widget.SelectedWidget = null; world.Queries = new World.AllQueries(world); @@ -624,12 +624,13 @@ namespace OpenRA } } - public static void Exit() { quit = true; } + public static void Exit() { quit = true; } + + public static Action AddChatLine = (c,n,s) => {}; public static void Debug(string s) { - if (Chrome.chatWidget != null) - Chrome.chatWidget.AddLine(Color.White, "Debug", s); + AddChatLine(Color.White, "Debug", s); } public static void Disconnect() diff --git a/OpenRA.Game/Network/UnitOrders.cs b/OpenRA.Game/Network/UnitOrders.cs index 0d33bff1d3..edc723f863 100755 --- a/OpenRA.Game/Network/UnitOrders.cs +++ b/OpenRA.Game/Network/UnitOrders.cs @@ -33,14 +33,13 @@ namespace OpenRA.Network case "Chat": { var client = Game.LobbyInfo.Clients.FirstOrDefault(c => c.Index == clientId); - if (client != null && Chrome.chatWidget != null) - Chrome.chatWidget.AddLine(Game.world.PlayerColors()[client.PaletteIndex].Color, client.Name, order.TargetString); + Game.AddChatLine(Game.world.PlayerColors()[client.PaletteIndex].Color, client.Name, order.TargetString); break; } case "TeamChat": { var client = Game.LobbyInfo.Clients.FirstOrDefault(c => c.Index == clientId); - if (client != null && Chrome.chatWidget != null) + if (client != null) { var player = Game.world.players.Values.FirstOrDefault(p => p.Index == client.Index); var isAlly = (world.GameHasStarted) ? @@ -48,15 +47,13 @@ namespace OpenRA.Network client == Game.LocalClient || (client.Team == Game.LocalClient.Team && client.Team != 0); if (isAlly) - Chrome.chatWidget.AddLine(Game.world.PlayerColors()[client.PaletteIndex].Color, client.Name + " (Team)", order.TargetString); + Game.AddChatLine(Game.world.PlayerColors()[client.PaletteIndex].Color, client.Name + " (Team)", order.TargetString); } break; } case "StartGame": { - if (Chrome.chatWidget != null) - Chrome.chatWidget.AddLine(Color.White, "Server", "The game has started."); - + Game.AddChatLine(Color.White, "Server", "The game has started."); Game.StartGame(); break; } diff --git a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs index b1a0fa1048..55355fbb1b 100644 --- a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs @@ -101,9 +101,7 @@ namespace OpenRA.Widgets.Delegates }; Game.LobbyInfoChanged += UpdatePlayerList; - - Chrome.chatWidget = lobby.GetWidget("CHAT_DISPLAY"); - + Game.AddChatLine += (c,n,s) => lobby.GetWidget("CHAT_DISPLAY").AddLine(c,n,s); bool teamChat = false; var chatLabel = lobby.GetWidget("LABEL_CHATTYPE"); @@ -158,14 +156,13 @@ namespace OpenRA.Widgets.Delegates if (name.Text.Length == 0) name.Text = c.Name; - Chrome.selectedWidget = null; + name.LoseFocus(); if (name.Text == c.Name) return true; Game.IssueOrder(Order.Command( "name "+name.Text )); Game.Settings.PlayerName = name.Text; Game.Settings.Save(); - Chrome.selectedWidget = null; return true; }; name.OnLoseFocus = () => name.OnEnterKey(); diff --git a/OpenRA.Game/Widgets/Delegates/MainMenuButtonsDelegate.cs b/OpenRA.Game/Widgets/Delegates/MainMenuButtonsDelegate.cs index 53d80e4b73..9baf147dd1 100644 --- a/OpenRA.Game/Widgets/Delegates/MainMenuButtonsDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/MainMenuButtonsDelegate.cs @@ -25,6 +25,8 @@ namespace OpenRA.Widgets.Delegates { public MainMenuButtonsDelegate() { + // Main menu is the default window + Widget.WindowList.Push("MAINMENU_BG"); Chrome.rootWidget.GetWidget("MAINMENU_BUTTON_QUIT").OnMouseUp = mi => {Game.Exit(); return true;}; var version = Chrome.rootWidget.GetWidget("MAINMENU_BG").GetWidget("VERSION_STRING"); diff --git a/OpenRA.Game/Widgets/Widget.cs b/OpenRA.Game/Widgets/Widget.cs index 589ade7b94..88a8710d06 100644 --- a/OpenRA.Game/Widgets/Widget.cs +++ b/OpenRA.Game/Widgets/Widget.cs @@ -152,23 +152,30 @@ namespace OpenRA.Widgets } - public bool Focused { get { return Chrome.selectedWidget == this; } } + public static Widget SelectedWidget; + public bool Focused { get { return SelectedWidget == this; } } public virtual bool TakeFocus(MouseInput mi) { if (Focused) return true; - if (Chrome.selectedWidget != null && !Chrome.selectedWidget.LoseFocus(mi)) + if (SelectedWidget != null && !SelectedWidget.LoseFocus(mi)) return false; - Chrome.selectedWidget = this; + SelectedWidget = this; return true; } // Remove focus from this widget; return false if you don't want to give it up public virtual bool LoseFocus(MouseInput mi) { - if (Chrome.selectedWidget == this) - Chrome.selectedWidget = null; + // Some widgets may need to override focus depending on mouse click + return LoseFocus(); + } + + public virtual bool LoseFocus() + { + if (SelectedWidget == this) + SelectedWidget = null; return true; }