Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Borghetti <bdiego@gmail.com>2010-06-07 20:24:24 +0400
committerDiego Borghetti <bdiego@gmail.com>2010-06-07 20:24:24 +0400
commitf8346b1bcd28822c16fff0f25cfd00ae32ffe486 (patch)
treee28fd85808d975cc2bebc19c2a3d6f7f50ea7768 /source/blender/editors/object/object_add.c
parent1a3129c40a766ced58279754d3c238da5d60711c (diff)
Fix bug #22317 View reamins in camera's view after camera is deleted.
The object in the view3d don't get update, so point to the delete camera and make Blender crash when you go into fly mode.
Diffstat (limited to 'source/blender/editors/object/object_add.c')
-rw-r--r--source/blender/editors/object/object_add.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 73fbc8e2795..e0e0bb06652 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -826,6 +826,8 @@ void ED_base_object_free_and_unlink(Scene *scene, Base *base)
static int object_delete_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ RegionView3D *rv3d= CTX_wm_region_view3d(C);
int islamp= 0;
if(CTX_data_edit_object(C))
@@ -834,14 +836,24 @@ static int object_delete_exec(bContext *C, wmOperator *op)
CTX_DATA_BEGIN(C, Base*, base, selected_bases) {
if(base->object->type==OB_LAMP) islamp= 1;
-
+ else if (base->object->type == OB_CAMERA) {
+ /* If we don't reset this, Blender crash
+ * in fly mode because still have the
+ * old object here!.
+ * See Bug #22317
+ */
+ if (v3d && rv3d && rv3d->persp == RV3D_CAMOB && base->object == v3d->camera) {
+ rv3d->persp= RV3D_PERSP;
+ v3d->camera= NULL;
+ }
+ }
/* remove from current scene only */
ED_base_object_free_and_unlink(scene, base);
}
CTX_DATA_END;
if(islamp) reshadeall_displist(scene); /* only frees displist */
-
+
DAG_scene_sort(scene);
DAG_ids_flush_update(0);