diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-07-10 22:54:02 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-07-10 22:54:02 +0400 |
commit | 80eb1eae42940664452d7d4ec94a6a383a8c1e9d (patch) | |
tree | 04d92a0523f8eb7e4a2994c53c42cf401003782c /source | |
parent | 1f6a79ecb59e958385544270c6226f6419c12ecd (diff) |
run WM_exit(C) when blender as a python module exits
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/python/intern/bpy_interface.c | 15 | ||||
-rw-r--r-- | source/creator/creator.c | 12 |
2 files changed, 22 insertions, 5 deletions
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 422d55ecefe..f091a511e93 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -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 diff --git a/source/creator/creator.c b/source/creator/creator.c index a8b24d0c9bc..fddd6d286db 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -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) { |