[Bf-blender-cvs] [a584aef4703] master: Undo: Further tweak/fixes the 'use context' flag of undo types.

Bastien Montagne noreply at git.blender.org
Wed Jan 6 15:59:28 CET 2021


Commit: a584aef4703aeefe0843f3b8aa2c1e863f825aef
Author: Bastien Montagne
Date:   Wed Jan 6 15:50:12 2021 +0100
Branches: master
https://developer.blender.org/rBa584aef4703aeefe0843f3b8aa2c1e863f825aef

Undo: Further tweak/fixes the 'use context' flag of undo types.

Note that this is fairly fragile still, especially in cases like paint
cureve undo, which actually does not use context in most cases (and can
be called with a NULL context), but do need it in one case. This will
need a proper rework at some point.

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

M	source/blender/editors/sculpt_paint/paint_curve_undo.c
M	source/blender/editors/space_image/image_undo.c
M	source/blender/editors/space_text/text_undo.c

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

diff --git a/source/blender/editors/sculpt_paint/paint_curve_undo.c b/source/blender/editors/sculpt_paint/paint_curve_undo.c
index 82ed4917004..c78af7c38c6 100644
--- a/source/blender/editors/sculpt_paint/paint_curve_undo.c
+++ b/source/blender/editors/sculpt_paint/paint_curve_undo.c
@@ -102,9 +102,12 @@ static bool paintcurve_undosys_step_encode(struct bContext *C,
                                            struct Main *UNUSED(bmain),
                                            UndoStep *us_p)
 {
-  if (C == NULL || !paint_curve_poll(C)) {
+  /* FIXME Double check this, it should not be needed here at all? undo system is supposed to
+   * ensure that. */
+  if (!paint_curve_poll(C)) {
     return false;
   }
+
   Paint *p = BKE_paint_get_active_from_context(C);
   PaintCurve *pc = p ? (p->brush ? p->brush->paint_curve : NULL) : NULL;
   if (pc == NULL) {
diff --git a/source/blender/editors/space_image/image_undo.c b/source/blender/editors/space_image/image_undo.c
index 8c5e2ee2f8a..6cbebd2a959 100644
--- a/source/blender/editors/space_image/image_undo.c
+++ b/source/blender/editors/space_image/image_undo.c
@@ -883,9 +883,7 @@ static bool image_undosys_step_encode(struct bContext *C,
     }
   }
   else {
-    if (C == NULL) {
-      return false;
-    }
+    BLI_assert(C != NULL);
     /* Happens when switching modes. */
     ePaintMode paint_mode = BKE_paintmode_get_active_from_context(C);
     BLI_assert(ELEM(paint_mode, PAINT_MODE_TEXTURE_2D, PAINT_MODE_TEXTURE_3D));
@@ -998,6 +996,8 @@ void ED_image_undosys_type(UndoType *ut)
 
   ut->step_foreach_ID_ref = image_undosys_foreach_ID_ref;
 
+  /* NOTE this is actually a confusing case, since it expects a valid context, but only in a
+   * specific case, see `image_undosys_step_encode` code. */
   ut->use_context_for_encode = false;
 
   ut->step_size = sizeof(ImageUndoStep);
diff --git a/source/blender/editors/space_text/text_undo.c b/source/blender/editors/space_text/text_undo.c
index c6bcbc06b2f..8bc22833502 100644
--- a/source/blender/editors/space_text/text_undo.c
+++ b/source/blender/editors/space_text/text_undo.c
@@ -183,14 +183,11 @@ static bool text_undosys_step_encode(struct bContext *C,
                                      struct Main *UNUSED(bmain),
                                      UndoStep *us_p)
 {
-  if (C == NULL) {
-    return false;
-  }
-
   TextUndoStep *us = (TextUndoStep *)us_p;
 
   Text *text = us->text_ref.ptr;
   BLI_assert(text == CTX_data_edit_text(C));
+  UNUSED_VARS_NDEBUG(C);
 
   us->step.data_size += text_undosys_step_encode_to_state(&us->states[1], text);
 
@@ -263,7 +260,7 @@ void ED_text_undosys_type(UndoType *ut)
 
   ut->step_foreach_ID_ref = text_undosys_foreach_ID_ref;
 
-  ut->use_context_for_encode = false;
+  ut->use_context_for_encode = true;
 
   ut->step_size = sizeof(TextUndoStep);
 }



More information about the Bf-blender-cvs mailing list