diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-08-18 12:18:55 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-08-18 12:18:55 +0300 |
commit | 9f25b2f278c3c5609828d5ac780c9f8dbadd9be2 (patch) | |
tree | 49a311388f95640a99099c2f98491c65215d93a7 /source/blender/windowmanager | |
parent | 4d71579d3ba21ed1e51fc7c2d03e2d87f0327d77 (diff) | |
parent | 4c22343271966752094b1e64af45fc5a5c6109b9 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 3 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_files.c | 38 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_init_exit.c | 2 |
3 files changed, 40 insertions, 3 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 45f6e188483..39364ee27be 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -82,6 +82,9 @@ typedef struct wmGizmoMap wmGizmoMap; typedef struct wmGizmoMapType wmGizmoMapType; /* general API */ +void WM_init_state_app_template_set(const char *app_template); +const char *WM_init_state_app_template_get(void); + void WM_init_state_size_set (int stax, int stay, int sizx, int sizy); void WM_init_state_fullscreen_set(void); void WM_init_state_normal_set(void); diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index e44081bef54..196e6cfa5ce 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -668,6 +668,33 @@ bool WM_file_read(bContext *C, const char *filepath, ReportList *reports) } +struct { + char app_template[64]; + bool override; +} wm_init_state_app_template = {0}; + +/** + * Used for setting app-template from the command line: + * - non-empty string: overrides. + * - empty string: override, using no app template. + * - NULL: clears override. + */ +void WM_init_state_app_template_set(const char *app_template) +{ + if (app_template) { + STRNCPY(wm_init_state_app_template.app_template, app_template); + wm_init_state_app_template.override = true; + } + else { + wm_init_state_app_template.app_template[0] = '\0'; + wm_init_state_app_template.override = false; + } +} + +const char *WM_init_state_app_template_get(void) +{ + return wm_init_state_app_template.override ? wm_init_state_app_template.app_template : NULL; +} /** * Called on startup, (context entirely filled with NULLs) @@ -776,7 +803,10 @@ int wm_homefile_read( } if ((app_template != NULL) && (app_template[0] != '\0')) { - BKE_appdir_app_template_id_search(app_template, app_template_system, sizeof(app_template_system)); + if (!BKE_appdir_app_template_id_search(app_template, app_template_system, sizeof(app_template_system))) { + /* Can safely continue with code below, just warn it's not found. */ + BKE_reportf(reports, RPT_WARNING, "Application Template '%s' not found.", app_template); + } /* Insert template name into startup file. */ @@ -1672,9 +1702,13 @@ static int wm_homefile_read_exec(bContext *C, wmOperator *op) /* Always load preferences when switching templates. */ use_userdef = true; + + /* Turn override off, since we're explicitly loading a different app-template. */ + WM_init_state_app_template_set(NULL); } else { - app_template = NULL; + /* Normally NULL, only set when overriding from the command-line. */ + app_template = WM_init_state_app_template_get(); } if (wm_homefile_read(C, op->reports, use_factory_settings, use_empty_data, use_userdef, filepath, app_template)) { diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 4b0d751a7ce..719544403dd 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -250,7 +250,7 @@ void WM_init(bContext *C, int argc, const char **argv) WM_msgbus_types_init(); /* get the default database, plus a wm */ - wm_homefile_read(C, NULL, G.factory_startup, false, true, NULL, NULL); + wm_homefile_read(C, NULL, G.factory_startup, false, true, NULL, WM_init_state_app_template_get()); BLT_lang_set(NULL); |