== 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.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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') {
|
||||
|
||||
Reference in New Issue
Block a user