Cache out of view thumbnails in the background
This commit is contained in:
		
							
								
								
									
										24
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								main.c
									
									
									
									
									
								
							@@ -385,7 +385,10 @@ void update_info(void)
 | 
			
		||||
	r->p = r->buf;
 | 
			
		||||
	if (mode == MODE_THUMB) {
 | 
			
		||||
		if (tns.loadnext < tns.end) {
 | 
			
		||||
			bar_put(l, "Loading... %0*d", fw, MAX(tns.loadnext, 1));
 | 
			
		||||
			bar_put(l, "Loading... %0*d", fw, tns.loadnext + 1);
 | 
			
		||||
			ow_info = false;
 | 
			
		||||
		} else if (tns.initnext < filecnt) {
 | 
			
		||||
			bar_put(l, "Caching... %0*d", fw, tns.initnext + 1);
 | 
			
		||||
			ow_info = false;
 | 
			
		||||
		} else {
 | 
			
		||||
			ow_info = true;
 | 
			
		||||
@@ -453,7 +456,7 @@ void reset_cursor(void)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		if (tns.loadnext < tns.end)
 | 
			
		||||
		if (tns.loadnext < tns.end || tns.initnext < filecnt)
 | 
			
		||||
			cursor = CURSOR_WATCH;
 | 
			
		||||
		else
 | 
			
		||||
			cursor = CURSOR_ARROW;
 | 
			
		||||
@@ -694,26 +697,29 @@ void run(void)
 | 
			
		||||
	int xfd;
 | 
			
		||||
	fd_set fds;
 | 
			
		||||
	struct timeval timeout;
 | 
			
		||||
	bool discard, load_thumb, to_set;
 | 
			
		||||
	bool discard, init_thumb, load_thumb, to_set;
 | 
			
		||||
	XEvent ev, nextev;
 | 
			
		||||
 | 
			
		||||
	while (true) {
 | 
			
		||||
		to_set = check_timeouts(&timeout);
 | 
			
		||||
		init_thumb = mode == MODE_THUMB && tns.initnext < filecnt;
 | 
			
		||||
		load_thumb = mode == MODE_THUMB && tns.loadnext < tns.end;
 | 
			
		||||
 | 
			
		||||
		if ((load_thumb || to_set || info.fd != -1) &&
 | 
			
		||||
		if ((init_thumb || load_thumb || to_set || info.fd != -1) &&
 | 
			
		||||
		    XPending(win.env.dpy) == 0)
 | 
			
		||||
		{
 | 
			
		||||
			if (load_thumb) {
 | 
			
		||||
				set_timeout(redraw, TO_REDRAW_THUMBS, false);
 | 
			
		||||
				if (!tns_load(&tns, tns.loadnext, false)) {
 | 
			
		||||
				if (!tns_load(&tns, tns.loadnext, false, false)) {
 | 
			
		||||
					remove_file(tns.loadnext, false);
 | 
			
		||||
					tns.dirty = true;
 | 
			
		||||
				}
 | 
			
		||||
				while (tns.loadnext < tns.end && tns.thumbs[tns.loadnext].im != NULL)
 | 
			
		||||
					tns.loadnext++;
 | 
			
		||||
				if (tns.loadnext >= tns.end)
 | 
			
		||||
					redraw();
 | 
			
		||||
			} else if (init_thumb) {
 | 
			
		||||
				set_timeout(redraw, TO_REDRAW_THUMBS, false);
 | 
			
		||||
				if (!tns_load(&tns, tns.initnext, false, true))
 | 
			
		||||
					remove_file(tns.initnext, false);
 | 
			
		||||
			} else {
 | 
			
		||||
				xfd = ConnectionNumber(win.env.dpy);
 | 
			
		||||
				FD_ZERO(&fds);
 | 
			
		||||
@@ -899,8 +905,8 @@ int main(int argc, char **argv)
 | 
			
		||||
	if (options->thumb_mode) {
 | 
			
		||||
		mode = MODE_THUMB;
 | 
			
		||||
		tns_init(&tns, files, &filecnt, &fileidx, &win);
 | 
			
		||||
		while (!tns_load(&tns, 0, false))
 | 
			
		||||
			remove_file(0, false);
 | 
			
		||||
		while (!tns_load(&tns, fileidx, false, false))
 | 
			
		||||
			remove_file(fileidx, false);
 | 
			
		||||
	} else {
 | 
			
		||||
		mode = MODE_IMAGE;
 | 
			
		||||
		tns.thumbs = NULL;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user