sanity checks on operator exec/modal/invoke return values.
This commit is contained in:
@@ -320,14 +320,20 @@ typedef struct wmOperator {
|
|||||||
|
|
||||||
} wmOperator;
|
} wmOperator;
|
||||||
|
|
||||||
/* operator type exec(), invoke() modal(), return values */
|
|
||||||
#define OPERATOR_RUNNING_MODAL 1
|
/* operator type return flags: exec(), invoke() modal(), return values */
|
||||||
#define OPERATOR_CANCELLED 2
|
#define OPERATOR_RUNNING_MODAL (1<<0)
|
||||||
#define OPERATOR_FINISHED 4
|
#define OPERATOR_CANCELLED (1<<1)
|
||||||
|
#define OPERATOR_FINISHED (1<<2)
|
||||||
/* add this flag if the event should pass through */
|
/* add this flag if the event should pass through */
|
||||||
#define OPERATOR_PASS_THROUGH 8
|
#define OPERATOR_PASS_THROUGH (1<<3)
|
||||||
/* in case operator got executed outside WM code... like via fileselect */
|
/* in case operator got executed outside WM code... like via fileselect */
|
||||||
#define OPERATOR_HANDLED 16
|
#define OPERATOR_HANDLED (1<<4)
|
||||||
|
|
||||||
|
#define OPERATOR_FLAGS_ALL ((1<<5)-1)
|
||||||
|
|
||||||
|
/* sanity checks for debug mode only */
|
||||||
|
#define OPERATOR_RETVAL_CHECK(ret) BLI_assert(ret != 0 && (ret & OPERATOR_FLAGS_ALL) == ret)
|
||||||
|
|
||||||
/* wmOperator flag */
|
/* wmOperator flag */
|
||||||
#define OP_GRAB_POINTER 1
|
#define OP_GRAB_POINTER 1
|
||||||
|
|||||||
@@ -531,6 +531,7 @@ static int wm_operator_exec(bContext *C, wmOperator *op, int repeat)
|
|||||||
wm->op_undo_depth++;
|
wm->op_undo_depth++;
|
||||||
|
|
||||||
retval= op->type->exec(C, op);
|
retval= op->type->exec(C, op);
|
||||||
|
OPERATOR_RETVAL_CHECK(retval);
|
||||||
|
|
||||||
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
||||||
wm->op_undo_depth--;
|
wm->op_undo_depth--;
|
||||||
@@ -690,6 +691,7 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P
|
|||||||
wm->op_undo_depth++;
|
wm->op_undo_depth++;
|
||||||
|
|
||||||
retval= op->type->invoke(C, op, event);
|
retval= op->type->invoke(C, op, event);
|
||||||
|
OPERATOR_RETVAL_CHECK(retval);
|
||||||
|
|
||||||
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
||||||
wm->op_undo_depth--;
|
wm->op_undo_depth--;
|
||||||
@@ -699,6 +701,7 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P
|
|||||||
wm->op_undo_depth++;
|
wm->op_undo_depth++;
|
||||||
|
|
||||||
retval= op->type->exec(C, op);
|
retval= op->type->exec(C, op);
|
||||||
|
OPERATOR_RETVAL_CHECK(retval);
|
||||||
|
|
||||||
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
||||||
wm->op_undo_depth--;
|
wm->op_undo_depth--;
|
||||||
@@ -917,6 +920,7 @@ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA
|
|||||||
wm->op_undo_depth++;
|
wm->op_undo_depth++;
|
||||||
|
|
||||||
retval= op->type->exec(C, op);
|
retval= op->type->exec(C, op);
|
||||||
|
OPERATOR_RETVAL_CHECK(retval);
|
||||||
|
|
||||||
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
||||||
wm->op_undo_depth--;
|
wm->op_undo_depth--;
|
||||||
@@ -1203,6 +1207,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand
|
|||||||
wm->op_undo_depth++;
|
wm->op_undo_depth++;
|
||||||
|
|
||||||
retval= ot->modal(C, op, event);
|
retval= ot->modal(C, op, event);
|
||||||
|
OPERATOR_RETVAL_CHECK(retval);
|
||||||
|
|
||||||
if(ot->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
if(ot->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
|
||||||
wm->op_undo_depth--;
|
wm->op_undo_depth--;
|
||||||
|
|||||||
@@ -213,6 +213,7 @@ static int wm_macro_exec(bContext *C, wmOperator *op)
|
|||||||
|
|
||||||
if(opm->type->exec) {
|
if(opm->type->exec) {
|
||||||
retval= opm->type->exec(C, opm);
|
retval= opm->type->exec(C, opm);
|
||||||
|
OPERATOR_RETVAL_CHECK(retval);
|
||||||
|
|
||||||
if (retval & OPERATOR_FINISHED) {
|
if (retval & OPERATOR_FINISHED) {
|
||||||
MacroData *md = op->customdata;
|
MacroData *md = op->customdata;
|
||||||
@@ -237,6 +238,8 @@ static int wm_macro_invoke_internal(bContext *C, wmOperator *op, wmEvent *event,
|
|||||||
else if(opm->type->exec)
|
else if(opm->type->exec)
|
||||||
retval= opm->type->exec(C, opm);
|
retval= opm->type->exec(C, opm);
|
||||||
|
|
||||||
|
OPERATOR_RETVAL_CHECK(retval);
|
||||||
|
|
||||||
BLI_movelisttolist(&op->reports->list, &opm->reports->list);
|
BLI_movelisttolist(&op->reports->list, &opm->reports->list);
|
||||||
|
|
||||||
if (retval & OPERATOR_FINISHED) {
|
if (retval & OPERATOR_FINISHED) {
|
||||||
@@ -265,6 +268,7 @@ static int wm_macro_modal(bContext *C, wmOperator *op, wmEvent *event)
|
|||||||
printf("macro error, calling NULL modal()\n");
|
printf("macro error, calling NULL modal()\n");
|
||||||
else {
|
else {
|
||||||
retval = opm->type->modal(C, opm, event);
|
retval = opm->type->modal(C, opm, event);
|
||||||
|
OPERATOR_RETVAL_CHECK(retval);
|
||||||
|
|
||||||
/* if this one is done but it's not the last operator in the macro */
|
/* if this one is done but it's not the last operator in the macro */
|
||||||
if ((retval & OPERATOR_FINISHED) && opm->next) {
|
if ((retval & OPERATOR_FINISHED) && opm->next) {
|
||||||
@@ -655,7 +659,9 @@ int WM_menu_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
|
|||||||
printf("WM_menu_invoke: %s \"%s\" is not an enum property\n", op->type->idname, RNA_property_identifier(prop));
|
printf("WM_menu_invoke: %s \"%s\" is not an enum property\n", op->type->idname, RNA_property_identifier(prop));
|
||||||
}
|
}
|
||||||
else if (RNA_property_is_set(op->ptr, RNA_property_identifier(prop))) {
|
else if (RNA_property_is_set(op->ptr, RNA_property_identifier(prop))) {
|
||||||
return op->type->exec(C, op);
|
const int retval= op->type->exec(C, op);
|
||||||
|
OPERATOR_RETVAL_CHECK(retval);
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pup= uiPupMenuBegin(C, op->type->name, ICON_NONE);
|
pup= uiPupMenuBegin(C, op->type->name, ICON_NONE);
|
||||||
@@ -2345,7 +2351,6 @@ static void gesture_circle_apply(bContext *C, wmOperator *op)
|
|||||||
|
|
||||||
if(op->type->exec)
|
if(op->type->exec)
|
||||||
op->type->exec(C, op);
|
op->type->exec(C, op);
|
||||||
|
|
||||||
#ifdef GESTURE_MEMORY
|
#ifdef GESTURE_MEMORY
|
||||||
circle_select_size= rect->xmax;
|
circle_select_size= rect->xmax;
|
||||||
#endif
|
#endif
|
||||||
@@ -2566,7 +2571,6 @@ static void gesture_lasso_apply(bContext *C, wmOperator *op)
|
|||||||
|
|
||||||
if(op->type->exec)
|
if(op->type->exec)
|
||||||
op->type->exec(C, op);
|
op->type->exec(C, op);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int WM_gesture_lasso_modal(bContext *C, wmOperator *op, wmEvent *event)
|
int WM_gesture_lasso_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||||
|
|||||||
Reference in New Issue
Block a user