diff options
Diffstat (limited to 'source/blender/blenkernel/intern/screen.c')
-rw-r--r-- | source/blender/blenkernel/intern/screen.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 74e30984436..b46d4af8887 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -123,6 +123,7 @@ void BKE_spacedata_freelist(ListBase *lb) ARegion *BKE_area_region_copy(ARegion *ar) { ARegion *newar= MEM_dupallocN(ar); + Panel *pa, *newpa, *patab; newar->handlers.first= newar->handlers.last= NULL; newar->uiblocks.first= newar->uiblocks.last= NULL; @@ -131,6 +132,23 @@ ARegion *BKE_area_region_copy(ARegion *ar) /* XXX regiondata callback */ if(ar->regiondata) newar->regiondata= MEM_dupallocN(ar->regiondata); + + newar->panels.first= newar->panels.last= NULL; + BLI_duplicatelist(&newar->panels, &ar->panels); + + /* copy panel pointers */ + for(newpa= newar->panels.first; newpa; newpa= newpa->next) { + patab= newar->panels.first; + pa= ar->panels.first; + while(patab) { + if(newpa->paneltab == pa) { + newpa->paneltab = patab; + break; + } + patab= patab->next; + pa= pa->next; + } + } return newar; } @@ -174,8 +192,12 @@ void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2) /* not region itself */ void BKE_area_region_free(ARegion *ar) { - if(ar && ar->type && ar->type->free) - ar->type->free(ar); + if(ar) { + if(ar->type && ar->type->free) + ar->type->free(ar); + + BLI_freelistN(&ar->panels); + } } /* not area itself */ @@ -193,10 +215,6 @@ void BKE_screen_area_free(ScrArea *sa) BLI_freelistN(&sa->regionbase); BLI_freelistN(&sa->actionzones); - BLI_freelistN(&sa->panels); - // uiFreeBlocks(&sa->uiblocks); - // uiFreePanels(&sa->panels); - #ifndef DISABLE_PYTHON BPY_free_scriptlink(&sa->scriptlink); #endif |