Bugfix:
authorJoshua Leung <aligorith@gmail.com>
Fri, 14 Nov 2008 02:13:10 +0000 (02:13 +0000)
committerJoshua Leung <aligorith@gmail.com>
Fri, 14 Nov 2008 02:13:10 +0000 (02:13 +0000)
Grease Pencil crashed after duplicating a screen-area, and deleting a layer from the original screen-area. The duplication code was not reassigning some pointers.

source/blender/src/gpencil.c

index 497443edffd159c66289adffd40152d3e28adcdc..fd8bd7dc014ac7c9bf7cd181e6f3c7fea1916e3f 100644 (file)
@@ -267,6 +267,7 @@ bGPDframe *gpencil_frame_duplicate (bGPDframe *src)
                
        /* make a copy of the source frame */
        dst= MEM_dupallocN(src);
+       dst->prev= dst->next= NULL;
        
        /* copy strokes */
        dst->strokes.first = dst->strokes.last= NULL;
@@ -294,13 +295,18 @@ bGPDlayer *gpencil_layer_duplicate (bGPDlayer *src)
                
        /* make a copy of source layer */
        dst= MEM_dupallocN(src);
+       dst->prev= dst->next= NULL;
        
        /* copy frames */
        dst->frames.first= dst->frames.last= NULL;
        for (gpf= src->frames.first; gpf; gpf= gpf->next) {
-               /* make a copy of source stroke */
+               /* make a copy of source frame */
                gpfd= gpencil_frame_duplicate(gpf);
                BLI_addtail(&dst->frames, gpfd);
+               
+               /* if source frame was the current layer's 'active' frame, reassign that too */
+               if (gpf == dst->actframe)
+                       dst->actframe= gpfd;
        }
        
        /* return new layer */