fix [#26494] Auto run Python scripts option in User Preferences problem
authorCampbell Barton <ideasman42@gmail.com>
Tue, 15 Mar 2011 08:04:11 +0000 (08:04 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 15 Mar 2011 08:04:11 +0000 (08:04 +0000)
- opening a file with blender by passing it as an argument would and loading it once in blender left script auto execute flag in a different state.
- command line args --enable/disable-autoexec were being overridden by the user prefs.

source/blender/blenkernel/BKE_global.h
source/blender/blenkernel/intern/blender.c
source/blender/windowmanager/intern/wm_files.c
source/blender/windowmanager/intern/wm_operators.c
source/creator/creator.c

index d83e0e5bc4c02bc5d40ecd96d79f0f0157968565..0360acbea32a544aa592d6f917136c23a76be057 100644 (file)
@@ -111,6 +111,7 @@ typedef struct Global {
 
 #define G_DEBUG                        (1 << 12)
 #define G_SCRIPT_AUTOEXEC (1 << 13)
+#define G_SCRIPT_OVERRIDE_PREF (1 << 14) /* when this flag is set ignore the userprefs */
 
 /* #define G_NOFROZEN  (1 << 17) also removed */
 #define G_GREASEPENCIL         (1 << 17)
index 3c996006f5ded6e465b91c865c92d0c672c21636..9fb36d8f6b78ba7880d3044470d6690fdd4ffb60 100644 (file)
@@ -271,12 +271,11 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, const char *filename
        }
 
        /* special cases, override loaded flags: */
-       if (G.f & G_DEBUG) bfd->globalf |= G_DEBUG;
-       else bfd->globalf &= ~G_DEBUG;
-       if (G.f & G_SWAP_EXCHANGE) bfd->globalf |= G_SWAP_EXCHANGE;
-       else bfd->globalf &= ~G_SWAP_EXCHANGE;
-       if (G.f & G_SCRIPT_AUTOEXEC) bfd->globalf |= G_SCRIPT_AUTOEXEC;
-       else bfd->globalf &= ~G_SCRIPT_AUTOEXEC;
+       if(G.f != bfd->globalf) {
+               const int flags_keep= (G_DEBUG | G_SWAP_EXCHANGE | G_SCRIPT_AUTOEXEC | G_SCRIPT_OVERRIDE_PREF);
+               bfd->globalf= (bfd->globalf & ~flags_keep) | (G.f & flags_keep);
+       }
+
 
        G.f= bfd->globalf;
 
index 48528574f7e473f2c0663df4923bc76b2bfc787a..ebf3e8562412f360b6fdabc6745e1007b8b85e20 100644 (file)
@@ -267,8 +267,11 @@ static void wm_init_userdef(bContext *C)
        else                                            G.fileflags &= ~G_FILE_NO_UI;
 
        /* set the python auto-execute setting from user prefs */
-       /* disabled by default, unless explicitly enabled in the command line */
-       if ((U.flag & USER_SCRIPT_AUTOEXEC_DISABLE) == 0) G.f |=  G_SCRIPT_AUTOEXEC;
+       /* enabled by default, unless explicitly enabled in the command line which overrides */
+       if((G.f & G_SCRIPT_OVERRIDE_PREF) == 0) {
+               if ((U.flag & USER_SCRIPT_AUTOEXEC_DISABLE) == 0) G.f |=  G_SCRIPT_AUTOEXEC;
+               else                                                                                      G.f &= ~G_SCRIPT_AUTOEXEC;
+       }
        if(U.tempdir[0]) BLI_where_is_temp(btempdir, FILE_MAX, 1);
 }
 
@@ -300,8 +303,10 @@ void WM_read_file(bContext *C, const char *name, ReportList *reports)
 
                /* this flag is initialized by the operator but overwritten on read.
                 * need to re-enable it here else drivers + registered scripts wont work. */
-               if(G_f & G_SCRIPT_AUTOEXEC) G.f |= G_SCRIPT_AUTOEXEC;
-               else                                            G.f &= ~G_SCRIPT_AUTOEXEC;
+               if(G.f != G_f) {
+                       const int flags_keep= (G_SCRIPT_AUTOEXEC | G_SCRIPT_OVERRIDE_PREF);
+                       G.f= (G.f & ~flags_keep) | (G_f & flags_keep);
+               }
 
                /* match the read WM with current WM */
                wm_window_match_do(C, &wmbase);
index 27276e2aaac03765e86611153a6c1b2abc190d95..7aa56ed322b2ccab60a12d582833c39f2a69fd7d 100644 (file)
@@ -1391,8 +1391,12 @@ static void open_set_load_ui(wmOperator *op)
 
 static void open_set_use_scripts(wmOperator *op)
 {
-       if(!RNA_property_is_set(op->ptr, "use_scripts"))
-               RNA_boolean_set(op->ptr, "use_scripts", !(U.flag & USER_SCRIPT_AUTOEXEC_DISABLE));
+       if(!RNA_property_is_set(op->ptr, "use_scripts")) {
+               /* use G_SCRIPT_AUTOEXEC rather then the userpref because this means if
+                * the flag has been disabled from the command line, then opening
+                * from the menu wont enable this setting. */
+               RNA_boolean_set(op->ptr, "use_scripts", (G.f & G_SCRIPT_AUTOEXEC));
+       }
 }
 
 static int wm_open_mainfile_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
index f64deb7414a6a1df4fb44b3c2547712fa8136cb1..5b5c0b7702203a672c480638484c8dc5b6ae3a25 100644 (file)
@@ -356,12 +356,14 @@ static int end_arguments(int UNUSED(argc), const char **UNUSED(argv), void *UNUS
 static int enable_python(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
 {
        G.f |= G_SCRIPT_AUTOEXEC;
+       G.f |= G_SCRIPT_OVERRIDE_PREF;
        return 0;
 }
 
-static int disable_python(int UNUSED(argc), const const char **UNUSED(argv), void *UNUSED(data))
+static int disable_python(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
 {
        G.f &= ~G_SCRIPT_AUTOEXEC;
+       G.f |= G_SCRIPT_OVERRIDE_PREF;
        return 0;
 }