[Bf-blender-cvs] [5159b8e1ead] blender-v2.83-release: Fix extra undo step when switching object modes

Campbell Barton noreply at git.blender.org
Wed May 13 15:15:10 CEST 2020


Commit: 5159b8e1eadb3803064a97874f7ebc059ce2be32
Author: Campbell Barton
Date:   Wed May 13 23:04:47 2020 +1000
Branches: blender-v2.83-release
https://developer.blender.org/rB5159b8e1eadb3803064a97874f7ebc059ce2be32

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.

===================================================================

M	source/blender/editors/object/object_edit.c
M	source/blender/editors/sculpt_paint/paint_vertex.c

===================================================================

diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 6929930c26c..ab82f3c3f04 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -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);
-  }
-
-  /* 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 == 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);
+    }
 
-  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);
     }
   }
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index d050a39ce68..296b2bae510 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -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;



More information about the Bf-blender-cvs mailing list