Ver Fonte

Fixed crash on merging editor holders

Ivan Safrin há 11 anos atrás
pai
commit
c75de951b9

+ 12 - 6
IDE/Contents/Source/PolycodeFrame.cpp

@@ -637,7 +637,7 @@ void EditorHolder::updateFileSelector() {
 	currentFileSelector->clearItems();
 	
 	std::vector<PolycodeEditor*> editors = editorManager->getOpenEditorsForProject(project);
-	
+
 	for(int i=0; i < editors.size(); i++) {
 		OSFileEntry entry(editors[i]->getFilePath(), OSFileEntry::TYPE_FILE);
 		
@@ -700,12 +700,14 @@ void EditorHolder::setEditor(PolycodeEditor *newEditor) {
 		}
 		addChild(currentEditor);
 	}
+
 	updateFileSelector();
-	Resize(getWidth(), getHeight());
-	
+    
 	if(isActive) {
-		editorManager->setCurrentEditor(currentEditor);	
+		editorManager->setCurrentEditor(currentEditor);
 	}
+    
+	Resize(getWidth(), getHeight());
 }
 
 PolycodeEditor *EditorHolder::getEditor() {
@@ -843,7 +845,11 @@ void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
 	if(hSizer) {
 		removeChild(hSizer);
 		delete hSizer;
-	}	
+	}
+    
+    firstChildHolder->setOwnsChildrenRecursive(false);
+    secondChildHolder->setOwnsChildrenRecursive(false);
+    
 	delete firstChildHolder;
 	delete secondChildHolder;
 	
@@ -852,7 +858,7 @@ void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
 	vSizer = NULL;
 	hSizer = NULL;
 	
-	setActive(true);    
+	setActive(true);
 	setEditor(mainHolderEditor);
 }
 

+ 2 - 2
Modules/Contents/UI/Source/PolyUIHSizer.cpp

@@ -79,8 +79,8 @@ UIHSizer::UIHSizer(Number width, Number height, Number mainWidth, bool leftSizer
 
 UIHSizer::~UIHSizer() {
 	coreInput->removeAllHandlersForListener(this);
-	if (ownsChildren)
-		childElements->ownsChildren = true;
+
+    childElements->ownsChildren = false;
 	if(!ownsChildren) {
 		delete childElements;	
 		delete separatorBgShape;

+ 2 - 4
Modules/Contents/UI/Source/PolyUIVSizer.cpp

@@ -79,10 +79,8 @@ UIVSizer::UIVSizer(Number width, Number height, Number mainHeight, bool topSizer
 
 UIVSizer::~UIVSizer() {
 	coreInput->removeAllHandlersForListener(this);
-	
-	if (ownsChildren)
-		childElements->ownsChildren = true;
-		
+			
+    childElements->ownsChildren = false;
 	if(!ownsChildren) {
 		delete childElements;	
 		delete separatorBgShape;