Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2010-02-15 14:24:43 +0300
committerCampbell Barton <ideasman42@gmail.com>2010-02-15 14:24:43 +0300
commit882af97b4be8c692a53f0da49b68450456510bcb (patch)
treef7edaf6fd8b49134a89240c3b0fd318391e514af /source/blender/python/intern/bpy_rna.c
parent536e448e7a02053108556d7f529eca181246a82b (diff)
classes were having their dictionary cleared when the blender extension data was freed which made re-registering fail.
now extensions can be enabled and disabled without having to reload them.
Diffstat (limited to 'source/blender/python/intern/bpy_rna.c')
-rw-r--r--source/blender/python/intern/bpy_rna.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index e1338973dbd..1064b87ba61 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -4085,7 +4085,13 @@ static void bpy_class_free(void *pyob_ptr)
gilstate = PyGILState_Ensure();
- PyDict_Clear(((PyTypeObject*)self)->tp_dict);
+ // breaks re-registering classes
+ // PyDict_Clear(((PyTypeObject*)self)->tp_dict);
+ //
+ // remove the rna attribute instead.
+ PyDict_DelItemString(((PyTypeObject *)self)->tp_dict, "bl_rna");
+ if(PyErr_Occurred())
+ PyErr_Clear();
if(G.f&G_DEBUG) {
if(self->ob_refcnt > 1) {
@@ -4166,7 +4172,7 @@ PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
const char *identifier= "";
if(PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "bl_rna")) {
- PyErr_SetString(PyExc_AttributeError, "Alredy registered as a subclass.");
+ PyErr_SetString(PyExc_AttributeError, "bpy.types.register(): already registered as a subclass.");
return NULL;
}
@@ -4178,7 +4184,7 @@ PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
reg= RNA_struct_register(srna);
if(!reg) {
- PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no register supported).");
+ PyErr_SetString(PyExc_ValueError, "bpy.types.register(): expected a Type subclassed from a registerable rna type (no register supported).");
return NULL;
}
@@ -4236,6 +4242,11 @@ PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *py_class)
StructUnregisterFunc unreg;
StructRNA *srna;
+ /*if(PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "bl_rna")==NULL) {
+ PyErr_SetString(PyExc_ValueError, "bpy.types.unregister(): not a registered as a subclass.");
+ return NULL;
+ }*/
+
srna= pyrna_struct_as_srna(py_class);
if(srna==NULL)
return NULL;
@@ -4244,7 +4255,7 @@ PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *py_class)
unreg= RNA_struct_unregister(srna);
if(!unreg) {
- PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no unregister supported).");
+ PyErr_SetString(PyExc_ValueError, "bpy.types.unregister(): expected a Type subclassed from a registerable rna type (no unregister supported).");
return NULL;
}
@@ -4254,10 +4265,9 @@ PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *py_class)
/* call unregister */
unreg(C, srna); /* calls bpy_class_free, this decref's py_class */
- // odd, this doesnt seem to be needed but no idea why since its not removed, campbell
- // printf("%d\n", PyDict_DelItemString(((PyTypeObject *)py_class)->tp_dict, "bl_rna"));
- // PyErr_Clear();
+ PyDict_DelItemString(((PyTypeObject *)py_class)->tp_dict, "bl_rna");
+ if(PyErr_Occurred())
+ PyErr_Clear(); //return NULL;
Py_RETURN_NONE;
}
-