Commit: 0398ee10a1b727c63b344db3d6c8d78f6bbfd633
Author: Campbell Barton
Date:   Fri Aug 11 09:29:25 2017 +1000
Branches: master
https://developer.blender.org/rB0398ee10a1b727c63b344db3d6c8d78f6bbfd633

WM: don't load preferences on 'File -> New'

User preferences are now only loaded on...

- Initial startup.
- Factory-settings.
- Setting app-templates.

===================================================================

M       source/blender/windowmanager/intern/wm_files.c
M       source/blender/windowmanager/intern/wm_init_exit.c
M       source/blender/windowmanager/wm_files.h

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_files.c 
b/source/blender/windowmanager/intern/wm_files.c
index 605a226500f..8c24110dc25 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -449,7 +449,7 @@ void wm_file_read_report(bContext *C)
  * Logic shared between #WM_file_read & #wm_homefile_read,
  * updates to make after reading a file.
  */
-static void wm_file_read_post(bContext *C, bool is_startup_file)
+static void wm_file_read_post(bContext *C, const bool is_startup_file, const 
bool use_userdef)
 {
        bool addons_loaded = false;
        wmWindowManager *wm = CTX_wm_manager(C);
@@ -468,13 +468,14 @@ static void wm_file_read_post(bContext *C, bool 
is_startup_file)
        if (is_startup_file) {
                /* possible python hasn't been initialized */
                if (CTX_py_init_get(C)) {
-                       /* Only run when we have a template path found. */
-                       if (BKE_appdir_app_template_any()) {
-                               BPY_execute_string(C, 
"__import__('bl_app_template_utils').reset()");
+                       if (use_userdef) {
+                               /* Only run when we have a template path found. 
*/
+                               if (BKE_appdir_app_template_any()) {
+                                       BPY_execute_string(C, 
"__import__('bl_app_template_utils').reset()");
+                               }
+                               /* sync addons, these may have changed from the 
defaults */
+                               BPY_execute_string(C, 
"__import__('addon_utils').reset_all()");
                        }
-                       /* sync addons, these may have changed from the 
defaults */
-                       BPY_execute_string(C, 
"__import__('addon_utils').reset_all()");
-
                        BPY_python_reset(C);
                        addons_loaded = true;
                }
@@ -588,7 +589,7 @@ bool WM_file_read(bContext *C, const char *filepath, 
ReportList *reports)
                        }
                }
 
-               wm_file_read_post(C, false);
+               wm_file_read_post(C, false, false);
 
                success = true;
        }
@@ -636,13 +637,15 @@ bool WM_file_read(bContext *C, const char *filepath, 
ReportList *reports)
  *
  * \param use_factory_settings: Ignore on-disk startup file, use bundled 
``datatoc_startup_blend`` instead.
  * Used for "Restore Factory Settings".
+ * \param use_userdef: Load factory settings as well as startup file.
+ * Disabled for "File New" we don't want to reload preferences.
  * \param filepath_startup_override: Optional path pointing to an alternative 
blend file (may be NULL).
  * \param app_template_override: Template to use instead of the template 
