WM: don't load preferences on 'File -> New'
User preferences are now only loaded on... - Initial startup. - Factory-settings. - Setting app-templates.
This commit is contained in:
parent
942b6e933b
commit
571e801b27
|
@ -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);
|
||||
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);
|
||||
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;
|
||||
}
|
||||
|
@ -1531,6 +1548,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;
|
||||
|
||||
|
@ -1554,6 +1572,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)];
|
||||
|
@ -1565,17 +1585,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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue