diff options
author | Joshua Leung <aligorith@gmail.com> | 2008-12-12 02:05:18 +0300 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2008-12-12 02:05:18 +0300 |
commit | 6f6eee09238a751c42aad9df84d7f8b2f131841c (patch) | |
tree | a07457fbef85aa8ddb241594182df62ff4b4219b /source | |
parent | b7426ab4e22e4e442b019bddf9172e8e7ef516ce (diff) |
2.5 - Fixed crashes when closing windows
Diffstat (limited to 'source')
-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); } |