diff options
author | Andrea Weikert <elubie@gmx.net> | 2010-05-14 14:50:43 +0400 |
---|---|---|
committer | Andrea Weikert <elubie@gmx.net> | 2010-05-14 14:50:43 +0400 |
commit | 5b4f264bad786684841e9c23256181cc39c1ccca (patch) | |
tree | 75e45eff38cfbc396167ea5308b1a45f41b82aa9 /source/blender/editors | |
parent | 8b4b68becb710e687d8093685d1463a39ca350fe (diff) |
== filebrowser ==
* small update for thumbnails, now the thumbnail thread only runs when the filebrowser is in thumbnail view. (Thread was still running previously, even if it did nothing)
* this allows workaround for slower network drives, so the user can prevent thumbnail generation when not displaying them.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/space_file/filelist.c | 39 | ||||
-rw-r--r-- | source/blender/editors/space_file/filelist.h | 3 | ||||
-rw-r--r-- | source/blender/editors/space_file/space_file.c | 19 |
3 files changed, 35 insertions, 26 deletions
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index f545f0e32ff..ebe42219f01 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -105,7 +105,6 @@ typedef struct ThumbnailJob { short *stop; short *do_update; struct FileList* filelist; - FileSelectParams *params; ReportList reports; } ThumbnailJob; @@ -1279,25 +1278,19 @@ static void thumbnails_startjob(void *tjv, short *stop, short *do_update) tj->do_update= do_update; while ( (*stop==0) && (limg) ) { - /* skip if thumbnail view is not enabled, makes network filesystems browse faster */ - if(tj->params->display != FILE_IMGDISPLAY) { - PIL_sleep_ms(100); /* 10th of a sec should be enough */ - } - else { - if ( limg->flags & IMAGEFILE ) { - limg->img = IMB_thumb_manage(limg->path, THB_NORMAL, THB_SOURCE_IMAGE); - } else if ( limg->flags & MOVIEFILE ) { - limg->img = IMB_thumb_manage(limg->path, THB_NORMAL, THB_SOURCE_MOVIE); - if (!limg->img) { - /* remember that file can't be loaded via IMB_open_anim */ - limg->flags &= ~MOVIEFILE; - limg->flags |= MOVIEFILE_ICON; - } - } - *do_update = 1; - PIL_sleep_ms(10); - limg = limg->next; + if ( limg->flags & IMAGEFILE ) { + limg->img = IMB_thumb_manage(limg->path, THB_NORMAL, THB_SOURCE_IMAGE); + } else if ( limg->flags & MOVIEFILE ) { + limg->img = IMB_thumb_manage(limg->path, THB_NORMAL, THB_SOURCE_MOVIE); + if (!limg->img) { + /* remember that file can't be loaded via IMB_open_anim */ + limg->flags &= ~MOVIEFILE; + limg->flags |= MOVIEFILE_ICON; + } } + *do_update = 1; + PIL_sleep_ms(10); + limg = limg->next; } } @@ -1330,7 +1323,7 @@ static void thumbnails_free(void *tjv) } -void thumbnails_start(struct FileList* filelist, FileSelectParams *params, const struct bContext* C) +void thumbnails_start(struct FileList* filelist, const struct bContext* C) { wmJob *steve; ThumbnailJob *tj; @@ -1339,7 +1332,6 @@ void thumbnails_start(struct FileList* filelist, FileSelectParams *params, const /* prepare job data */ tj= MEM_callocN(sizeof(ThumbnailJob), "thumbnails\n"); tj->filelist = filelist; - tj->params = params; for (idx = 0; idx < filelist->numfiles;idx++) { if (!filelist->filelist[idx].image) { if ( (filelist->filelist[idx].flags & IMAGEFILE) || (filelist->filelist[idx].flags & MOVIEFILE) ) { @@ -1368,3 +1360,8 @@ void thumbnails_stop(struct FileList* filelist, const struct bContext* C) { WM_jobs_kill(CTX_wm_manager(C), filelist); } + +int thumbnails_running(struct FileList* filelist, const struct bContext* C) +{ + return WM_jobs_test(CTX_wm_manager(C), filelist); +}
\ No newline at end of file diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h index 6d6854e4433..b2a86b9c764 100644 --- a/source/blender/editors/space_file/filelist.h +++ b/source/blender/editors/space_file/filelist.h @@ -85,7 +85,8 @@ void folderlist_pushdir(struct ListBase* folderlist, const char *dir); int folderlist_clear_next(struct SpaceFile* sfile); void thumbnails_stop(struct FileList* filelist, const struct bContext* C); -void thumbnails_start(struct FileList* filelist, FileSelectParams *params, const struct bContext* C); +void thumbnails_start(struct FileList* filelist, const struct bContext* C); +int thumbnails_running(struct FileList* filelist, const struct bContext* C); #ifdef __cplusplus } diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 95a1771ebbb..300a72851a4 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -201,17 +201,28 @@ static void file_refresh(const bContext *C, ScrArea *sa) filelist_sort(sfile->files, params->sort); } BLI_strncpy(params->dir, filelist_dir(sfile->files), FILE_MAX); - thumbnails_start(sfile->files, params, C); + if(params->display == FILE_IMGDISPLAY) { + thumbnails_start(sfile->files, C); + } } else { - filelist_filter(sfile->files); if(params->sort!=FILE_SORT_NONE) { thumbnails_stop(sfile->files, C); filelist_sort(sfile->files, params->sort); - thumbnails_start(sfile->files, params, C); + if(params->display == FILE_IMGDISPLAY) { + thumbnails_start(sfile->files, C); + } } else { + if(params->display == FILE_IMGDISPLAY) { + if (!thumbnails_running(sfile->files,C)) { + thumbnails_start(sfile->files, C); + } + } else { + /* stop any running thumbnail jobs if we're not + displaying them - speedup for NFS */ + thumbnails_stop(sfile->files, C); + } filelist_filter(sfile->files); } - } if (params->renamefile[0] != '\0') { |