Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/screen.c')
-rw-r--r--source/blender/blenkernel/intern/screen.c30
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