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.
This commit is contained in:
Campbell Barton 2020-05-13 23:04:47 +10:00
parent 54ea356240
commit 5159b8e1ea
Notes: blender-bot 2023-02-14 07:17:43 +01:00
Referenced by commit c204e3348c, Fix T77217: Object mode toggle doesn't work
Referenced by commit 1afa97d547, Fix T76859: Cannot switch from editmode to texturepaint mode
Referenced by issue #76859, Cannot switch from editmode to texturepaint mode
2 changed files with 22 additions and 20 deletions

View File

@ -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);
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);
}
/* 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) {
/* 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);
}
}

View File

@ -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;