From 6a6dd392e2e7ffcf2881d1ab64787d2d49d248dd Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Wed, 11 Oct 2023 12:48:14 +0200 Subject: [PATCH] Fix: copying panels in regions did not handle runtime data Caused by 663aa353. --- source/blender/blenkernel/intern/screen.cc | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/source/blender/blenkernel/intern/screen.cc b/source/blender/blenkernel/intern/screen.cc index 93f2de5e63e..2e87de16393 100644 --- a/source/blender/blenkernel/intern/screen.cc +++ b/source/blender/blenkernel/intern/screen.cc @@ -315,16 +315,14 @@ void BKE_spacedata_freelist(ListBase *lb) static void panel_list_copy(ListBase *newlb, const ListBase *lb) { BLI_listbase_clear(newlb); - BLI_duplicatelist(newlb, lb); - /* copy panel pointers */ - Panel *new_panel = static_cast(newlb->first); - Panel *panel = static_cast(lb->first); - for (; new_panel; new_panel = new_panel->next, panel = panel->next) { + LISTBASE_FOREACH (const Panel *, old_panel, lb) { + Panel *new_panel = BKE_panel_new(old_panel->type); + *new_panel = *old_panel; new_panel->activedata = nullptr; new_panel->drawname = nullptr; - memset(&new_panel->runtime, 0x0, sizeof(new_panel->runtime)); - panel_list_copy(&new_panel->children, &panel->children); + BLI_addtail(newlb, new_panel); + panel_list_copy(&new_panel->children, &old_panel->children); } } @@ -362,6 +360,9 @@ ARegion *BKE_area_region_copy(const SpaceType *st, const ARegion *region) } panel_list_copy(&newar->panels, ®ion->panels); + LISTBASE_FOREACH (Panel *, p, &newar->panels) { + BLI_assert(p->runtime); + } BLI_listbase_clear(&newar->ui_previews); BLI_duplicatelist(&newar->ui_previews, ®ion->ui_previews);