Commit: d9b67685210275a71bd22b4f8c35590bf795eb47
Author: Campbell Barton
Date: Thu May 28 18:43:49 2015 +1000
Branches: master
https://developer.blender.org/rBd9b67685210275a71bd22b4f8c35590bf795eb47
Fix T44688: Stereo3D time-sequential crashes
===================================================================
M source/blender/windowmanager/intern/wm_stereo.c
===================================================================
diff --git a/source/blender/windowmanager/intern/wm_stereo.c
b/source/blender/windowmanager/intern/wm_stereo.c
index 717583f..6086351 100644
--- a/source/blender/windowmanager/intern/wm_stereo.c
+++ b/source/blender/windowmanager/intern/wm_stereo.c
@@ -452,6 +452,7 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op)
const bool is_fullscreen = WM_window_is_fullscreen(win);
char prev_display_mode = win->stereo3d_format->display_mode;
Stereo3dData *s3dd;
+ bool ok = true;
if (G.background)
return OPERATOR_CANCELLED;
@@ -475,6 +476,7 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op)
else {
BKE_report(op->reports, RPT_ERROR,
"Failed to create a window without
quad-buffer support, you may experience flickering");
+ ok = false;
}
}
else if (win->stereo3d_format->display_mode == S3D_DISPLAY_PAGEFLIP) {
@@ -489,12 +491,14 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op)
wm_window_close(C, wm, win_new);
win->stereo3d_format->display_mode =
prev_display_mode;
BKE_report(op->reports, RPT_ERROR, "Quad-buffer
not supported by the system");
+ ok = false;
}
}
else {
+ win->stereo3d_format->display_mode = prev_display_mode;
BKE_report(op->reports, RPT_ERROR,
"Failed to create a window compatible with
the time sequential display method");
- win->stereo3d_format->display_mode = prev_display_mode;
+ ok = false;
}
}
@@ -506,8 +510,15 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op)
MEM_freeN(op->customdata);
- WM_event_add_notifier(C, NC_WINDOW, NULL);
- return OPERATOR_FINISHED;
+ if (ok) {
+ WM_event_add_notifier(C, NC_WINDOW, NULL);
+ return OPERATOR_FINISHED;
+ }
+ else {
+ /* without this, the popup won't be freed freed properly T44688
*/
+ CTX_wm_window_set(C, win);
+ return OPERATOR_CANCELLED;
+ }
}
int wm_stereo3d_set_invoke(bContext *C, wmOperator *op, const wmEvent
*UNUSED(event))
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs