فهرست منبع

Properly ignore GUI elements that were destroyed during input events

Marko Pintera 10 سال پیش
والد
کامیت
acef2fb9f3
1فایلهای تغییر یافته به همراه15 افزوده شده و 0 حذف شده
  1. 15 0
      BansheeEngine/Source/BsGUIManager.cpp

+ 15 - 0
BansheeEngine/Source/BsGUIManager.cpp

@@ -1279,6 +1279,9 @@ namespace BansheeEngine
 		mNewElementsInFocus.clear();
 		mNewElementsInFocus.clear();
 		for(auto& focusedElement : mElementsInFocus)
 		for(auto& focusedElement : mElementsInFocus)
 		{
 		{
+			if (focusedElement.element->_isDestroyed())
+				continue;
+
 			if(getWidgetWindow(*focusedElement.widget) == &win)
 			if(getWidgetWindow(*focusedElement.widget) == &win)
 			{
 			{
 				mCommandEvent = GUICommandEvent();
 				mCommandEvent = GUICommandEvent();
@@ -1465,21 +1468,33 @@ namespace BansheeEngine
 
 
 	bool GUIManager::sendMouseEvent(GUIWidget* widget, GUIElement* element, const GUIMouseEvent& event)
 	bool GUIManager::sendMouseEvent(GUIWidget* widget, GUIElement* element, const GUIMouseEvent& event)
 	{
 	{
+		if (element->_isDestroyed())
+			return false;
+
 		return widget->_mouseEvent(element, event);
 		return widget->_mouseEvent(element, event);
 	}
 	}
 
 
 	bool GUIManager::sendTextInputEvent(GUIWidget* widget, GUIElement* element, const GUITextInputEvent& event)
 	bool GUIManager::sendTextInputEvent(GUIWidget* widget, GUIElement* element, const GUITextInputEvent& event)
 	{
 	{
+		if (element->_isDestroyed())
+			return false;
+
 		return widget->_textInputEvent(element, event);
 		return widget->_textInputEvent(element, event);
 	}
 	}
 
 
 	bool GUIManager::sendCommandEvent(GUIWidget* widget, GUIElement* element, const GUICommandEvent& event)
 	bool GUIManager::sendCommandEvent(GUIWidget* widget, GUIElement* element, const GUICommandEvent& event)
 	{
 	{
+		if (element->_isDestroyed())
+			return false;
+
 		return widget->_commandEvent(element, event);
 		return widget->_commandEvent(element, event);
 	}
 	}
 
 
 	bool GUIManager::sendVirtualButtonEvent(GUIWidget* widget, GUIElement* element, const GUIVirtualButtonEvent& event)
 	bool GUIManager::sendVirtualButtonEvent(GUIWidget* widget, GUIElement* element, const GUIVirtualButtonEvent& event)
 	{
 	{
+		if (element->_isDestroyed())
+			return false;
+
 		return widget->_virtualButtonEvent(element, event);
 		return widget->_virtualButtonEvent(element, event);
 	}
 	}