diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-01-26 18:54:42 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-01-26 18:54:42 +0300 |
commit | 8d6a40c0162fba7d64b349bb5e7370c860acbb35 (patch) | |
tree | 1fbb049d403b0271c694339cda5f30795f0e3be9 | |
parent | dcf54b9b669015b527579844fdb19a053b04c96e (diff) |
Fix #19802: tweaking the values of e.g. the add tube operator when
entering editmode on a second mesh would create a duplicate tube.
Cleaning the undo stack from the previous mesh would mess up the redo.
Also, OBJECT_OT_mode_set was causing enter/exit editmode undo push to
be done twice, now it leaves undo push to the operator it calls.
-rw-r--r-- | source/blender/editors/object/object_edit.c | 2 | ||||
-rw-r--r-- | source/blender/editors/util/editmode_undo.c | 7 |
2 files changed, 5 insertions, 4 deletions
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 4c97bf934c1..297951d283f 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -2077,7 +2077,7 @@ void OBJECT_OT_mode_set(wmOperatorType *ot) ot->poll= ED_operator_object_active_editable; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= 0; /* no register/undo here, leave it to operators being called */ prop= RNA_def_enum(ot->srna, "mode", object_mode_items, OB_MODE_OBJECT, "Mode", ""); RNA_def_enum_funcs(prop, object_mode_set_itemsf); diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c index 5fb93b0f8ec..a21ff088f2e 100644 --- a/source/blender/editors/util/editmode_undo.c +++ b/source/blender/editors/util/editmode_undo.c @@ -203,7 +203,6 @@ static void undo_clean_stack(bContext *C) { UndoElem *uel, *next; Object *obedit= CTX_data_edit_object(C); - int mixed= 0; /* global undo changes pointers, so we also allow identical names */ /* side effect: when deleting/renaming object and start editing new one with same name */ @@ -226,7 +225,9 @@ static void undo_clean_stack(bContext *C) if(isvalid) uel->ob= obedit; else { - mixed= 1; + if(uel == curundo) + curundo= NULL; + uel->freedata(uel->undodata); BLI_freelinkN(&undobase, uel); } @@ -234,7 +235,7 @@ static void undo_clean_stack(bContext *C) uel= next; } - if(mixed) curundo= undobase.last; + if(curundo == NULL) curundo= undobase.last; } /* 1= an undo, -1 is a redo. we have to make sure 'curundo' remains at current situation */ |