From 16e422af9647ebdb156fe9ebb5e62ec43f45b745 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Thu, 8 Oct 2026 11:11:23 +0000 Subject: [PATCH] fix(options): Prevent crash when Advanced Display window is missing --- .../GUI/GUICallbacks/Menus/OptionsMenu.cpp | 13 +++++++++---- .../GUI/GUICallbacks/Menus/OptionsMenu.cpp | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp index de028ec541c..115683b253d 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -880,12 +880,14 @@ static void DestroyOptionsLayout() { static void showAdvancedOptions() { - WinAdvancedDisplay->winHide(FALSE); + if (WinAdvancedDisplay) + WinAdvancedDisplay->winHide(FALSE); } static void acceptAdvancedOptions() { - WinAdvancedDisplay->winHide(TRUE); + if (WinAdvancedDisplay) + WinAdvancedDisplay->winHide(TRUE); } static void cancelAdvancedOptions() @@ -893,7 +895,8 @@ static void cancelAdvancedOptions() //restore the detail selection back to initial state GadgetComboBoxSetSelectedPos(comboBoxDetail, (Int)TheGameLODManager->getStaticLODLevel()); - WinAdvancedDisplay->winHide(TRUE); + if (WinAdvancedDisplay) + WinAdvancedDisplay->winHide(TRUE); } // TheSuperHackers @tweak Now prints additional version information in the version label. @@ -1028,7 +1031,9 @@ void OptionsMenuInit( WindowLayout *layout, void *userData ) sliderParticleCapID = TheNameKeyGenerator->nameToKey( "OptionsMenu.wnd:ParticleCapSlider" ); sliderParticleCap = TheWindowManager->winGetWindowFromId( nullptr, sliderParticleCapID ); - WinAdvancedDisplay->winHide(TRUE); + // TheSuperHackers @bugfix The advanced display window may be missing from custom or modded layouts. + if (WinAdvancedDisplay) + WinAdvancedDisplay->winHide(TRUE); Color color = GameMakeColor(255,255,255,255); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp index 9f33223decf..893300daf18 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -940,12 +940,14 @@ static void DestroyOptionsLayout() { static void showAdvancedOptions() { - WinAdvancedDisplay->winHide(FALSE); + if (WinAdvancedDisplay) + WinAdvancedDisplay->winHide(FALSE); } static void acceptAdvancedOptions() { - WinAdvancedDisplay->winHide(TRUE); + if (WinAdvancedDisplay) + WinAdvancedDisplay->winHide(TRUE); } static void cancelAdvancedOptions() @@ -953,7 +955,8 @@ static void cancelAdvancedOptions() //restore the detail selection back to initial state GadgetComboBoxSetSelectedPos(comboBoxDetail, (Int)TheGameLODManager->getStaticLODLevel()); - WinAdvancedDisplay->winHide(TRUE); + if (WinAdvancedDisplay) + WinAdvancedDisplay->winHide(TRUE); } // TheSuperHackers @tweak Now prints additional version information in the version label. @@ -1092,7 +1095,9 @@ void OptionsMenuInit( WindowLayout *layout, void *userData ) checkPropsID = TheNameKeyGenerator->nameToKey( "OptionsMenu.wnd:CheckShowProps" ); checkProps = TheWindowManager->winGetWindowFromId( nullptr, checkPropsID); - sliderParticleCapID = TheNameKeyGenerator->nameToKey( "OptionsMenu.wnd:ParticleCapSlider" ); + // TheSuperHackers @bugfix The advanced display window may be missing from custom or modded layouts. + if (WinAdvancedDisplay) + WinAdvancedDisplay->winHide(TRUE); sliderParticleCap = TheWindowManager->winGetWindowFromId( nullptr, sliderParticleCapID ); WinAdvancedDisplay->winHide(TRUE);