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:
@@ -1408,28 +1408,34 @@ static int object_mode_set_exec(bContext *C, wmOperator *op)
|
|||||||
return OPERATOR_PASS_THROUGH;
|
return OPERATOR_PASS_THROUGH;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ob->mode != mode) {
|
if (toggle == false) {
|
||||||
/* we should be able to remove this call, each operator calls */
|
if (ob->mode != mode) {
|
||||||
ED_object_mode_compat_set(C, ob, mode, op->reports);
|
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! */
|
/* Special case for Object mode! */
|
||||||
if (mode == OB_MODE_OBJECT && restore_mode == OB_MODE_OBJECT &&
|
if ((mode == OB_MODE_OBJECT) && (restore_mode == OB_MODE_OBJECT) &&
|
||||||
ob->restore_mode != OB_MODE_OBJECT) {
|
(ob->restore_mode != OB_MODE_OBJECT)) {
|
||||||
ED_object_mode_toggle(C, ob->restore_mode);
|
ED_object_mode_toggle(C, ob->restore_mode);
|
||||||
}
|
}
|
||||||
else if (ob->mode == mode) {
|
else if (ob->mode == mode) {
|
||||||
/* For toggling, store old mode so we know what to go back to */
|
/* For toggling, store old mode so we know what to go back to */
|
||||||
ob->restore_mode = restore_mode;
|
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);
|
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;
|
return OPERATOR_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for switching to/from mode */
|
static bool paint_mode_toggle_poll_test(bContext *C)
|
||||||
static bool paint_poll_test(bContext *C)
|
|
||||||
{
|
{
|
||||||
Object *ob = CTX_data_active_object(C);
|
Object *ob = CTX_data_active_object(C);
|
||||||
if (ob == NULL || ob->type != OB_MESH) {
|
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)) {
|
if (!ob->data || ID_IS_LINKED(ob->data)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (CTX_data_edit_object(C)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1476,7 +1472,7 @@ void PAINT_OT_weight_paint_toggle(wmOperatorType *ot)
|
|||||||
|
|
||||||
/* api callbacks */
|
/* api callbacks */
|
||||||
ot->exec = wpaint_mode_toggle_exec;
|
ot->exec = wpaint_mode_toggle_exec;
|
||||||
ot->poll = paint_poll_test;
|
ot->poll = paint_mode_toggle_poll_test;
|
||||||
|
|
||||||
/* flags */
|
/* flags */
|
||||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||||
@@ -2683,7 +2679,7 @@ void PAINT_OT_vertex_paint_toggle(wmOperatorType *ot)
|
|||||||
|
|
||||||
/* api callbacks */
|
/* api callbacks */
|
||||||
ot->exec = vpaint_mode_toggle_exec;
|
ot->exec = vpaint_mode_toggle_exec;
|
||||||
ot->poll = paint_poll_test;
|
ot->poll = paint_mode_toggle_poll_test;
|
||||||
|
|
||||||
/* flags */
|
/* flags */
|
||||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||||
|
|||||||
Reference in New Issue
Block a user