Browse Source

Merge pull request #1395 from Azaezel/alpha41/beResponsible

setFirstResonder Safeties
Brian Roberts 7 months ago
parent
commit
fef87c59c3

+ 1 - 1
Engine/source/gui/core/guiCanvas.cpp

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

+ 2 - 2
Engine/source/gui/core/guiControl.cpp

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

+ 1 - 1
Engine/source/gui/core/guiControl.h

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

+ 3 - 2
Engine/source/gui/editor/inspector/field.cpp

@@ -233,7 +233,7 @@ void GuiInspectorField::setFirstResponder( GuiControl *firstResponder )
 {
 {
    Parent::setFirstResponder( firstResponder );
    Parent::setFirstResponder( firstResponder );
 
 
-   if ( firstResponder == this || firstResponder == mEdit )
+   if (( firstResponder == this || firstResponder == mEdit ) && firstResponder->isProperlyAdded())
    {
    {
       mInspector->setHighlightField( this );      
       mInspector->setHighlightField( this );      
    }   
    }   
@@ -851,7 +851,8 @@ void GuiInspectorField::setHLEnabled( bool enabled )
             edit->setCursorPos(0);
             edit->setCursorPos(0);
          }
          }
       }
       }
-      _executeSelectedCallback();
+      if (isProperlyAdded())
+         _executeSelectedCallback();
    }
    }
 }
 }