Operators: add a new flag stating that operator needs access to evaluated data.
For now, that flag is only used in redo code, since after undo step depsgraph is totally empty... We *may* want to add at least an assert in op calling code too, though?
This commit is contained in:
@@ -48,6 +48,7 @@
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_scene.h"
|
||||
#include "BKE_screen.h"
|
||||
#include "BKE_layer.h"
|
||||
#include "BKE_undo_system.h"
|
||||
@@ -414,6 +415,15 @@ int ED_undo_operator_repeat(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
if (op->type->flag & OPTYPE_USE_EVAL_DATA) {
|
||||
/* We need to force refresh of depsgraph after undo step,
|
||||
* redoing the operator *may* rely on some valid evaluated data. */
|
||||
Main *bmain = CTX_data_main(C);
|
||||
scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
BKE_scene_view_layer_graph_evaluated_ensure(bmain, scene, view_layer);
|
||||
}
|
||||
|
||||
retval = WM_operator_repeat(C, op);
|
||||
if ((retval & OPERATOR_FINISHED) == 0) {
|
||||
if (G.debug & G_DEBUG)
|
||||
|
||||
@@ -432,6 +432,8 @@ static const EnumPropertyItem operator_flag_items[] = {
|
||||
"is enabled"},
|
||||
{OPTYPE_PRESET, "PRESET", 0, "Preset", "Display a preset button with the operators settings"},
|
||||
{OPTYPE_INTERNAL, "INTERNAL", 0, "Internal", "Removes the operator from search results"},
|
||||
{OPTYPE_USE_EVAL_DATA, "USE_EVAL_DATA", 0, "Use Evaluated Data",
|
||||
"Uses evaluated data (i.e. needs a valid depsgraph for current context)"},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -145,6 +145,7 @@ enum {
|
||||
|
||||
OPTYPE_LOCK_BYPASS = (1 << 7), /* Allow operator to run when interface is locked */
|
||||
OPTYPE_UNDO_GROUPED = (1 << 8), /* Special type of undo which doesn't store itself multiple times */
|
||||
OPTYPE_USE_EVAL_DATA = (1 << 9), /* Need evaluated data (i.e. a valid, up-to-date depsgraph for current context) */
|
||||
};
|
||||
|
||||
/* context to call operator in for WM_operator_name_call */
|
||||
|
||||
Reference in New Issue
Block a user