Fix mode switching error on undo
For 2.8 there is already a utility function for this, wrap it - avoiding an undo step.
This commit is contained in:
@@ -156,42 +156,11 @@ void ED_object_mode_toggle(bContext *C, eObjectMode mode)
|
||||
/* Wrapper for operator */
|
||||
void ED_object_mode_set(bContext *C, eObjectMode mode)
|
||||
{
|
||||
#if 0
|
||||
wmOperatorType *ot = WM_operatortype_find("OBJECT_OT_mode_set", false);
|
||||
PointerRNA ptr;
|
||||
|
||||
WM_operator_properties_create_ptr(&ptr, ot);
|
||||
RNA_enum_set(&ptr, "mode", mode);
|
||||
RNA_boolean_set(&ptr, "toggle", false);
|
||||
WM_operator_name_call_ptr(C, ot, WM_OP_EXEC_DEFAULT, &ptr);
|
||||
WM_operator_properties_free(&ptr);
|
||||
#else
|
||||
const WorkSpace *workspace = CTX_wm_workspace(C);
|
||||
Object *ob = CTX_data_active_object(C);
|
||||
if (ob == NULL) {
|
||||
return;
|
||||
}
|
||||
if (workspace->object_mode == mode) {
|
||||
/* pass */
|
||||
}
|
||||
else if (workspace->object_mode != OB_MODE_OBJECT) {
|
||||
if (ob && (workspace->object_mode & mode) == 0) {
|
||||
/* needed so we don't do undo pushes. */
|
||||
wmWindowManager *wm = CTX_wm_manager(C);
|
||||
wm->op_undo_depth++;
|
||||
ED_object_mode_toggle(C, mode);
|
||||
wm->op_undo_depth--;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* needed so we don't do undo pushes. */
|
||||
wmWindowManager *wm = CTX_wm_manager(C);
|
||||
wm->op_undo_depth++;
|
||||
ED_object_mode_toggle(C, workspace->object_mode);
|
||||
wm->op_undo_depth--;
|
||||
|
||||
}
|
||||
#endif
|
||||
wmWindowManager *wm = CTX_wm_manager(C);
|
||||
wm->op_undo_depth++;
|
||||
/* needed so we don't do undo pushes. */
|
||||
ED_object_mode_generic_enter(C, mode);
|
||||
wm->op_undo_depth--;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
Reference in New Issue
Block a user