setFirstResonder Safeties

make sure we've properly added gui elements before trying to set the to be the responding one, or running callbacks against them
This commit is contained in:
AzaezelX 2025-02-25 18:23:45 -06:00
parent 9f3785d893
commit 5fb73edc00
4 changed files with 7 additions and 6 deletions

View file

@ -2169,7 +2169,7 @@ void GuiCanvas::setFirstResponder( GuiControl* newResponder )
if( oldResponder && ( oldResponder != newResponder ) )
oldResponder->onLoseFirstResponder();
if( newResponder && ( newResponder != oldResponder ) )
if( newResponder && ( newResponder != oldResponder ) && newResponder->isProperlyAdded())
newResponder->onGainFirstResponder();
}

View file

@ -2230,10 +2230,10 @@ void GuiControl::setFirstResponder( GuiControl* firstResponder )
void GuiControl::setFirstResponder()
{
if( mAwake && mVisible )
if( mAwake && mVisible && isProperlyAdded())
{
GuiControl *parent = getParent();
if ( mProfile->mCanKeyFocus == true && parent != NULL )
if ( mProfile->mCanKeyFocus == true && parent && parent->isProperlyAdded())
parent->setFirstResponder( this );
}
}

View file

@ -741,7 +741,7 @@ class GuiControl : public SimGroup
GuiControl *getFirstResponder() { return mFirstResponder; }
/// Occurs when the control gains first-responder status.
virtual void onGainFirstResponder();
void onGainFirstResponder();
/// Occurs when the control loses first-responder status.
virtual void onLoseFirstResponder();