diff options
Diffstat (limited to 'source/blender/editors/object/object_edit.c')
-rw-r--r-- | source/blender/editors/object/object_edit.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index dfda294561b..08689e9b62b 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -281,6 +281,8 @@ void OBJECT_OT_restrictview_set(wmOperatorType *ot) void ED_object_exit_editmode(bContext *C, int flag) { + /* Note! only in exceptional cases should 'EM_DO_UNDO' NOT be in the flag */ + Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); int freedata = flag & EM_FREEDATA; @@ -334,7 +336,7 @@ void ED_object_exit_editmode(bContext *C, int flag) if(freedata) free_editMball(obedit); } - /* freedata only 0 now on file saves */ + /* freedata only 0 now on file saves and render */ if(freedata) { /* for example; displist make is different in editmode */ scene->obedit= NULL; // XXX for context @@ -344,15 +346,16 @@ void ED_object_exit_editmode(bContext *C, int flag) /* also flush ob recalc, doesn't take much overhead, but used for particles */ DAG_id_flush_update(&obedit->id, OB_RECALC_OB|OB_RECALC_DATA); - ED_undo_push(C, "Editmode"); + if(flag & EM_DO_UNDO) + ED_undo_push(C, "Editmode"); if(flag & EM_WAITCURSOR) waitcursor(0); WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, scene); - } - obedit->mode &= ~OB_MODE_EDIT; - ED_object_toggle_modes(C, obedit->restore_mode); + obedit->mode &= ~OB_MODE_EDIT; + ED_object_toggle_modes(C, obedit->restore_mode); + } } @@ -472,7 +475,7 @@ static int editmode_toggle_exec(bContext *C, wmOperator *op) if(!CTX_data_edit_object(C)) ED_object_enter_editmode(C, EM_WAITCURSOR); else - ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); + ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR|EM_DO_UNDO); return OPERATOR_FINISHED; } @@ -512,7 +515,7 @@ static int posemode_exec(bContext *C, wmOperator *op) if(base->object->type==OB_ARMATURE) { if(base->object==CTX_data_edit_object(C)) { - ED_object_exit_editmode(C, EM_FREEDATA); + ED_object_exit_editmode(C, EM_FREEDATA|EM_DO_UNDO); ED_armature_enter_posemode(C, base); } else if(base->object->mode & OB_MODE_POSE) @@ -549,7 +552,7 @@ void check_editmode(int type) if (obedit==NULL || obedit->type==type) return; -// XXX ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */ +// XXX ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR|EM_DO_UNDO); /* freedata, and undo */ } #if 0 @@ -839,6 +842,7 @@ void special_editmenu(Scene *scene, View3D *v3d) BooleanModifierData *bmd = NULL; bmd = (BooleanModifierData *)modifier_new(eModifierType_Boolean); BLI_addtail(&ob->modifiers, bmd); + modifier_unique_name(&ob->modifiers, (ModifierData*)bmd); bmd->object = base_select->object; bmd->modifier.mode |= eModifierMode_Realtime; switch(nr){ @@ -969,9 +973,10 @@ static void object_flip_subdivison_particles(Scene *scene, Object *ob, int *set, } else if(depth == 0 && *set != 0) { SubsurfModifierData *smd = (SubsurfModifierData*) modifier_new(eModifierType_Subsurf); - + BLI_addtail(&ob->modifiers, smd); - + modifier_unique_name(&ob->modifiers, (ModifierData*)smd); + if (level!=-1) { smd->levels = level; } @@ -1188,6 +1193,7 @@ static void copymenu_modifiers(Scene *scene, View3D *v3d, Object *ob) nmd = modifier_new(md->type); modifier_copyData(md, nmd); BLI_addtail(&base->object->modifiers, nmd); + modifier_unique_name(&base->object->modifiers, nmd); } copy_object_particlesystems(base->object, ob); @@ -1211,6 +1217,7 @@ static void copymenu_modifiers(Scene *scene, View3D *v3d, Object *ob) mdn = modifier_new(event); BLI_addtail(&base->object->modifiers, mdn); + modifier_unique_name(&base->object->modifiers, mdn); modifier_copyData(md, mdn); } @@ -1242,7 +1249,7 @@ static void copymenu_modifiers(Scene *scene, View3D *v3d, Object *ob) static void copy_texture_space(Object *to, Object *ob) { float *poin1= NULL, *poin2= NULL; - int texflag= 0; + short texflag= 0; if(ob->type==OB_MESH) { texflag= ((Mesh *)ob->data)->texflag; |