From 76ec329dd1de6b94b74abf4ee6728266b15fb31d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Mar 2017 03:43:44 +1100 Subject: WM: add Operator.is_repeat() check for C & Py This addresses an issue raised by D2453 - that there was no way to check if operators are run multiple times in a row. Actions are still ignored that don't cause an UNDO event. --- source/blender/windowmanager/intern/wm_event_system.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'source/blender/windowmanager/intern') diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 282091bb814..f26ee0e73ec 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -880,6 +880,20 @@ bool WM_operator_repeat_check(const bContext *UNUSED(C), wmOperator *op) return false; } +bool WM_operator_is_repeat(const bContext *C, const wmOperator *op) +{ + /* may be in the operators list or not */ + wmOperator *op_prev; + if (op->prev == NULL && op->next == NULL) { + wmWindowManager *wm = CTX_wm_manager(C); + op_prev = wm->operators.last; + } + else { + op_prev = op->prev; + } + return (op_prev && (op->type == op_prev->type)); +} + static wmOperator *wm_operator_create(wmWindowManager *wm, wmOperatorType *ot, PointerRNA *properties, ReportList *reports) { -- cgit v1.2.3