[Bf-blender-cvs] [437210d379b] workspaces: Fix crash when renaming workspace render layer

Julian Eisel noreply at git.blender.org
Sat May 13 21:27:11 CEST 2017


Commit: 437210d379b6a2c37d3ecdf27b3aed2b8a259ede
Author: Julian Eisel
Date:   Sat May 13 21:24:02 2017 +0200
Branches: workspaces
https://developer.blender.org/rB437210d379b6a2c37d3ecdf27b3aed2b8a259ede

Fix crash when renaming workspace render layer

PointerRNA.id.data needs to point to the Scene for render-layers. Have
to do lookup in getter here, so we find the scene that contains a render
layer... which is a bit ugly :/

===================================================================

M	source/blender/makesrna/intern/rna_workspace.c

===================================================================

diff --git a/source/blender/makesrna/intern/rna_workspace.c b/source/blender/makesrna/intern/rna_workspace.c
index e817f09ff16..29fe5bae0e4 100644
--- a/source/blender/makesrna/intern/rna_workspace.c
+++ b/source/blender/makesrna/intern/rna_workspace.c
@@ -36,9 +36,15 @@
 
 #ifdef RNA_RUNTIME
 
+#include "BKE_global.h"
+
+#include "BLI_listbase.h"
+
 #include "DNA_object_types.h"
 #include "DNA_screen_types.h"
 
+#include "RNA_access.h"
+
 
 void rna_workspace_screens_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
 {
@@ -73,7 +79,19 @@ static void rna_workspace_object_mode_set(PointerRNA *ptr, int value)
 static PointerRNA rna_workspace_render_layer_get(PointerRNA *ptr)
 {
 	WorkSpace *workspace = ptr->data;
-	return rna_pointer_inherit_refine(ptr, &RNA_SceneLayer, BKE_workspace_render_layer_get(workspace));
+	SceneLayer *render_layer = BKE_workspace_render_layer_get(workspace);
+
+	/* XXX hmrf... lookup in getter... but how could we avoid it? */
+	for (Scene *scene = G.main->scene.first; scene; scene = scene->id.next) {
+		if (BLI_findindex(&scene->render_layers, render_layer) != -1) {
+			PointerRNA scene_ptr;
+
+			RNA_id_pointer_create(&scene->id, &scene_ptr);
+			return rna_pointer_inherit_refine(&scene_ptr, &RNA_SceneLayer, render_layer);
+		}
+	}
+
+	return PointerRNA_NULL;
 }
 
 static void rna_workspace_render_layer_set(PointerRNA *ptr, PointerRNA value)




More information about the Bf-blender-cvs mailing list