From f8d40d2da04e07481acbe8affc7249cb7165c649 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 23 Nov 2009 11:49:23 +0000 Subject: [PATCH] 2.5 internal bugfix: remove modal handlers before exiting the screen, since these may be using it. --- source/blender/editors/interface/interface_regions.c | 4 +--- source/blender/windowmanager/intern/wm_files.c | 2 ++ source/blender/windowmanager/intern/wm_window.c | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 388b83cff11..2c4fb71af75 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -1321,9 +1321,7 @@ uiPopupBlockHandle *ui_popup_block_create(bContext *C, ARegion *butregion, uiBut void ui_popup_block_free(bContext *C, uiPopupBlockHandle *handle) { - /* XXX ton added, chrash on load file with popup open... need investigate */ - if(CTX_wm_screen(C)) - ui_remove_temporary_region(C, CTX_wm_screen(C), handle->region); + ui_remove_temporary_region(C, CTX_wm_screen(C), handle->region); MEM_freeN(handle); } diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index a150ca1f8a0..ba514f097e6 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -122,6 +122,8 @@ static void wm_window_match_init(bContext *C, ListBase *wmlist) for(win= wm->windows.first; win; win= win->next) { CTX_wm_window_set(C, win); /* needed by operator close callbacks */ + WM_event_remove_handlers(C, &win->handlers); + WM_event_remove_handlers(C, &win->modalhandlers); ED_screen_exit(C, win, win->screen); } } diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index dbc3d27be6a..78d70c96ad6 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -230,6 +230,9 @@ void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win) BLI_remlink(&wm->windows, win); wm_draw_window_clear(win); + CTX_wm_window_set(C, win); /* needed by handlers */ + WM_event_remove_handlers(C, &win->handlers); + WM_event_remove_handlers(C, &win->modalhandlers); ED_screen_exit(C, win, win->screen); wm_window_free(C, wm, win);