diff --git a/src/Gui.c b/src/Gui.c index 953de534a..13c4fdbfb 100644 --- a/src/Gui.c +++ b/src/Gui.c @@ -145,10 +145,6 @@ void Gui_RefreshAll(void) { OnResize(NULL); } -void Gui_RemoveAll(void) { - while (Gui.ScreensCount) Gui_Remove(Gui_Screens[0]); -} - void Gui_Refresh(struct Screen* s) { s->VTABLE->ContextLost(s); s->VTABLE->ContextRecreated(s); @@ -572,7 +568,8 @@ static void OnReset(void) { } static void OnFree(void) { - Gui_RemoveAll(); + while (Gui.ScreensCount) Gui_Remove(Gui_Screens[0]); + OnContextLost(NULL); OnReset(); } diff --git a/src/Gui.h b/src/Gui.h index 39db003c2..43083c95a 100644 --- a/src/Gui.h +++ b/src/Gui.h @@ -225,7 +225,6 @@ void Gui_ShowPauseMenu(void); void Gui_LayoutAll(void); void Gui_RefreshAll(void); -void Gui_RemoveAll(void); void Gui_Refresh(struct Screen* s); void Gui_RenderGui(double delta); diff --git a/src/Screens.c b/src/Screens.c index 4946702ce..91aca150c 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -1949,6 +1949,7 @@ void DisconnectScreen_Show(const cc_string* title, const cc_string* message) { static const cc_string ban = String_FromConst("Banned "); cc_string why; char whyBuffer[STRING_SIZE]; struct DisconnectScreen* s = &DisconnectScreen; + int i; s->grabsInput = true; s->blocksWorld = true; @@ -1964,9 +1965,13 @@ void DisconnectScreen_Show(const cc_string* title, const cc_string* message) { s->canReconnect = !(String_CaselessStarts(&why, &kick) || String_CaselessStarts(&why, &ban)); s->VTABLE = &DisconnectScreen_VTABLE; - /* Remove all screens instead of just drawing over them to reduce GPU usage */ - Gui_RemoveAll(); Gui_Add((struct Screen*)s, GUI_PRIORITY_DISCONNECT); + /* Remove other screens instead of just drawing over them to reduce GPU usage */ + for (i = Gui.ScreensCount - 1; i >= 0; i--) + { + if (Gui_Screens[i] == (struct Screen*)s) continue; + Gui_Remove(Gui_Screens[i]); + } }