Просмотр исходного кода

Closing an editor window properly disconnects moveOrResize callback

Marko Pintera 12 лет назад
Родитель
Сommit
c4231bc2fb

+ 2 - 0
CamelotClient/Include/BsEditorWindowBase.h

@@ -1,6 +1,7 @@
 #pragma once
 
 #include "BsEditorPrerequisites.h"
+#include <boost/signals/connection.hpp>
 
 namespace BansheeEditor
 {
@@ -32,6 +33,7 @@ namespace BansheeEditor
 		virtual void initialize();
 		virtual void movedOrResized() { }
 	private:
+		boost::signals::connection mMoveOrResizeConn;
 		CM::RenderWindowPtr mRenderWindow;
 		
 		void movedOrResized(CM::RenderWindow& renderWindow);

+ 3 - 1
CamelotClient/Source/BsEditorWindowBase.cpp

@@ -39,6 +39,8 @@ namespace BansheeEditor
 
 	EditorWindowBase::~EditorWindowBase()
 	{
+		mMoveOrResizeConn.disconnect();
+
 		if(mOwnsRenderWindow)
 			mRenderWindow->destroy();
 
@@ -78,7 +80,7 @@ namespace BansheeEditor
 		frame->initialize(mCamera->getViewport().get(), renderWindow.get());
 		frame->setDepth(129);
 
-		RenderWindowManager::instance().onMovedOrResized.connect(boost::bind(&EditorWindowBase::movedOrResized, this, _1));
+		mMoveOrResizeConn = RenderWindowManager::instance().onMovedOrResized.connect(boost::bind(&EditorWindowBase::movedOrResized, this, _1));
 	}
 
 	void EditorWindowBase::movedOrResized(RenderWindow& renderWindow)