Revised thumbnail loading...
- Only load the thumbnails that are currently visible in the window - Unload thumbnails that are leaving the visible area - Much less memory needed, but scrolling is now slower - This also unintentionally fixes issue #86
This commit is contained in:
33
main.c
33
main.c
@ -368,14 +368,13 @@ void update_info(void)
|
||||
return;
|
||||
mark = files[fileidx].marked ? "+ " : "";
|
||||
if (mode == MODE_THUMB) {
|
||||
if (tns.loadnext >= filecnt) {
|
||||
n = snprintf(rt, rlen, "%s%0*d/%d", mark, fw, fileidx + 1, filecnt);
|
||||
ow_info = true;
|
||||
} else {
|
||||
snprintf(lt, llen, "Loading... %0*d/%d", fw, tns.loadnext, filecnt);
|
||||
rt[0] = '\0';
|
||||
if (tns.loadnext < tns.end) {
|
||||
snprintf(lt, llen, "Loading... %0*d", fw, tns.loadnext);
|
||||
ow_info = false;
|
||||
} else {
|
||||
ow_info = true;
|
||||
}
|
||||
n = snprintf(rt, rlen, "%s%0*d/%d", mark, fw, fileidx + 1, filecnt);
|
||||
} else {
|
||||
n = snprintf(rt, rlen, "%s", mark);
|
||||
if (img.ss.on)
|
||||
@ -439,7 +438,7 @@ void reset_cursor(void)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (tns.loadnext < filecnt)
|
||||
if (tns.loadnext < tns.end)
|
||||
cursor = CURSOR_WATCH;
|
||||
else
|
||||
cursor = CURSOR_ARROW;
|
||||
@ -531,7 +530,7 @@ void run_key_handler(const char *key, unsigned int mask)
|
||||
memcmp(&oldst->st_mtime, &newst.st_mtime, sizeof(newst.st_mtime)) != 0)
|
||||
{
|
||||
if (tns.thumbs != NULL) {
|
||||
tns.thumbs[finfo[i].fn].loaded = false;
|
||||
tns_unload(&tns, finfo[i].fn);
|
||||
tns.loadnext = MIN(tns.loadnext, finfo[i].fn);
|
||||
}
|
||||
changed = true;
|
||||
@ -669,29 +668,24 @@ void run(void)
|
||||
int xfd;
|
||||
fd_set fds;
|
||||
struct timeval timeout;
|
||||
bool discard, reload, to_set;
|
||||
bool discard, to_set;
|
||||
XEvent ev, nextev;
|
||||
|
||||
set_timeout(redraw, 25, false);
|
||||
|
||||
while (true) {
|
||||
while (mode == MODE_THUMB && tns.loadnext < filecnt &&
|
||||
while (mode == MODE_THUMB && tns.loadnext < tns.end &&
|
||||
XPending(win.env.dpy) == 0)
|
||||
{
|
||||
/* load thumbnails */
|
||||
reload = tns.loadnext != tns.cnt;
|
||||
set_timeout(redraw, TO_REDRAW_THUMBS, false);
|
||||
if (tns_load(&tns, tns.loadnext, reload)) {
|
||||
if (!reload)
|
||||
tns.cnt++;
|
||||
} else {
|
||||
if (!tns_load(&tns, tns.loadnext, false)) {
|
||||
remove_file(tns.loadnext, false);
|
||||
if (reload)
|
||||
tns.dirty = true;
|
||||
tns.dirty = true;
|
||||
}
|
||||
while (tns.loadnext < filecnt && tns.thumbs[tns.loadnext].loaded)
|
||||
while (tns.loadnext < tns.end && tns.thumbs[tns.loadnext].im != NULL)
|
||||
tns.loadnext++;
|
||||
if (tns.loadnext >= filecnt)
|
||||
if (tns.loadnext >= tns.end)
|
||||
redraw();
|
||||
else
|
||||
check_timeouts(NULL);
|
||||
@ -882,7 +876,6 @@ int main(int argc, char **argv)
|
||||
tns_init(&tns, files, filecnt, &fileidx, &win);
|
||||
while (!tns_load(&tns, 0, false))
|
||||
remove_file(0, false);
|
||||
tns.cnt = 1;
|
||||
} else {
|
||||
mode = MODE_IMAGE;
|
||||
tns.thumbs = NULL;
|
||||
|
Reference in New Issue
Block a user