diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-05-13 16:04:47 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-05-13 16:14:01 +0300 |
commit | 5159b8e1eadb3803064a97874f7ebc059ce2be32 (patch) | |
tree | 101bf4a553a7da3a2f0979db9416635d132f706e /source/blender | |
parent | 54ea3562406c633dc69f59697cca3cd1cded3bcd (diff) |
Fix extra undo step when switching object modes
Changing between modes would always add a user visible undo step
that set object mode.
Avoid storing this extra undo step on object mode switching.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/object/object_edit.c | 32 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_vertex.c | 10 |
2 files changed, 22 insertions, 20 deletions
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 6929930c26c..ab82f3c3f04 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1408,28 +1408,34 @@ static int object_mode_set_exec(bContext *C, wmOperator *op) return OPERATOR_PASS_THROUGH; } - if (ob->mode != mode) { - /* we should be able to remove this call, each operator calls */ - ED_object_mode_compat_set(C, ob, mode, op->reports); - } - - /* Exit current mode if it's not the mode we're setting */ - if (mode != OB_MODE_OBJECT && (ob->mode != mode || toggle)) { - /* Enter new mode */ - ED_object_mode_toggle(C, mode); + if (toggle == false) { + if (ob->mode != mode) { + if (mode != OB_MODE_OBJECT) { + /* Enter new mode. */ + ED_object_mode_toggle(C, mode); + } + else { + ED_object_mode_compat_set(C, ob, mode, op->reports); + } + } } + else { + /* Exit current mode if it's not the mode we're setting */ + if (mode != OB_MODE_OBJECT) { + /* Enter new mode. */ + ED_object_mode_toggle(C, mode); + } - if (toggle) { /* Special case for Object mode! */ - if (mode == OB_MODE_OBJECT && restore_mode == OB_MODE_OBJECT && - ob->restore_mode != OB_MODE_OBJECT) { + if ((mode == OB_MODE_OBJECT) && (restore_mode == OB_MODE_OBJECT) && + (ob->restore_mode != OB_MODE_OBJECT)) { ED_object_mode_toggle(C, ob->restore_mode); } else if (ob->mode == mode) { /* For toggling, store old mode so we know what to go back to */ ob->restore_mode = restore_mode; } - else if (ob->restore_mode != OB_MODE_OBJECT && ob->restore_mode != mode) { + else if ((ob->restore_mode != OB_MODE_OBJECT) && (ob->restore_mode != mode)) { ED_object_mode_toggle(C, ob->restore_mode); } } diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index d050a39ce68..296b2bae510 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -1450,8 +1450,7 @@ static int wpaint_mode_toggle_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -/* for switching to/from mode */ -static bool paint_poll_test(bContext *C) +static bool paint_mode_toggle_poll_test(bContext *C) { Object *ob = CTX_data_active_object(C); if (ob == NULL || ob->type != OB_MESH) { @@ -1460,9 +1459,6 @@ static bool paint_poll_test(bContext *C) if (!ob->data || ID_IS_LINKED(ob->data)) { return 0; } - if (CTX_data_edit_object(C)) { - return 0; - } return 1; } @@ -1476,7 +1472,7 @@ void PAINT_OT_weight_paint_toggle(wmOperatorType *ot) /* api callbacks */ ot->exec = wpaint_mode_toggle_exec; - ot->poll = paint_poll_test; + ot->poll = paint_mode_toggle_poll_test; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -2683,7 +2679,7 @@ void PAINT_OT_vertex_paint_toggle(wmOperatorType *ot) /* api callbacks */ ot->exec = vpaint_mode_toggle_exec; - ot->poll = paint_poll_test; + ot->poll = paint_mode_toggle_poll_test; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; |