diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-09-07 15:53:16 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-09-07 15:53:16 +0400 |
commit | 68693b453240d10104a54bbd527918850b4f7b7f (patch) | |
tree | c5e48a1b77cdd4e119b8ed4705c5a0a64bef114a | |
parent | fcbf3041a9eb6fee725318df861015ebbdb8d1be (diff) |
Fix #28541: crash with operator reports in some cases, caused by my recent fix
for missing reports, thanks to Sergey for tracking this down.
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 8861f128c4b..518ebeafc80 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -441,12 +441,17 @@ static void wm_operator_reports(bContext *C, wmOperator *op, int retval, int pop if(op->reports->list.first) { /* FIXME, temp setting window, see other call to uiPupMenuReports for why */ wmWindow *win_prev= CTX_wm_window(C); + ScrArea *area_prev= CTX_wm_area(C); + ARegion *ar_prev= CTX_wm_region(C); + if(win_prev==NULL) CTX_wm_window_set(C, CTX_wm_manager(C)->windows.first); uiPupMenuReports(C, op->reports); CTX_wm_window_set(C, win_prev); + CTX_wm_area_set(C, area_prev); + CTX_wm_region_set(C, ar_prev); } } @@ -1394,6 +1399,9 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa * only have because lib linking errors need to be seen by users :( * it can be removed without breaking anything but then no linking errors - campbell */ wmWindow *win_prev= CTX_wm_window(C); + ScrArea *area_prev= CTX_wm_area(C); + ARegion *ar_prev= CTX_wm_region(C); + if(win_prev==NULL) CTX_wm_window_set(C, CTX_wm_manager(C)->windows.first); @@ -1405,6 +1413,8 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa BLI_movelisttolist(&CTX_wm_reports(C)->list, &handler->op->reports->list); CTX_wm_window_set(C, win_prev); + CTX_wm_area_set(C, area_prev); + CTX_wm_region_set(C, ar_prev); } WM_operator_free(handler->op); |