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;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user