From f13c729b26befae8709a8e565a27d6fd31101d44 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Mar 2017 05:16:07 +1100 Subject: WM: free operators when repeating Needed since the active operator isn't ensured to be the last. --- source/blender/windowmanager/WM_api.h | 1 + source/blender/windowmanager/intern/wm.c | 11 +++++++++++ 2 files changed, 12 insertions(+) (limited to 'source/blender/windowmanager') diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index a33f4277a4e..1cfd20defe0 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -252,6 +252,7 @@ int WM_operator_confirm_message(struct bContext *C, struct wmOperator *o /* operator api */ void WM_operator_free (struct wmOperator *op); +void WM_operator_free_all_after(wmWindowManager *wm, struct wmOperator *op); void WM_operator_type_set(struct wmOperator *op, struct wmOperatorType *ot); void WM_operator_stack_clear(struct wmWindowManager *wm); void WM_operator_handlers_clear(wmWindowManager *wm, struct wmOperatorType *ot); diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 8fe38a97dac..4351cd22b18 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -107,6 +107,17 @@ void WM_operator_free(wmOperator *op) MEM_freeN(op); } +void WM_operator_free_all_after(wmWindowManager *wm, struct wmOperator *op) +{ + op = op->next; + while (op != NULL) { + wmOperator *op_next = op->next; + BLI_remlink(&wm->operators, op); + WM_operator_free(op); + op = op_next; + } +} + /** * Use with extreme care!, * properties, customdata etc - must be compatible. -- cgit v1.2.3