fix for own error when trying to fix python command line crash,
authorCampbell Barton <ideasman42@gmail.com>
Sun, 27 Apr 2008 11:37:57 +0000 (11:37 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 27 Apr 2008 11:37:57 +0000 (11:37 +0000)
was calling screenmain() before executing the python script which meant it was never executed (therefore no crash :) )

Moved screenmain() back to the the end of main() and added a TESTBASELIB_BGMODE which checks for G.vd and uses the scene layer if its not there. Of course python should not be running stuff that uses G.vd :/

Also made python scripts stay attached to screens when LOAD UI is disabled. This means you can load a new blend file and the python console can stay open, has been tested for a while in the apricot branch.

source/blender/blenkernel/intern/blender.c
source/blender/blenkernel/intern/image.c
source/blender/include/blendef.h
source/blender/src/meshtools.c
source/creator/creator.c

index 47095afdf22e2eb5fcb18b03d7f296d440ad15d9..230b7080b38668fb23129ef14c6068a6c91712b3 100644 (file)
@@ -330,6 +330,7 @@ static void setup_app_data(BlendFileData *bfd, char *filename)
                extern void lib_link_screen_restore(Main *, Scene *);
                
                SWAP(ListBase, G.main->screen, bfd->main->screen);
+               SWAP(ListBase, G.main->script, bfd->main->script);
                
                /* we re-use current screen */
                curscreen= G.curscreen;
index 3f885017f95a550c39677957df41c56c1d0b6c44..459e705eccc489344382856a388fd08cf3658ca0 100644 (file)
@@ -246,7 +246,6 @@ static void image_free_buffers(Image *ima)
 /* called by library too, do not free ima itself */
 void free_image(Image *ima)
 {
-
        image_free_buffers(ima);
        if (ima->packedfile) {
                freePackedFile(ima->packedfile);
@@ -257,7 +256,6 @@ void free_image(Image *ima)
        if (ima->preview) {
                BKE_previewimg_free(&ima->preview);
        }
-       
 }
 
 /* only image block itself */
index 93e3aaf03dd401f28d61318a85a622a4614527ef..a798224b35b4b20694c3ae08f6bad7e443774c92 100644 (file)
 
 #define TESTBASE(base) ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0) )
 #define TESTBASELIB(base)      ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0))
+
+/* This is a TESTBASELIB that can work without a 3D view */
+#define TESTBASELIB_BGMODE(base)       ( ((base)->flag & SELECT) && ((base)->lay & (G.vd ? G.vd->lay : G.scene->lay)) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0))
+
 #define BASE_SELECTABLE(base)   ((base->lay & G.vd->lay) && (base->object->restrictflag & (OB_RESTRICT_SELECT|OB_RESTRICT_VIEW))==0)
 #define FIRSTBASE              G.scene->base.first
 #define LASTBASE               G.scene->base.last
index 79b0d8fc1dee01c9f11f301446a0c72d5f3e822e..e27e772edeed83934ecf5a87618c7fab69b3fe95 100644 (file)
@@ -164,7 +164,7 @@ int join_mesh(void)
        /* count & check */
        base= FIRSTBASE;
        while(base) {
-               if TESTBASELIB(base) {
+               if TESTBASELIB_BGMODE(base) { /* BGMODE since python can access */
                        if(base->object->type==OB_MESH) {
                                me= base->object->data;
                                totvert+= me->totvert;
@@ -200,7 +200,7 @@ int join_mesh(void)
 
        /* if needed add edges to other meshes */
        for(base= FIRSTBASE; base; base= base->next) {
-               if TESTBASELIB(base) {
+               if TESTBASELIB_BGMODE(base) {
                        if(base->object->type==OB_MESH) {
                                me= base->object->data;
                                totedge += me->totedge;
@@ -221,7 +221,7 @@ int join_mesh(void)
        
        base= FIRSTBASE;
        while(base) {
-               if TESTBASELIB(base) {
+               if TESTBASELIB_BGMODE(base) {
                        if(ob!=base->object && base->object->type==OB_MESH) {
                                me= base->object->data;
 
@@ -288,7 +288,7 @@ int join_mesh(void)
        base= FIRSTBASE;
        while(base) {
                nextb= base->next;
-               if TESTBASELIB(base) {
+               if TESTBASELIB_BGMODE(base) {
                        if(base->object->type==OB_MESH) {
                                
                                me= base->object->data;
index e91705345c632c36e3a0a45ef83bc3beea20cb6b..2fd3a482a2758e68262a0d4114a9bcf692ca5dda 100644 (file)
@@ -263,8 +263,6 @@ static void main_init_screen( void )
        if(G.main->scene.first==0) {
                set_scene( add_scene("1") );
        }
-
-       screenmain();
 }
 
 int main(int argc, char **argv)
@@ -815,6 +813,8 @@ int main(int argc, char **argv)
        if (scr_init==0) {
                main_init_screen();
        }
+       
+       screenmain(); /* main display loop */
 
        return 0;
 } /* end of int main(argc,argv)        */