- fix for crash if drivers were used in the .B.blend
authorCampbell Barton <ideasman42@gmail.com>
Sun, 10 Jan 2010 20:01:13 +0000 (20:01 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 10 Jan 2010 20:01:13 +0000 (20:01 +0000)
- fix for problem where proxy objects could enter editmode but not exit

source/blender/editors/object/object_edit.c
source/blender/python/intern/bpy_interface.c
source/blender/windowmanager/WM_api.h
source/blender/windowmanager/intern/wm_init_exit.c
source/creator/creator.c

index 9ef1fafff82ed5b0e783b5894a75e230f01787f0..54fa3f51eb6f288cbb517bca8d34a492ae4a1c55 100644 (file)
@@ -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 ||
index 2fcb36f6d5b54f94503dc58bf8ba9dfdbf30b540..2c1edc965e90f22333bb712a364d318d80029f67 100644 (file)
@@ -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) {
index d2b67142eb574e37c7aca621993981d0f951c177..94cd6ed85a08c38566090d9fe90bf5dbfafa045e 100644 (file)
@@ -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);
 
index 6997bcaf309bd66202119ba2c2f8042b038ebd34..a83b6c3609a1c0546d16e943cb1f78624556ef7e 100644 (file)
@@ -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) {
index cad79395b7643bb32988dcb20a361abd4048113a..87662e0b7a515fc5248682b3cdda42d8afe4b816 100644 (file)
@@ -493,13 +493,7 @@ int main(int argc, char **argv)
                        }
                }
 
-               WM_init(C);
-
-#ifndef DISABLE_PYTHON
-               BPY_set_context(C); /* necessary evil */
-               BPY_start_python(argc, argv);
-               BPY_load_user_modules(C);
-#endif
+               WM_init(C, argc, argv);
                
                // XXX BRECHT SOLVE
                BLI_where_is_temp( btempdir, 1 ); /* call after loading the .B.blend so we can read U.tempdir */
@@ -539,13 +533,8 @@ int main(int argc, char **argv)
                        }
                }
 
-               WM_init(C);
+               WM_init(C, argc, argv);
 
-#ifndef DISABLE_PYTHON
-               BPY_set_context(C); /* necessary evil */
-               BPY_start_python(argc, argv);
-               BPY_load_user_modules(C);
-#endif         
                BLI_where_is_temp( btempdir, 0 ); /* call after loading the .B.blend so we can read U.tempdir */
        }
 #ifndef DISABLE_PYTHON