diff options
-rw-r--r-- | source/blender/blenkernel/intern/screen.c | 12 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 8 |
2 files changed, 14 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index af5134cd6a0..2831f45195e 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -164,15 +164,19 @@ void BKE_screen_area_free(ScrArea *sa) /* don't free screen itself */ void free_screen(bScreen *sc) { - ScrArea *sa; - ARegion *ar; + ScrArea *sa, *san; + ARegion *ar, *arn; - for(ar=sc->regionbase.first; ar; ar=ar->next) + for(ar=sc->regionbase.first; ar; ar=arn) { + arn= ar->next; BKE_area_region_free(ar); + } BLI_freelistN(&sc->regionbase); - for(sa= sc->areabase.first; sa; sa= sa->next) + for(sa= sc->areabase.first; sa; sa= san) { + san= sa->next; BKE_screen_area_free(sa); + } BLI_freelistN(&sc->vertbase); BLI_freelistN(&sc->edgebase); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index a81b80c5abe..30a88d7c045 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -3530,17 +3530,21 @@ static int ui_handler_region(bContext *C, wmEvent *event) static void ui_handler_remove_region(bContext *C) { + bScreen *sc; ARegion *ar; ar= C->region; - if(ar==NULL) return; + if(ar == NULL) return; uiFreeBlocks(C, &ar->uiblocks); + + sc= C->screen; + if(sc == NULL) return; /* delayed apply callbacks, but not for screen level regions, those * we rather do at the very end after closing them all, which will * be done in ui_handler_region/window */ - if(BLI_findindex(&C->screen->regionbase, ar) == -1) + if(BLI_findindex(&sc->regionbase, ar) == -1) ui_apply_but_funcs_after(C); } |