internal operator/wm/macro function: dont crash if operators are not found (warning...
authorCampbell Barton <ideasman42@gmail.com>
Fri, 25 Feb 2011 04:15:45 +0000 (04:15 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 25 Feb 2011 04:15:45 +0000 (04:15 +0000)
source/blender/editors/armature/armature_ops.c
source/blender/windowmanager/intern/wm_operators.c

index 63a57178163fd40db770a634d54138b3cf8df9c4..26414e59a3c698514579c43b36d791e5a0e32917 100644 (file)
@@ -166,23 +166,29 @@ void ED_operatormacros_armature(void)
        wmOperatorTypeMacro *otmacro;
        
        ot= WM_operatortype_append_macro("ARMATURE_OT_duplicate_move", "Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER);
-       WM_operatortype_macro_define(ot, "ARMATURE_OT_duplicate");
-       otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
-       RNA_enum_set(otmacro->ptr, "proportional", 0);
+       if(ot) {
+               WM_operatortype_macro_define(ot, "ARMATURE_OT_duplicate");
+               otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
+               RNA_enum_set(otmacro->ptr, "proportional", 0);
+       }
 
        ot= WM_operatortype_append_macro("ARMATURE_OT_extrude_move", "Extrude", OPTYPE_UNDO|OPTYPE_REGISTER);
-       otmacro=WM_operatortype_macro_define(ot, "ARMATURE_OT_extrude");
-       RNA_enum_set(otmacro->ptr, "forked", 0);
-       otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
-       RNA_enum_set(otmacro->ptr, "proportional", 0);
+       if(ot) {
+               otmacro=WM_operatortype_macro_define(ot, "ARMATURE_OT_extrude");
+               RNA_enum_set(otmacro->ptr, "forked", 0);
+               otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
+               RNA_enum_set(otmacro->ptr, "proportional", 0);
+       }
        
        // XXX would it be nicer to just be able to have standard extrude_move, but set the forked property separate?
        // that would require fixing a properties bug 19733
        ot= WM_operatortype_append_macro("ARMATURE_OT_extrude_forked", "Extrude Forked", OPTYPE_UNDO|OPTYPE_REGISTER);
-       otmacro=WM_operatortype_macro_define(ot, "ARMATURE_OT_extrude");
-       RNA_enum_set(otmacro->ptr, "forked", 1);
-       otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
-       RNA_enum_set(otmacro->ptr, "proportional", 0);
+       if(ot) {
+               otmacro=WM_operatortype_macro_define(ot, "ARMATURE_OT_extrude");
+               RNA_enum_set(otmacro->ptr, "forked", 1);
+               otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
+               RNA_enum_set(otmacro->ptr, "proportional", 0);
+       }
 }
 
 void ED_keymap_armature(wmKeyConfig *keyconf)
index bda5db96133f12cee081bd7910ba184a47b56109..f5c19f75a5a126caf2211752fb9d698a89f19507 100644 (file)
@@ -382,21 +382,24 @@ void WM_operatortype_append_macro_ptr(void (*opfunc)(wmOperatorType*, void*), vo
 wmOperatorTypeMacro *WM_operatortype_macro_define(wmOperatorType *ot, const char *idname)
 {
        wmOperatorTypeMacro *otmacro= MEM_callocN(sizeof(wmOperatorTypeMacro), "wmOperatorTypeMacro");
-       
+
        BLI_strncpy(otmacro->idname, idname, OP_MAX_TYPENAME);
 
        /* do this on first use, since operatordefinitions might have been not done yet */
        WM_operator_properties_alloc(&(otmacro->ptr), &(otmacro->properties), idname);
        WM_operator_properties_sanitize(otmacro->ptr, 1);
-       
+
        BLI_addtail(&ot->macro, otmacro);
 
        {
+               /* operator should always be found but in the event its not. dont segfault */
                wmOperatorType *otsub = WM_operatortype_find(idname, 0);
-               RNA_def_pointer_runtime(ot->srna, otsub->idname, otsub->srna,
-               otsub->name, otsub->description);
+               if(otsub) {
+                       RNA_def_pointer_runtime(ot->srna, otsub->idname, otsub->srna,
+                       otsub->name, otsub->description);
+               }
        }
-       
+
        return otmacro;
 }