diff --git a/source/blender/windowmanager/intern/wm_files_link.cc b/source/blender/windowmanager/intern/wm_files_link.cc index 28fac0f93be..9f5addfc7ed 100644 --- a/source/blender/windowmanager/intern/wm_files_link.cc +++ b/source/blender/windowmanager/intern/wm_files_link.cc @@ -201,6 +201,7 @@ static bool wm_link_append_item_poll(ReportList *reports, static wmOperatorStatus wm_link_append_exec(bContext *C, wmOperator *op) { Main *bmain = CTX_data_main(C); + const char *blendfile_path = BKE_main_blendfile_path(bmain); Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); PropertyRNA *prop; @@ -212,6 +213,9 @@ static wmOperatorStatus wm_link_append_exec(bContext *C, wmOperator *op) RNA_string_get(op->ptr, "filename", relname); RNA_string_get(op->ptr, "directory", root); + if (BLI_path_is_rel(root)) { + BLI_path_abs(root, blendfile_path); + } BLI_path_join(filepath, sizeof(filepath), root, relname); @@ -220,7 +224,6 @@ static wmOperatorStatus wm_link_append_exec(bContext *C, wmOperator *op) filepath, libname, &group, &name); { - const char *blendfile_path = BKE_main_blendfile_path(bmain); if (blendfile_path[0] != '\0') { /* NOTE: Need to also check `filepath`, as typically `libname` is an empty string here * (when trying to append from current file from the file-browser e.g.). */ @@ -528,6 +531,7 @@ void WM_OT_append(wmOperatorType *ot) static wmOperatorStatus wm_id_linked_relocate_exec(bContext *C, wmOperator *op) { Main *bmain = CTX_data_main(C); + const char *blendfile_path = BKE_main_blendfile_path(bmain); Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); BlendfileLinkAppendContext *lapp_context; @@ -537,6 +541,9 @@ static wmOperatorStatus wm_id_linked_relocate_exec(bContext *C, wmOperator *op) RNA_string_get(op->ptr, "filename", relname); RNA_string_get(op->ptr, "directory", root); + if (BLI_path_is_rel(root)) { + BLI_path_abs(root, blendfile_path); + } BLI_path_join(filepath, sizeof(filepath), root, relname); @@ -545,7 +552,6 @@ static wmOperatorStatus wm_id_linked_relocate_exec(bContext *C, wmOperator *op) filepath, libname, &group, &name); { - const char *blendfile_path = BKE_main_blendfile_path(bmain); if (blendfile_path[0] != '\0') { /* NOTE: Need to also check `filepath`, as typically `libname` is an empty string here * (when trying to append from current file from the file-browser e.g.). */ @@ -883,6 +889,7 @@ void WM_lib_reload(Library *lib, bContext *C, ReportList *reports) static wmOperatorStatus wm_lib_relocate_exec_do(bContext *C, wmOperator *op, bool do_reload) { Main *bmain = CTX_data_main(C); + const char *blendfile_path = BKE_main_blendfile_path(bmain); char lib_name[MAX_NAME]; RNA_string_get(op->ptr, "library", lib_name); @@ -909,8 +916,11 @@ static wmOperatorStatus wm_lib_relocate_exec_do(bContext *C, wmOperator *op, boo return OPERATOR_CANCELLED; } - RNA_string_get(op->ptr, "directory", root); RNA_string_get(op->ptr, "filename", libname); + RNA_string_get(op->ptr, "directory", root); + if (BLI_path_is_rel(root)) { + BLI_path_abs(root, blendfile_path); + } if (!BKE_blendfile_extension_check(libname)) { BKE_report(op->reports, RPT_ERROR, "Not a library"); @@ -929,7 +939,6 @@ static wmOperatorStatus wm_lib_relocate_exec_do(bContext *C, wmOperator *op, boo } { - const char *blendfile_path = BKE_main_blendfile_path(bmain); if ((blendfile_path[0] != '\0') && (BLI_path_cmp(blendfile_path, filepath) == 0)) { BKE_reportf(op->reports, RPT_ERROR_INVALID_INPUT,