diff options
Diffstat (limited to 'source/blender/editors/space_file/filesel.c')
-rw-r--r-- | source/blender/editors/space_file/filesel.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 1e113abfcd2..6cc42b2a751 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -125,6 +125,7 @@ short ED_fileselect_set_params(SpaceFile *sfile) const short is_filepath= (RNA_struct_find_property(op->ptr, "filepath") != NULL); const short is_filename= (RNA_struct_find_property(op->ptr, "filename") != NULL); const short is_directory= (RNA_struct_find_property(op->ptr, "directory") != NULL); + const short is_relative_path= (RNA_struct_find_property(op->ptr, "relative_path") != NULL); BLI_strncpy(params->title, op->type->name, sizeof(params->title)); @@ -228,6 +229,11 @@ short ED_fileselect_set_params(SpaceFile *sfile) params->display= FILE_SHORTDISPLAY; } + if (is_relative_path) { + if (!RNA_property_is_set(op->ptr, "relative_path")) { + RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS); + } + } } else { /* default values, if no operator */ @@ -246,6 +252,11 @@ short ED_fileselect_set_params(SpaceFile *sfile) sfile->folders_prev = folderlist_new(); folderlist_pushdir(sfile->folders_prev, sfile->params->dir); + /* switching thumbnails needs to recalc layout [#28809] */ + if (sfile->layout) { + sfile->layout->dirty= TRUE; + } + return 1; } @@ -466,12 +477,13 @@ void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar) int maxlen = 0; int numfiles; int textheight; + if (sfile->layout == NULL) { sfile->layout = MEM_callocN(sizeof(struct FileLayout), "file_layout"); - sfile->layout->dirty = 1; - } - - if (!sfile->layout->dirty) return; + sfile->layout->dirty = TRUE; + } else if (sfile->layout->dirty == FALSE) { + return; + } numfiles = filelist_numfiles(sfile->files); textheight = (int)file_font_pointsize(); @@ -538,7 +550,7 @@ void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar) layout->width = sfile->layout->columns * (layout->tile_w + 2*layout->tile_border_x) + layout->tile_border_x*2; layout->flag = FILE_LAYOUT_HOR; } - layout->dirty= 0; + layout->dirty= FALSE; } FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar) |