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:
parent
54ea356240
commit
5159b8e1ea
Notes:
blender-bot
2023-02-14 07:17:43 +01:00
Referenced by commitc204e3348c
, Fix T77217: Object mode toggle doesn't work Referenced by commit1afa97d547
, Fix T76859: Cannot switch from editmode to texturepaint mode Referenced by issue #76859, Cannot switch from editmode to texturepaint mode
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue