From 11ce49830a2d8dfff1db293f88ecd601b0f3c8c7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 27 Sep 2010 10:44:46 +0000 Subject: [PATCH] bugfix [#24009] Crash when switching area types and performing ops tested every view3d operator to make sure none crash. --- source/blender/editors/include/ED_screen.h | 1 + source/blender/editors/screen/screen_ops.c | 5 +++++ .../blender/editors/space_view3d/view3d_edit.c | 16 ++++++++-------- .../blender/editors/space_view3d/view3d_select.c | 2 +- .../blender/editors/space_view3d/view3d_snap.c | 4 ++-- .../blender/editors/space_view3d/view3d_view.c | 2 +- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 8533de75a3c..203d93150eb 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -125,6 +125,7 @@ int ED_operator_regionactive(struct bContext *C); int ED_operator_scene_editable(struct bContext *C); int ED_operator_view3d_active(struct bContext *C); +int ED_operator_region_view3d_active(struct bContext *C); int ED_operator_timeline_active(struct bContext *C); int ED_operator_outliner_active(struct bContext *C); int ED_operator_file_active(struct bContext *C); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index e5f20e3c75a..9c14be1bd9a 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -129,6 +129,11 @@ int ED_operator_view3d_active(bContext *C) return ed_spacetype_test(C, SPACE_VIEW3D); } +int ED_operator_region_view3d_active(bContext *C) +{ + return CTX_wm_region_view3d(C) != NULL; +} + int ED_operator_timeline_active(bContext *C) { return ed_spacetype_test(C, SPACE_TIME); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index e2c12386dd3..13e5d7bbc96 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -783,7 +783,7 @@ static int view3d_camera_active_poll(bContext *C) static int view3d_rotate_poll(bContext *C) { - if (!ED_operator_view3d_active(C)) { + if (!ED_operator_region_view3d_active(C)) { return 0; } else { RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -1264,7 +1264,7 @@ void VIEW3D_OT_zoom(wmOperatorType *ot) ot->invoke= viewzoom_invoke; ot->exec= viewzoom_exec; ot->modal= viewzoom_modal; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER; @@ -1522,7 +1522,7 @@ void VIEW3D_OT_view_selected(wmOperatorType *ot) /* api callbacks */ ot->exec= viewselected_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -1822,7 +1822,7 @@ void VIEW3D_OT_zoom_border(wmOperatorType *ot) ot->exec= view3d_zoom_border_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -2044,7 +2044,7 @@ void VIEW3D_OT_viewnumpad(wmOperatorType *ot) /* api callbacks */ ot->exec= viewnumpad_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -2162,7 +2162,7 @@ void VIEW3D_OT_view_pan(wmOperatorType *ot) /* api callbacks */ ot->exec= viewpan_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -2194,7 +2194,7 @@ void VIEW3D_OT_view_persportho(wmOperatorType *ot) /* api callbacks */ ot->exec= viewpersportho_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -2413,7 +2413,7 @@ void VIEW3D_OT_clip_border(wmOperatorType *ot) ot->exec= view3d_clipping_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index cc4defacb35..7e6e8e0e6af 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -215,7 +215,7 @@ static int view3d_selectable_data(bContext *C) { Object *ob = CTX_data_active_object(C); - if (!ED_operator_view3d_active(C)) + if (!ED_operator_region_view3d_active(C)) return 0; if (!CTX_data_edit_object(C)) diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 5ee87db6b68..7f5f7665028 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -569,7 +569,7 @@ void VIEW3D_OT_snap_selected_to_grid(wmOperatorType *ot) /* api callbacks */ ot->exec= snap_sel_to_grid; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -732,7 +732,7 @@ void VIEW3D_OT_snap_cursor_to_grid(wmOperatorType *ot) /* api callbacks */ ot->exec= snap_curs_to_grid; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 6a3c121ce4b..146e90baeb1 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -472,7 +472,7 @@ void VIEW3D_OT_object_as_camera(wmOperatorType *ot) /* api callbacks */ ot->exec= view3d_setobjectascamera_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;