diff options
author | Joerg Mueller <nexyon@gmail.com> | 2010-08-16 13:37:08 +0400 |
---|---|---|
committer | Joerg Mueller <nexyon@gmail.com> | 2010-08-16 13:37:08 +0400 |
commit | 2b7a774ab0dfd3bc66240b387a586b5122ab2661 (patch) | |
tree | 11b863eb5c0a138dbfbc8b65d42d2724ddc80946 /source/blender/windowmanager/intern | |
parent | 02314f11d83f4ee7e0b2d3f052d36ac492cfc910 (diff) | |
parent | a91d538f47171a40463016b91c22d39d694d923a (diff) |
svn merge -r 31314:31370 https://svn.blender.org/svnroot/bf-blender/trunk/blendersoc-2010-nexyon
Diffstat (limited to 'source/blender/windowmanager/intern')
-rw-r--r-- | source/blender/windowmanager/intern/wm_dragdrop.c | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 16 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operators.c | 22 |
3 files changed, 17 insertions, 23 deletions
diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c index 3d519a5609b..18b1e7239ed 100644 --- a/source/blender/windowmanager/intern/wm_dragdrop.c +++ b/source/blender/windowmanager/intern/wm_dragdrop.c @@ -26,7 +26,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#include "string.h" +#include <string.h> #include "DNA_windowmanager_types.h" #include "DNA_screen_types.h" diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 867700980af..e1fc934ee3e 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -425,6 +425,14 @@ static void wm_operator_reports(bContext *C, wmOperator *op, int retval, int pop } } +/* this function is mainly to check that the rules for freeing + * an operator are kept in sync. + */ +static int wm_operator_register_check(wmWindowManager *wm, wmOperatorType *ot) +{ + return (wm->op_undo_depth == 0) && (ot->flag & OPTYPE_REGISTER); +} + static void wm_operator_finished(bContext *C, wmOperator *op, int repeat) { wmWindowManager *wm= CTX_wm_manager(C); @@ -445,7 +453,7 @@ static void wm_operator_finished(bContext *C, wmOperator *op, int repeat) MEM_freeN(buf); } - if((wm->op_undo_depth == 0) && (op->type->flag & OPTYPE_REGISTER)) + if(wm_operator_register_check(wm, op->type)) wm_operator_register(C, op); else WM_operator_free(op); @@ -807,11 +815,11 @@ int WM_operator_name_call(bContext *C, const char *opstring, int context, Pointe */ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA *properties, ReportList *reports) { + wmWindowManager *wm= CTX_wm_manager(C); int retval= OPERATOR_CANCELLED; #if 0 wmOperator *op; - wmWindowManager *wm= CTX_wm_manager(C); op= wm_operator_create(wm, ot, properties, reports); if (op->type->exec) { @@ -830,9 +838,9 @@ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA retval= wm_operator_call_internal(C, ot, context, properties, reports); /* keep the reports around if needed later */ - if (retval & OPERATOR_RUNNING_MODAL || ot->flag & OPTYPE_REGISTER) + if (retval & OPERATOR_RUNNING_MODAL || wm_operator_register_check(wm, ot)) { - reports->flag |= RPT_FREE; + reports->flag |= RPT_FREE; /* let blender manage freeing */ } return retval; diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 23994905b96..1df987e5626 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -30,6 +30,8 @@ #include <string.h> #include <ctype.h> #include <stdio.h> +#include <stddef.h> + #include "DNA_ID.h" #include "DNA_object_types.h" @@ -105,7 +107,7 @@ wmOperatorType *WM_operatortype_find(const char *idname, int quiet) WM_operator_bl_idname(idname_bl, idname); if (idname_bl[0]) { - ot= BLI_findstring_ptr(&global_ops, idname_bl, offsetof(wmOperatorType, idname)); + ot= (wmOperatorType *)BLI_findstring_ptr(&global_ops, idname_bl, offsetof(wmOperatorType, idname)); if(ot) { return ot; } @@ -117,22 +119,6 @@ wmOperatorType *WM_operatortype_find(const char *idname, int quiet) return NULL; } -wmOperatorType *WM_operatortype_exists(const char *idname) -{ - wmOperatorType *ot; - - char idname_bl[OP_MAX_TYPENAME]; // XXX, needed to support python style names without the _OT_ syntax - WM_operator_bl_idname(idname_bl, idname); - - if(idname_bl[0]) { - for(ot= global_ops.first; ot; ot= ot->next) { - if(strncmp(ot->idname, idname_bl, OP_MAX_TYPENAME)==0) - return ot; - } - } - return NULL; -} - wmOperatorType *WM_operatortype_first(void) { return global_ops.first; @@ -333,7 +319,7 @@ wmOperatorType *WM_operatortype_append_macro(char *idname, char *name, int flag) { wmOperatorType *ot; - if(WM_operatortype_exists(idname)) { + if(WM_operatortype_find(idname, TRUE)) { printf("Macro error: operator %s exists\n", idname); return NULL; } |