From b36a05bb7e794335e3415594c41d3986cdc815e8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 10 Jan 2010 20:01:13 +0000 Subject: - fix for crash if drivers were used in the .B.blend - fix for problem where proxy objects could enter editmode but not exit --- source/blender/editors/object/object_edit.c | 4 ++++ source/blender/python/intern/bpy_interface.c | 5 +++++ source/blender/windowmanager/WM_api.h | 2 +- source/blender/windowmanager/intern/wm_init_exit.c | 15 ++++++++++++--- 4 files changed, 22 insertions(+), 4 deletions(-) (limited to 'source/blender') diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 9ef1fafff82..54fa3f51eb6 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -499,6 +499,10 @@ static int editmode_toggle_poll(bContext *C) { Object *ob = CTX_data_active_object(C); + /* covers proxies too */ + if(ob->data==NULL || ((ID *)ob->data)->lib) + return 0; + return ob && (ob->type == OB_MESH || ob->type == OB_ARMATURE || ob->type == OB_FONT || ob->type == OB_MBALL || ob->type == OB_LATTICE || ob->type == OB_SURF || diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 2fcb36f6d5b..2c1edc965e9 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -698,8 +698,13 @@ int BPY_button_eval(bContext *C, char *expr, double *value) void BPY_load_user_modules(bContext *C) { PyGILState_STATE gilstate; + Main *bmain= CTX_data_main(C); Text *text; + /* can happen on file load */ + if(bmain==NULL) + return; + bpy_context_set(C, &gilstate); for(text=CTX_data_main(C)->text.first; text; text= text->id.next) { diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index d2b67142eb5..94cd6ed85a0 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -50,7 +50,7 @@ typedef struct wmJob wmJob; /* general API */ void WM_setprefsize (int stax, int stay, int sizx, int sizy); -void WM_init (struct bContext *C); +void WM_init (struct bContext *C, int argc, char **argv); void WM_exit (struct bContext *C); void WM_main (struct bContext *C); diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 6997bcaf309..a83b6c3609a 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -106,9 +106,9 @@ static void wm_free_reports(bContext *C) /* only called once, for startup */ -void WM_init(bContext *C) +void WM_init(bContext *C, int argc, char **argv) { - + if (!G.background) { wm_ghost_init(C); /* note: it assigns C to ghost! */ wm_init_cursor_data(); @@ -129,9 +129,18 @@ void WM_init(bContext *C) init_builtin_keyingsets(); /* editors/animation/keyframing.c */ + /* python needs initializing before loading the .B.blend + * because it may contain PyDrivers. It also needs to be after + * initializing space types and other internal data */ +#ifndef DISABLE_PYTHON + BPY_set_context(C); /* necessary evil */ + BPY_start_python(argc, argv); + BPY_load_user_modules(C); +#endif + /* get the default database, plus a wm */ WM_read_homefile(C, NULL); - + wm_init_reports(C); /* reports cant be initialized before the wm */ if (!G.background) { -- cgit v1.2.3