run WM_exit(C) when blender as a python module exits
authorCampbell Barton <ideasman42@gmail.com>
Sun, 10 Jul 2011 18:54:02 +0000 (18:54 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 10 Jul 2011 18:54:02 +0000 (18:54 +0000)
source/blender/python/intern/bpy_interface.c
source/creator/creator.c

index 422d55ecefe241a34696b27b08a2de4ce31334fb..f091a511e933948648c1268810e2c2b466b4c3c3 100644 (file)
@@ -663,7 +663,9 @@ int BPY_context_member_get(bContext *C, const char *member, bContextDataResult *
 #include "BLI_storage.h"
 /* TODO, reloading the module isnt functional at the moment. */
 
-extern int main_python(int argc, const char **argv);
+static void bpy_module_free(void *mod);
+extern int main_python_enter(int argc, const char **argv);
+extern void main_python_exit(void);
 static struct PyModuleDef bpy_proxy_def= {
        PyModuleDef_HEAD_INIT,
        "bpy",  /* m_name */
@@ -673,8 +675,8 @@ static struct PyModuleDef bpy_proxy_def= {
        NULL,  /* m_reload */
        NULL,  /* m_traverse */
        NULL,  /* m_clear */
-       NULL,  /* m_free */
-};     
+       bpy_module_free,  /* m_free */
+};
 
 typedef struct {
        PyObject_HEAD
@@ -699,7 +701,7 @@ void bpy_module_delay_init(PyObject *bpy_proxy)
        
        // printf("module found %s\n", argv[0]);
 
-       main_python(argc, argv);
+       main_python_enter(argc, argv);
 
        /* initialized in BPy_init_modules() */
        PyDict_Update(PyModule_GetDict(bpy_proxy), PyModule_GetDict(bpy_package_py));
@@ -756,4 +758,9 @@ PyInit_bpy(void)
        return bpy_proxy;
 }
 
+static void bpy_module_free(void *UNUSED(mod))
+{
+       main_python_exit();
+}
+
 #endif
index a8b24d0c9bcbc4938deef8cd8e403d972895ba59..fddd6d286dbd6533832121d7eb7210d73c84150f 100644 (file)
@@ -1134,7 +1134,8 @@ static void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
 
 #ifdef WITH_PYTHON_MODULE
 /* allow python module to call main */
-#define main main_python
+#define main main_python_enter
+static void *evil_C= NULL;
 #endif
 
 int main(int argc, const char **argv)
@@ -1145,6 +1146,7 @@ int main(int argc, const char **argv)
 
 #ifdef WITH_PYTHON_MODULE
 #undef main
+       evil_C= C;
 #endif
 
 #ifdef WITH_BINRELOC
@@ -1313,6 +1315,14 @@ int main(int argc, const char **argv)
        return 0;
 } /* end of int main(argc,argv)        */
 
+#ifdef WITH_PYTHON_MODULE
+void main_python_exit(void)
+{
+       WM_exit((bContext *)evil_C);
+       evil_C= NULL;
+}
+#endif
+
 static void error_cb(const char *err)
 {