defined in user-preferences.
  * When not-null, this is written into the user preferences.
  */
 int wm_homefile_read(
         bContext *C, ReportList *reports,
-        bool use_factory_settings, bool use_empty_data,
+        bool use_factory_settings, bool use_empty_data, bool use_userdef,
         const char *filepath_startup_override, const char 
*app_template_override)
 {
        ListBase wmbase;
@@ -666,7 +669,7 @@ int wm_homefile_read(
         * And in this case versioning code is to be run.
         */
        bool read_userdef_from_memory = false;
-       eBLOReadSkip skip_flags = 0;
+       eBLOReadSkip skip_flags = use_userdef ? 0 : BLO_READ_SKIP_USERDEF;
 
        /* options exclude eachother */
        BLI_assert((use_factory_settings && filepath_startup_override) == 0);
@@ -693,7 +696,9 @@ int wm_homefile_read(
        if (!use_factory_settings) {
                if (cfgdir) {
                        BLI_path_join(filepath_startup, 
sizeof(filepath_startup), cfgdir, BLENDER_STARTUP_FILE, NULL);
-                       BLI_path_join(filepath_userdef, 
sizeof(filepath_startup), cfgdir, BLENDER_USERPREF_FILE, NULL);
+                       if (use_userdef) {
+                               BLI_path_join(filepath_userdef, 
sizeof(filepath_startup), cfgdir, BLENDER_USERPREF_FILE, NULL);
+                       }
                }
                else {
                        use_factory_settings = true;
@@ -705,14 +710,16 @@ int wm_homefile_read(
        }
 
        /* load preferences before startup.blend */
-       if (!use_factory_settings && BLI_exists(filepath_userdef)) {
-               UserDef *userdef = BKE_blendfile_userdef_read(filepath_userdef, 
NULL);
-               if (userdef != NULL) {
-                       BKE_blender_userdef_set_data(userdef);
-                       MEM_freeN(userdef);
-
-                       skip_flags |= BLO_READ_SKIP_USERDEF;
-                       printf("Read prefs: %s\n", filepath_userdef);
+       if (use_userdef) {
+               if (!use_factory_settings && BLI_exists(filepath_userdef)) {
+                       UserDef *userdef = 
BKE_blendfile_userdef_read(filepath_userdef, NULL);
+                       if (userdef != NULL) {
+                               BKE_blender_userdef_set_data(userdef);
+                               MEM_freeN(userdef);
+
+                               skip_flags |= BLO_READ_SKIP_USERDEF;
+                               printf("Read prefs: %s\n", filepath_userdef);
+                       }
                }
        }
 
@@ -772,8 +779,12 @@ int wm_homefile_read(
                success = BKE_blendfile_read_from_memory(
                        C, datatoc_startup_blend, datatoc_startup_blend_size,
                        NULL, skip_flags, true);
-               if (success && !(skip_flags & BLO_READ_SKIP_USERDEF)) {
-                       read_userdef_from_memory = true;
+               if (success) {
+                       if (use_userdef) {
+                               if ((skip_flags & BLO_READ_SKIP_USERDEF) == 0) {
+                                       read_userdef_from_memory = true;
+                               }
+                       }
                }
                if (BLI_listbase_is_empty(&wmbase)) {
                        wm_clear_default_size(C);
@@ -801,21 +812,23 @@ int wm_homefile_read(
                        BLI_path_join(temp_path, sizeof(temp_path), 
app_template_system, BLENDER_USERPREF_FILE, NULL);
                }
 
-               UserDef *userdef_template = NULL;
-               /* just avoids missing file warning */
-               if (BLI_exists(temp_path)) {
-                       userdef_template = 
BKE_blendfile_userdef_read(temp_path, NULL);
-               }
-               if (userdef_template == NULL) {
-                       /* we need to have preferences load to overwrite 
preferences from previous template */
-                       userdef_template = 
BKE_blendfile_userdef_read_from_memory(
-                               datatoc_startup_blend, 
datatoc_startup_blend_size, NULL);
-                       read_userdef_from_memory = true;
-               }
-               if (userdef_template) {
-                       BKE_blender_userdef_set_app_template(userdef_template);
-                       BKE_blender_userdef_free_data(userdef_template);
-                       MEM_freeN(userdef_template);
+               if (use_userdef) {
+                       UserDef *userdef_template = NULL;
+                       /* just avoids missing file warning */
+                       if (BLI_exists(temp_path)) {
+                               userdef_template = 
BKE_blendfile_userdef_read(temp_path, NULL);
+                       }
+                       if (userdef_template == NULL) {
+                               /* we need to have preferences load to 
overwrite preferences from previous template */
+                               userdef_template = 
BKE_blendfile_userdef_read_from_memory(
+                                       datatoc_startup_blend, 
datatoc_startup_blend_size, NULL);
+                               read_userdef_from_memory = true;
+                       }
+                       if (userdef_template) {
+                               
BKE_blender_userdef_set_app_template(userdef_template);
+                               BKE_blender_userdef_free_data(userdef_template);
+                               MEM_freeN(userdef_template);
+                       }
                }
        }
 
@@ -827,8 +840,10 @@ int wm_homefile_read(
         * can remove this eventually, only in a 2.53 and older, now its not 
written */
        G.fileflags &= ~G_FILE_RELATIVE_REMAP;
        
-       /* check userdef before open window, keymaps etc */
-       wm_init_userdef(C, read_userdef_from_memory);
+       if (use_userdef) {
+               /* check userdef before open window, keymaps etc */
+               wm_init_userdef(C, read_userdef_from_memory);
+       }
        
        /* match the read WM with current WM */
        wm_window_match_do(C, &wmbase); 
@@ -836,9 +851,11 @@ int wm_homefile_read(
 
        G.main->name[0] = '\0';
 
-       /* When loading factory settings, the reset solid OpenGL lights need to 
be applied. */
-       if (!G.background) {
-               GPU_default_lights();
+       if (use_userdef) {
+               /* When loading factory settings, the reset solid OpenGL lights 
need to be applied. */
+               if (!G.background) {
+                       GPU_default_lights();
+               }
        }
 
        /* start with save preference untitled.blend */
@@ -846,7 +863,7 @@ int wm_homefile_read(
        /* disable auto-play in startup.blend... */
        G.fileflags &= ~G_FILE_AUTOPLAY;
 
-       wm_file_read_post(C, true);
+       wm_file_read_post(C, true, use_userdef);
 
        return true;
 }
@@ -1528,6 +1545,7 @@ void WM_OT_read_history(wmOperatorType *ot)
 static int wm_homefile_read_exec(bContext *C, wmOperator *op)
 {
        const bool use_factory_settings = (STREQ(op->type->idname, 
"WM_OT_read_factory_settings"));
+       bool use_userdef = false;
        char filepath_buf[FILE_MAX];
        const char *filepath = NULL;
 
@@ -1551,6 +1569,8 @@ static int wm_homefile_read_exec(bContext *C, wmOperator 
*op)
        else {
                /* always load UI for factory settings (prefs will re-init) */
                G.fileflags &= ~G_FILE_NO_UI;
+               /* Always load preferences with factory settings. */
+               use_userdef = true;
        }
 
        char app_template_buf[sizeof(U.app_template)];
@@ -1562,17 +1582,15 @@ static int wm_homefile_read_exec(bContext *C, 
wmOperator *op)
        if (prop_app_template && RNA_property_is_set(op->ptr, 
prop_app_template)) {
                RNA_property_string_get(op->ptr, prop_app_template, 
app_template_buf);
                app_template = app_template_buf;
-       }
-       else if (!use_factory_settings) {
-               /* TODO: dont reset prefs on 'New File' */
-               BLI_strncpy(app_template_buf, U.app_template, 
sizeof(app_template_buf));
-               app_template = app_template_buf;
+
+               /* Always load preferences when switching templates. */
+               use_userdef = true;
        }
        else {
                app_template = NULL;
        }
 
-       if (wm_homefile_read(C, op->reports, use_factory_settings, 
use_empty_data, filepath, app_template)) {
+       if (wm_homefile_read(C, op->reports, use_factory_settings, 
use_empty_data, use_userdef, filepath, app_template)) {
                if (use_splash) {
                        WM_init_splash(C);
                }
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c 
b/source/blender/windowmanager/intern/wm_init_exit.c
index 00a9976e8be..fc6b2571f09 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -192,7 +192,7 @@ void WM_init(bContext *C, int argc, const char **argv)
        wm_init_reports(C);
 
        /* get the default database, plus a wm */
-       wm_homefile_read(C, NULL, G.factory_startup, false, NULL, NULL);
+       wm_homefile_read(C, NULL, G.factory_startup, false, true, NULL, NULL);
        
 
        BLT_lang_set(NULL);
diff --git a/source/blender/windowmanager/wm_files.h 
b/source/blender/windowmanager/wm_files.h
index 9a1518e15b0..b102b6c7cc7 100644
--- a/source/blender/windowmanager/wm_files.h
+++ b/source/blender/windowmanager/wm_files.h
@@ -37,7 +37,7 @@ struct wmOperatorType;
 void           wm_history_file_read(void);
 int                    wm_homefile_read(
         struct bContext *C, struct ReportList *reports,
-        bool use_factory_settings, bool use_empty_data,
+        bool use_factory_settings, bool use_empty_data, bool use_userdef,
         const char *filepath_startup_override, const char 
*app_template_override);
 void           wm_file_read_report(bContext *C);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to