RNA: pass Main rather than Context to register/unregister callbacks.
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 18 May 2011 10:56:26 +0000 (10:56 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 18 May 2011 10:56:26 +0000 (10:56 +0000)
13 files changed:
source/blender/editors/animation/keyingsets.c
source/blender/editors/include/ED_keyframing.h
source/blender/editors/util/undo.c
source/blender/makesrna/RNA_types.h
source/blender/makesrna/intern/rna_ID.c
source/blender/makesrna/intern/rna_animation.c
source/blender/makesrna/intern/rna_internal.h
source/blender/makesrna/intern/rna_render.c
source/blender/makesrna/intern/rna_ui.c
source/blender/makesrna/intern/rna_wm.c
source/blender/python/intern/bpy_rna.c
source/blender/windowmanager/WM_api.h
source/blender/windowmanager/intern/wm.c

index 04565b4c236eddf483fdadca7d98056aaa10946f..10886615976ca121523d1d91d449abcf5f772d89 100644 (file)
@@ -578,9 +578,8 @@ void ANIM_keyingset_info_register (KeyingSetInfo *ksi)
 }
 
 /* Remove the given KeyingSetInfo from the list of type infos, and also remove the builtin set if appropriate */
-void ANIM_keyingset_info_unregister (const bContext *C, KeyingSetInfo *ksi)
+void ANIM_keyingset_info_unregister (Main *bmain, KeyingSetInfo *ksi)
 {
-       Main *bmain= CTX_data_main(C);
        KeyingSet *ks, *ksn;
        
        /* find relevant builtin KeyingSets which use this, and remove them */
index 7bab563641a002c8a307436106c1f29a6ab12dd4..6523a89771361f029dcf3008bc286a4eacb68a06 100644 (file)
@@ -36,6 +36,7 @@
 extern "C" {
 #endif
 
+struct Main;
 struct ListBase;
 struct ID;
 struct Scene;
@@ -190,7 +191,7 @@ KeyingSetInfo *ANIM_keyingset_info_find_named(const char name[]);
 
 /* for RNA type registrations... */
 void ANIM_keyingset_info_register(KeyingSetInfo *ksi);
-void ANIM_keyingset_info_unregister(const struct bContext *C, KeyingSetInfo *ksi);
+void ANIM_keyingset_info_unregister(struct Main *bmain, KeyingSetInfo *ksi);
 
 /* cleanup on exit */
 void ANIM_keyingset_infos_exit(void);
index 60f551afa6ee0623a9d420159533cfac8c447da4..9ac44f482a1fc5de98db8319c51360757b3cf7fc 100644 (file)
@@ -260,7 +260,7 @@ int ED_undo_valid(const bContext *C, const char *undoname)
 static int ed_undo_exec(bContext *C, wmOperator *UNUSED(op))
 {
        /* "last operator" should disappear, later we can tie ths with undo stack nicer */
-       WM_operator_stack_clear(C);
+       WM_operator_stack_clear(CTX_wm_manager(C));
        return ed_undo_step(C, 1, NULL);
 }
 
index 3a15146770f3f36e702aa801810b69a1e8a1c59e..86d1e12a1985218cea23caa2b9e6f7ba0f81425a 100644 (file)
@@ -43,6 +43,7 @@ struct StructRNA;
 struct BlenderRNA;
 struct IDProperty;
 struct bContext;
+struct Main;
 struct ReportList;
 
 /** Pointer
@@ -329,9 +330,9 @@ typedef enum StructFlag {
 typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function);
 typedef int (*StructCallbackFunc)(struct bContext *C, struct PointerRNA *ptr, struct FunctionRNA *func, ParameterList *list);
 typedef void (*StructFreeFunc)(void *data);
-typedef struct StructRNA *(*StructRegisterFunc)(struct bContext *C, struct ReportList *reports, void *data,
+typedef struct StructRNA *(*StructRegisterFunc)(struct Main *bmain, struct ReportList *reports, void *data,
        const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
-typedef void (*StructUnregisterFunc)(const struct bContext *C, struct StructRNA *type);
+typedef void (*StructUnregisterFunc)(struct Main *bmain, struct StructRNA *type);
 
 typedef struct StructRNA StructRNA;
 
index bde7c99c7dfadf1051192e4a153991888b44a8d7..90edbaaadf0b977b9b26930c2317ab3b9f433618 100644 (file)
@@ -210,12 +210,12 @@ IDProperty *rna_PropertyGroup_idprops(PointerRNA *ptr, int create)
        return ptr->data;
 }
 
-void rna_PropertyGroup_unregister(const bContext *C, StructRNA *type)
+void rna_PropertyGroup_unregister(Main *bmain, StructRNA *type)
 {
        RNA_struct_free(&BLENDER_RNA, type);
 }
 
-StructRNA *rna_PropertyGroup_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+StructRNA *rna_PropertyGroup_register(Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
 {
        PointerRNA dummyptr;
 
index 106c51865fdd3c1df4a9419612f18b30ea60a15d..d60dc34fea21ffac18560e14af7d488de5adc2f3 100644 (file)
@@ -188,7 +188,7 @@ static StructRNA *rna_KeyingSetInfo_refine(PointerRNA *ptr)
        return (ksi->ext.srna)? ksi->ext.srna: &RNA_KeyingSetInfo;
 }
 
-static void rna_KeyingSetInfo_unregister(const bContext *C, StructRNA *type)
+static void rna_KeyingSetInfo_unregister(Main *bmain, StructRNA *type)
 {
        KeyingSetInfo *ksi= RNA_struct_blender_type_get(type);
 
@@ -200,10 +200,10 @@ static void rna_KeyingSetInfo_unregister(const bContext *C, StructRNA *type)
        RNA_struct_free(&BLENDER_RNA, type);
        
        /* unlink Blender-side data */
-       ANIM_keyingset_info_unregister(C, ksi);
+       ANIM_keyingset_info_unregister(bmain, ksi);
 }
 
-static StructRNA *rna_KeyingSetInfo_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+static StructRNA *rna_KeyingSetInfo_register(Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
 {
        KeyingSetInfo dummyksi = {NULL};
        KeyingSetInfo *ksi;
@@ -226,7 +226,7 @@ static StructRNA *rna_KeyingSetInfo_register(bContext *C, ReportList *reports, v
        /* check if we have registered this info before, and remove it */
        ksi = ANIM_keyingset_info_find_named(dummyksi.idname);
        if (ksi && ksi->ext.srna)
-               rna_KeyingSetInfo_unregister(C, ksi->ext.srna);
+               rna_KeyingSetInfo_unregister(bmain, ksi->ext.srna);
        
        /* create a new KeyingSetInfo type */
        ksi= MEM_callocN(sizeof(KeyingSetInfo), "python keying set info");
index 1d060c8a3624378e19156fa9c9838fe3bace0528..a9fb545ec3fc8223a7132e694b36b6fc6b4a0a5b 100644 (file)
@@ -197,8 +197,8 @@ struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
 struct IDProperty *rna_ID_idprops(struct PointerRNA *ptr, int create);
 void rna_ID_fake_user_set(struct PointerRNA *ptr, int value);
 struct IDProperty *rna_PropertyGroup_idprops(struct PointerRNA *ptr, int create);
-void rna_PropertyGroup_unregister(const struct bContext *C, struct StructRNA *type);
-struct StructRNA *rna_PropertyGroup_register(struct bContext *C, struct ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
+void rna_PropertyGroup_unregister(struct Main *bmain, struct StructRNA *type);
+struct StructRNA *rna_PropertyGroup_register(struct Main *bmain, struct ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
 struct StructRNA* rna_PropertyGroup_refine(struct PointerRNA *ptr);
 
 void rna_object_vgroup_name_index_get(struct PointerRNA *ptr, char *value, int index);
index f87eb4ca4aa554dee7a30650266df50b3fa8fdad..88722a1d30570ae87988c7bba4abf3c52edbf440 100644 (file)
@@ -101,7 +101,7 @@ static void engine_render(RenderEngine *engine, struct Scene *scene)
        RNA_parameter_list_free(&list);
 }
 
-static void rna_RenderEngine_unregister(const bContext *C, StructRNA *type)
+static void rna_RenderEngine_unregister(Main *bmain, StructRNA *type)
 {
        RenderEngineType *et= RNA_struct_blender_type_get(type);
 
@@ -113,7 +113,7 @@ static void rna_RenderEngine_unregister(const bContext *C, StructRNA *type)
        RNA_struct_free(&BLENDER_RNA, type);
 }
 
-static StructRNA *rna_RenderEngine_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+static StructRNA *rna_RenderEngine_register(Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
 {
        RenderEngineType *et, dummyet = {NULL};
        RenderEngine dummyengine= {NULL};
@@ -137,7 +137,7 @@ static StructRNA *rna_RenderEngine_register(bContext *C, ReportList *reports, vo
        for(et=R_engines.first; et; et=et->next) {
                if(strcmp(et->idname, dummyet.idname) == 0) {
                        if(et->ext.srna)
-                               rna_RenderEngine_unregister(C, et->ext.srna);
+                               rna_RenderEngine_unregister(bmain, et->ext.srna);
                        break;
                }
        }
index b5c6de679b22f5ec98437c1283b230d170e50934..5fe4d21c1ae8fd377662b5c546e2b51043e3ad33 100644 (file)
@@ -148,7 +148,7 @@ static void panel_draw_header(const bContext *C, Panel *pnl)
        RNA_parameter_list_free(&list);
 }
 
-static void rna_Panel_unregister(const bContext *C, StructRNA *type)
+static void rna_Panel_unregister(Main *bmain, StructRNA *type)
 {
        ARegionType *art;
        PanelType *pt= RNA_struct_blender_type_get(type);
@@ -164,11 +164,10 @@ static void rna_Panel_unregister(const bContext *C, StructRNA *type)
        RNA_struct_free(&BLENDER_RNA, type);
 
        /* update while blender is running */
-       if(C)
-               WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+       WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
 }
 
-static StructRNA *rna_Panel_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+static StructRNA *rna_Panel_register(Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
 {
        ARegionType *art;
        PanelType *pt, dummypt = {NULL};
@@ -196,7 +195,7 @@ static StructRNA *rna_Panel_register(bContext *C, ReportList *reports, void *dat
        for(pt=art->paneltypes.first; pt; pt=pt->next) {
                if(strcmp(pt->idname, dummypt.idname) == 0) {
                        if(pt->ext.srna)
-                               rna_Panel_unregister(C, pt->ext.srna);
+                               rna_Panel_unregister(bmain, pt->ext.srna);
                        else
                                BLI_freelinkN(&art->paneltypes, pt);
                        break;
@@ -233,8 +232,7 @@ static StructRNA *rna_Panel_register(bContext *C, ReportList *reports, void *dat
                BLI_addtail(&art->paneltypes, pt);
 
        /* update while blender is running */
-       if(C)
-               WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+       WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
        
        return pt->ext.srna;
 }
@@ -263,7 +261,7 @@ static void header_draw(const bContext *C, Header *hdr)
        RNA_parameter_list_free(&list);
 }
 
-static void rna_Header_unregister(const bContext *C, StructRNA *type)
+static void rna_Header_unregister(Main *bmain, StructRNA *type)
 {
        ARegionType *art;
        HeaderType *ht= RNA_struct_blender_type_get(type);
@@ -279,11 +277,10 @@ static void rna_Header_unregister(const bContext *C, StructRNA *type)
        RNA_struct_free(&BLENDER_RNA, type);
 
        /* update while blender is running */
-       if(C)
-               WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+       WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
 }
 
-static StructRNA *rna_Header_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+static StructRNA *rna_Header_register(Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
 {
        ARegionType *art;
        HeaderType *ht, dummyht = {NULL};
@@ -311,7 +308,7 @@ static StructRNA *rna_Header_register(bContext *C, ReportList *reports, void *da
        for(ht=art->headertypes.first; ht; ht=ht->next) {
                if(strcmp(ht->idname, dummyht.idname) == 0) {
                        if(ht->ext.srna)
-                               rna_Header_unregister(C, ht->ext.srna);
+                               rna_Header_unregister(bmain, ht->ext.srna);
                        break;
                }
        }
@@ -331,8 +328,7 @@ static StructRNA *rna_Header_register(bContext *C, ReportList *reports, void *da
        BLI_addtail(&art->headertypes, ht);
 
        /* update while blender is running */
-       if(C)
-               WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+       WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
        
        return ht->ext.srna;
 }
@@ -384,7 +380,7 @@ static void menu_draw(const bContext *C, Menu *hdr)
        RNA_parameter_list_free(&list);
 }
 
-static void rna_Menu_unregister(const bContext *C, StructRNA *type)
+static void rna_Menu_unregister(Main *bmain, StructRNA *type)
 {
        MenuType *mt= RNA_struct_blender_type_get(type);
 
@@ -398,11 +394,10 @@ static void rna_Menu_unregister(const bContext *C, StructRNA *type)
        RNA_struct_free(&BLENDER_RNA, type);
 
        /* update while blender is running */
-       if(C)
-               WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+       WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
 }
 
-static StructRNA *rna_Menu_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+static StructRNA *rna_Menu_register(Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
 {
        MenuType *mt, dummymt = {NULL};
        Menu dummymenu= {NULL};
@@ -425,7 +420,7 @@ static StructRNA *rna_Menu_register(bContext *C, ReportList *reports, void *data
        /* check if we have registered this menu type before, and remove it */
        mt= WM_menutype_find(dummymt.idname, TRUE);
        if(mt && mt->ext.srna)
-               rna_Menu_unregister(C, mt->ext.srna);
+               rna_Menu_unregister(bmain, mt->ext.srna);
        
        /* create a new menu type */
        mt= MEM_callocN(sizeof(MenuType), "python buttons menu");
@@ -444,8 +439,7 @@ static StructRNA *rna_Menu_register(bContext *C, ReportList *reports, void *data
        WM_menutype_add(mt);
 
        /* update while blender is running */
-       if(C)
-               WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+       WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
        
        return mt->ext.srna;
 }
index 4c79c27e0de30342f98151dcace4087b31f889cf..b6d22def81e85f925f6eeeda9ba381f9651ebf14 100644 (file)
@@ -669,19 +669,20 @@ static void rna_wmClipboard_set(PointerRNA *ptr, const char *value)
 }
 
 #ifdef WITH_PYTHON
-static void rna_Operator_unregister(const bContext *C, StructRNA *type)
+static void rna_Operator_unregister(struct Main *bmain, StructRNA *type)
 {
        const char *idname;
        wmOperatorType *ot= RNA_struct_blender_type_get(type);
+       wmWindowManager *wm;
 
        if(!ot)
                return;
 
        /* update while blender is running */
-       if(C) {
-               WM_operator_stack_clear((bContext*)C);
-               WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
-       }
+       wm= bmain->wm.first;
+       if(wm)
+               WM_operator_stack_clear(wm);
+       WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
 
        RNA_struct_free_extension(type, &ot->ext);
 
@@ -858,7 +859,7 @@ void macro_wrapper(wmOperatorType *ot, void *userdata);
 static char _operator_idname[OP_MAX_TYPENAME];
 static char _operator_name[OP_MAX_TYPENAME];
 static char _operator_descr[1024];
-static StructRNA *rna_Operator_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+static StructRNA *rna_Operator_register(Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
 {
        wmOperatorType dummyot = {NULL};
        wmOperator dummyop= {NULL};
@@ -935,7 +936,7 @@ static StructRNA *rna_Operator_register(bContext *C, ReportList *reports, void *
        {
                wmOperatorType *ot= WM_operatortype_find(dummyot.idname, TRUE);
                if(ot && ot->ext.srna)
-                       rna_Operator_unregister(C, ot->ext.srna);
+                       rna_Operator_unregister(bmain, ot->ext.srna);
        }
 
        /* create a new menu type */
@@ -955,14 +956,13 @@ static StructRNA *rna_Operator_register(bContext *C, ReportList *reports, void *
        WM_operatortype_append_ptr(operator_wrapper, (void *)&dummyot);
 
        /* update while blender is running */
-       if(C)
-               WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+       WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
 
        return dummyot.ext.srna;
 }
 
 
-static StructRNA *rna_MacroOperator_register(bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+static StructRNA *rna_MacroOperator_register(Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
 {
        wmOperatorType dummyot = {NULL};
        wmOperator dummyop= {NULL};
@@ -1006,7 +1006,7 @@ static StructRNA *rna_MacroOperator_register(bContext *C, ReportList *reports, v
        {
                wmOperatorType *ot= WM_operatortype_find(dummyot.idname, TRUE);
                if(ot && ot->ext.srna)
-                       rna_Operator_unregister(C, ot->ext.srna);
+                       rna_Operator_unregister(bmain, ot->ext.srna);
        }
 
        /* create a new menu type */
@@ -1021,8 +1021,7 @@ static StructRNA *rna_MacroOperator_register(bContext *C, ReportList *reports, v
        WM_operatortype_append_macro_ptr(macro_wrapper, (void *)&dummyot);
 
        /* update while blender is running */
-       if(C)
-               WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+       WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
 
        return dummyot.ext.srna;
 }
index 8af0db6ee13b8ea77b50f00a05a753758b4103ae..917015b905ba410b84ddef08058d29963954a860 100644 (file)
@@ -6418,7 +6418,7 @@ static PyObject *pyrna_register_class(PyObject *UNUSED(self), PyObject *py_class
 
        identifier= ((PyTypeObject*)py_class)->tp_name;
 
-       srna_new= reg(C, &reports, py_class, identifier, bpy_class_validate, bpy_class_call, bpy_class_free);
+       srna_new= reg(CTX_data_main(C), &reports, py_class, identifier, bpy_class_validate, bpy_class_call, bpy_class_free);
 
        if(BPy_reports_to_error(&reports, PyExc_RuntimeError, TRUE) == -1)
                return NULL;
@@ -6568,7 +6568,7 @@ static PyObject *pyrna_unregister_class(PyObject *UNUSED(self), PyObject *py_cla
        C= BPy_GetContext();
 
        /* call unregister */
-       unreg(C, srna); /* calls bpy_class_free, this decref's py_class */
+       unreg(CTX_data_main(C), srna); /* calls bpy_class_free, this decref's py_class */
 
        PyDict_DelItemString(((PyTypeObject *)py_class)->tp_dict, "bl_rna");
        if(PyErr_Occurred())
index 5ab37e8856a18f5b309610bb4c4a94bc5c93c0e1..e08e681f494811019ea8b54a3103c6e4dd3f2630 100644 (file)
@@ -216,7 +216,7 @@ int                 WM_operator_confirm_message(struct bContext *C, struct wmOperator *op, con
 
                /* operator api */
 void           WM_operator_free                (struct wmOperator *op);
-void           WM_operator_stack_clear(struct bContext *C);
+void           WM_operator_stack_clear(struct wmWindowManager *wm);
 
 struct wmOperatorType *WM_operatortype_find(const char *idnamem, int quiet);
 struct wmOperatorType *WM_operatortype_first(void);
index 424c13f089f0cd29b6fc165926027dca3ea5ca91..bcd5cf38f8835740c1ec7dbe4101727db099f12b 100644 (file)
@@ -137,9 +137,8 @@ void wm_operator_register(bContext *C, wmOperator *op)
 }
 
 
-void WM_operator_stack_clear(bContext *C)
+void WM_operator_stack_clear(wmWindowManager *wm)
 {
-       wmWindowManager *wm= CTX_wm_manager(C);
        wmOperator *op;
        
        while((op= wm->operators.first)) {
@@ -147,7 +146,7 @@ void WM_operator_stack_clear(bContext *C)
                WM_operator_free(op);
        }
        
-       WM_event_add_notifier(C, NC_WM|ND_HISTORY, NULL);
+       WM_main_add_notifier(NC_WM|ND_HISTORY, NULL);
 }
 
 /* ****************************************** */