} wmOperator;
-/* operator type exec(), invoke() modal(), return values */
-#define OPERATOR_RUNNING_MODAL 1
-#define OPERATOR_CANCELLED 2
-#define OPERATOR_FINISHED 4
+
+/* operator type return flags: exec(), invoke() modal(), return values */
+#define OPERATOR_RUNNING_MODAL (1<<0)
+#define OPERATOR_CANCELLED (1<<1)
+#define OPERATOR_FINISHED (1<<2)
/* 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 */
-#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 */
#define OP_GRAB_POINTER 1
wm->op_undo_depth++;
retval= op->type->exec(C, op);
+ OPERATOR_RETVAL_CHECK(retval);
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
wm->op_undo_depth++;
retval= op->type->invoke(C, op, event);
+ OPERATOR_RETVAL_CHECK(retval);
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
wm->op_undo_depth++;
retval= op->type->exec(C, op);
+ OPERATOR_RETVAL_CHECK(retval);
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
wm->op_undo_depth++;
retval= op->type->exec(C, op);
+ OPERATOR_RETVAL_CHECK(retval);
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
wm->op_undo_depth++;
retval= ot->modal(C, op, event);
+ OPERATOR_RETVAL_CHECK(retval);
if(ot->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
if(opm->type->exec) {
retval= opm->type->exec(C, opm);
+ OPERATOR_RETVAL_CHECK(retval);
if (retval & OPERATOR_FINISHED) {
MacroData *md = op->customdata;
else if(opm->type->exec)
retval= opm->type->exec(C, opm);
+ OPERATOR_RETVAL_CHECK(retval);
+
BLI_movelisttolist(&op->reports->list, &opm->reports->list);
if (retval & OPERATOR_FINISHED) {
printf("macro error, calling NULL modal()\n");
else {
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 ((retval & OPERATOR_FINISHED) && opm->next) {
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))) {
- return op->type->exec(C, op);
+ const int retval= op->type->exec(C, op);
+ OPERATOR_RETVAL_CHECK(retval);
+ return retval;
}
else {
pup= uiPupMenuBegin(C, op->type->name, ICON_NONE);
if(op->type->exec)
op->type->exec(C, op);
-
#ifdef GESTURE_MEMORY
circle_select_size= rect->xmax;
#endif
if(op->type->exec)
op->type->exec(C, op);
-
}
int WM_gesture_lasso_modal(bContext *C, wmOperator *op, wmEvent *event)