diff options
Diffstat (limited to 'source/blender/windowmanager/intern')
-rw-r--r-- | source/blender/windowmanager/intern/wm_files.c | 53 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_files_link.c | 5 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_window.c | 5 |
3 files changed, 33 insertions, 30 deletions
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index ddc4692084e..0867ed5303c 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -955,14 +955,6 @@ bool WM_file_read(bContext *C, const char *filepath, ReportList *reports) /* #BKE_blendfile_read_result_setup sets new Main into context. */ Main *bmain = CTX_data_main(C); - /* When recovering a session from an unsaved file, this can have a blank path. */ - if (BKE_main_blendfile_path(bmain)[0] != '\0') { - G.relbase_valid = 1; - } - else { - G.relbase_valid = 0; - } - /* match the read WM with current WM */ wm_window_match_do(C, &wmbase, &bmain->wm, &bmain->wm); WM_check(C); /* opens window(s), checks keymaps */ @@ -1149,8 +1141,6 @@ void wm_homefile_read_ex(bContext *C, wm_file_read_pre(C, use_data, use_userdef); if (use_data) { - G.relbase_valid = 0; - /* put aside screens to match with persistent windows later */ wm_window_match_init(C, &wmbase); } @@ -1825,7 +1815,8 @@ static bool wm_file_write(bContext *C, /* First time saving. */ /* XXX(ton): temp solution to solve bug, real fix coming. */ - if ((BKE_main_blendfile_path(bmain)[0] == '\0') && (use_save_as_copy == false)) { + const bool relbase_valid = (bmain->filepath[0] != '\0'); + if ((relbase_valid == false) && (use_save_as_copy == false)) { STRNCPY(bmain->filepath, filepath); } @@ -1839,6 +1830,7 @@ static bool wm_file_write(bContext *C, .remap_mode = remap_mode, .use_save_versions = true, .use_save_as_copy = use_save_as_copy, + .use_save_first_time = !relbase_valid, .thumb = thumb, }, reports)) { @@ -1846,7 +1838,6 @@ static bool wm_file_write(bContext *C, (CTX_wm_manager(C)->op_undo_depth == 0); if (use_save_as_copy == false) { - G.relbase_valid = 1; STRNCPY(bmain->filepath, filepath); /* is guaranteed current file */ } @@ -1898,8 +1889,13 @@ static void wm_autosave_location(char *filepath) const char *savedir; #endif - if (G_MAIN && G.relbase_valid) { - const char *basename = BLI_path_basename(BKE_main_blendfile_path_from_global()); + /* Normally there is no need to check for this to be NULL, + * however this runs on exit when it may be cleared. */ + Main *bmain = G_MAIN; + const char *blendfile_path = bmain ? BKE_main_blendfile_path(bmain) : NULL; + + if (blendfile_path && (blendfile_path[0] != '\0')) { + const char *basename = BLI_path_basename(blendfile_path); int len = strlen(basename) - 6; BLI_snprintf(path, sizeof(path), "%.*s_%d_autosave.blend", len, basename, pid); } @@ -2109,7 +2105,7 @@ static int wm_homefile_write_exec(bContext *C, wmOperator *op) fileflags, &(const struct BlendFileWriteParams){ /* Make all paths absolute when saving the startup file. - * On load the `G.relbase_valid` will be false so the paths + * On load the `G.main->filepath` will be empty so the paths * won't have a base for resolving the relative paths. */ .remap_mode = BLO_WRITE_PATH_REMAP_ABSOLUTE, /* Don't apply any path changes to the current blend file. */ @@ -2847,7 +2843,8 @@ static int wm_revert_mainfile_exec(bContext *C, wmOperator *op) static bool wm_revert_mainfile_poll(bContext *UNUSED(C)) { - return G.relbase_valid; + const char *blendfile_path = BKE_main_blendfile_path_from_global(); + return (blendfile_path[0] != '\0'); } void WM_OT_revert_mainfile(wmOperatorType *ot) @@ -3004,9 +3001,9 @@ void WM_OT_recover_auto_save(wmOperatorType *ot) * Both #WM_OT_save_as_mainfile & #WM_OT_save_mainfile. * \{ */ -static void wm_filepath_default(char *filepath) +static void wm_filepath_default(const Main *bmain, char *filepath) { - if (G.relbase_valid == false) { + if (bmain->filepath[0] == '\0') { BLI_path_filename_ensure(filepath, FILE_MAX, "untitled.blend"); } } @@ -3017,7 +3014,8 @@ static void save_set_compress(wmOperator *op) prop = RNA_struct_find_property(op->ptr, "compress"); if (!RNA_property_is_set(op->ptr, prop)) { - if (G.relbase_valid) { /* keep flag for existing file */ + const char *blendfile_path = BKE_main_blendfile_path_from_global(); + if (blendfile_path[0] != '\0') { /* Keep flag for existing file. */ RNA_property_boolean_set(op->ptr, prop, (G.fileflags & G_FILE_COMPRESS) != 0); } else { /* use userdef for new file */ @@ -3034,16 +3032,17 @@ static void save_set_filepath(bContext *C, wmOperator *op) prop = RNA_struct_find_property(op->ptr, "filepath"); if (!RNA_property_is_set(op->ptr, prop)) { + const char *blendfile_path = BKE_main_blendfile_path(bmain); /* if not saved before, get the name of the most recently used .blend file */ - if (BKE_main_blendfile_path(bmain)[0] == '\0' && G.recent_files.first) { + if ((blendfile_path[0] == '\0') && G.recent_files.first) { struct RecentFile *recent = G.recent_files.first; STRNCPY(filepath, recent->filepath); } else { - STRNCPY(filepath, bmain->filepath); + STRNCPY(filepath, blendfile_path); } - wm_filepath_default(filepath); + wm_filepath_default(bmain, filepath); RNA_property_string_set(op->ptr, prop, filepath); } } @@ -3081,7 +3080,7 @@ static int wm_save_as_mainfile_exec(bContext *C, wmOperator *op) } else { BLI_strncpy(path, BKE_main_blendfile_path(bmain), FILE_MAX); - wm_filepath_default(path); + wm_filepath_default(bmain, path); } const int fileflags_orig = G.fileflags; @@ -3198,14 +3197,15 @@ static int wm_save_mainfile_invoke(bContext *C, wmOperator *op, const wmEvent *U /* if we're saving for the first time and prefer relative paths - * any existing paths will be absolute, * enable the option to remap paths to avoid confusion T37240. */ - if ((G.relbase_valid == false) && (U.flag & USER_RELPATHS)) { + const char *blendfile_path = BKE_main_blendfile_path_from_global(); + if ((blendfile_path[0] == '\0') && (U.flag & USER_RELPATHS)) { PropertyRNA *prop = RNA_struct_find_property(op->ptr, "relative_remap"); if (!RNA_property_is_set(op->ptr, prop)) { RNA_property_boolean_set(op->ptr, prop, true); } } - if (G.relbase_valid) { + if (blendfile_path[0] != '\0') { char path[FILE_MAX]; RNA_string_get(op->ptr, "filepath", path); @@ -3307,6 +3307,7 @@ static uiBlock *block_create_autorun_warning(struct bContext *C, struct ARegion *region, void *UNUSED(arg1)) { + const char *blendfile_path = BKE_main_blendfile_path_from_global(); wmWindowManager *wm = CTX_wm_manager(C); uiBlock *block = UI_block_begin(C, region, "autorun_warning_popup", UI_EMBOSS); @@ -3354,7 +3355,7 @@ static uiBlock *block_create_autorun_warning(struct bContext *C, /* Allow reload if we have a saved file. * Otherwise just enable scripts and reset the depsgraphs. */ - if (G.relbase_valid && wm->file_saved) { + if ((blendfile_path[0] != '\0') && wm->file_saved) { but = uiDefIconTextBut(block, UI_BTYPE_BUT, 0, diff --git a/source/blender/windowmanager/intern/wm_files_link.c b/source/blender/windowmanager/intern/wm_files_link.c index 1b60167be4f..cf6ecd55757 100644 --- a/source/blender/windowmanager/intern/wm_files_link.c +++ b/source/blender/windowmanager/intern/wm_files_link.c @@ -113,12 +113,13 @@ static bool wm_link_append_poll(bContext *C) static int wm_link_append_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) { if (!RNA_struct_property_is_set(op->ptr, "filepath")) { + const char *blendfile_path = BKE_main_blendfile_path_from_global(); if (G.lib[0] != '\0') { RNA_string_set(op->ptr, "filepath", G.lib); } - else if (G.relbase_valid) { + else if (blendfile_path[0] != '\0') { char path[FILE_MAX]; - BLI_strncpy(path, BKE_main_blendfile_path_from_global(), sizeof(path)); + STRNCPY(path, blendfile_path); BLI_path_parent_dir(path); RNA_string_set(op->ptr, "filepath", path); } diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index b2ea99ea854..29c9f53f735 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -428,13 +428,14 @@ void wm_window_title(wmWindowManager *wm, wmWindow *win) } else if (win->ghostwin) { /* this is set to 1 if you don't have startup.blend open */ - if (G.relbase_valid && BKE_main_blendfile_path_from_global()[0]) { + const char *blendfile_path = BKE_main_blendfile_path_from_global(); + if (blendfile_path[0] != '\0') { char str[sizeof(((Main *)NULL)->filepath) + 24]; BLI_snprintf(str, sizeof(str), "Blender%s [%s%s]", wm->file_saved ? "" : "*", - BKE_main_blendfile_path_from_global(), + blendfile_path, G_MAIN->recovered ? " (Recovered)" : ""); GHOST_SetTitle(win->ghostwin, str); } |