diff --git a/src/Client/Gui.c b/src/Client/Gui.c index 59887532b..85db32f83 100644 --- a/src/Client/Gui.c +++ b/src/Client/Gui.c @@ -167,14 +167,25 @@ void Gui_RefreshHud(void) { Gui_HUD->Base.Recreate(&Gui_HUD->Base); } -void Gui_ShowOverlay(Screen* overlay) { +void Gui_ShowOverlay(Screen* overlay, bool atFront) { if (Gui_OverlaysCount == GUI_MAX_OVERLAYS) { ErrorHandler_Fail("Cannot have more than 40 overlays"); } bool visible = Game_GetCursorVisible(); if (Gui_OverlaysCount == 0) Game_SetCursorVisible(true); - Gui_Overlays[Gui_OverlaysCount++] = overlay; + if (atFront) { + Int32 i; + /* Insert overlay at start of list */ + for (i = Gui_OverlaysCount - 1; i > 0; i--) { + Gui_Overlays[i] = Gui_Overlays[i - 1]; + } + Gui_Overlays[0] = overlay; + } else { + Gui_Overlays[Gui_OverlaysCount] = overlay; + } + Gui_OverlaysCount++; + if (Gui_OverlaysCount == 1) Game_SetCursorVisible(visible); /* Save cursor visibility state */ overlay->Base.Init(&overlay->Base); } @@ -260,7 +271,7 @@ void TextAtlas_Add(TextAtlas* atlas, Int32 charI, VertexP3fT2fC4b** vertices) { void TextAtlas_AddInt(TextAtlas* atlas, Int32 value, VertexP3fT2fC4b** vertices) { if (value < 0) TextAtlas_Add(atlas, 10, vertices); /* - sign */ - UInt32 i, count = 0; + Int32 i, count = 0; UInt8 digits[STRING_SIZE]; /* use a do while loop here, as we still want a '0' digit if input is 0 */ do { diff --git a/src/Client/Gui.h b/src/Client/Gui.h index d132b929a..c370de8b1 100644 --- a/src/Client/Gui.h +++ b/src/Client/Gui.h @@ -90,7 +90,7 @@ Screen* Gui_GetUnderlyingScreen(void); void Gui_SetScreen(Screen* screen, bool freeOld); void Gui_SetNewScreen(Screen* screen); void Gui_RefreshHud(void); -void Gui_ShowOverlay(Screen* overlay); +void Gui_ShowOverlay(Screen* overlay, bool atFront); void Gui_RenderGui(Real64 delta); void Gui_OnResize(void); diff --git a/src/Client/Input.c b/src/Client/Input.c index 225220a17..e4c98c62b 100644 --- a/src/Client/Input.c +++ b/src/Client/Input.c @@ -2,6 +2,7 @@ #include "Event.h" #include "Funcs.h" #include "Options.h" +#include "Utils.h" #define Key_Function_Names \ "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10",\ diff --git a/src/Client/InputHandler.c b/src/Client/InputHandler.c index f8858010f..d57785918 100644 --- a/src/Client/InputHandler.c +++ b/src/Client/InputHandler.c @@ -1,6 +1,5 @@ #include "InputHandler.h" #include "Utils.h" -#include "Hotkeys.h" #include "ServerConnection.h" #include "Game.h" #include "Platform.h" @@ -177,7 +176,7 @@ bool InputHandler_HandleCoreKey(Key key) { } else if (GameMode_HandlesKeyDown(key)) { } else if (key == KeyBind_Get(KeyBind_IDOverlay)) { if (Gui_OverlaysCount > 0) return true; - Gui_ShowOverlay(new TexIdsOverlay()); + Gui_ShowOverlay(new TexIdsOverlay(), false); } else { return false; } diff --git a/src/Client/Screens.c b/src/Client/Screens.c index ba2e23f4a..02b0083a0 100644 --- a/src/Client/Screens.c +++ b/src/Client/Screens.c @@ -1129,15 +1129,6 @@ void ChatScreen_Recreate(TextGroupWidget* group, UInt8 code) { } } -void ChatScreen_OpenUrl(Overlay urlOverlay, bool always) { - Platform_StartShell(urlOverlay.Metadata); -} - -void ChatScreen_AppendUrl(Overlay urlOverlay, bool always) { - if (!Game_ClickableChat) return; - input.Append(urlOverlay.Metadata); -} - Int32 ChatScreen_ClampIndex(Int32 index) { Int32 maxIndex = Chat_Log.Count - Game_ChatLines; Int32 minIndex = min(0, maxIndex); @@ -1262,15 +1253,8 @@ bool ChatScreen_HandlesMouseDown(GuiElement* elem, Int32 x, Int32 y, MouseButton String_AppendColorless(&url, &text); if (Utils_IsUrlPrefix(&url, 0)) { - WarningOverlay overlay = new WarningOverlay(game, false, false); - overlay.Metadata = url; - overlay.SetHandlers(OpenUrl, AppendUrl); - overlay.lines[0] = "&eAre you sure you want to open this link?"; - - overlay.lines[1] = url; - overlay.lines[2] = "Be careful - links from strangers may be websites that"; - overlay.lines[3] = " have viruses, or things you may not want to open/see."; - game.Gui.ShowOverlay(overlay); + Overlay overlay = new UrlWarningOverlay(url); + Gui_ShowOverlay(overlay, false); } else if (Game_ClickableChat) { InputWidget_AppendString(&screen->Input.Base, &text); }