diff options
-rw-r--r-- | main.c | 59 |
1 files changed, 27 insertions, 32 deletions
@@ -668,41 +668,39 @@ void run(void) int xfd; fd_set fds; struct timeval timeout; - bool discard, to_set; + bool discard, load_thumb, to_set; XEvent ev, nextev; while (true) { - while (mode == MODE_THUMB && tns.loadnext < tns.end && - XPending(win.env.dpy) == 0) - { - /* load thumbnails */ - set_timeout(redraw, TO_REDRAW_THUMBS, false); - if (!tns_load(&tns, tns.loadnext, 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 - check_timeouts(NULL); - } + to_set = check_timeouts(&timeout); + load_thumb = mode == MODE_THUMB && tns.loadnext < tns.end; - while (XPending(win.env.dpy) == 0 - && ((to_set = check_timeouts(&timeout)) || info.fd != -1)) + if ((load_thumb || to_set || info.fd != -1) && + XPending(win.env.dpy) == 0) { - /* check for timeouts & input */ - xfd = ConnectionNumber(win.env.dpy); - FD_ZERO(&fds); - FD_SET(xfd, &fds); - if (info.fd != -1) { - FD_SET(info.fd, &fds); - xfd = MAX(xfd, info.fd); + if (load_thumb) { + set_timeout(redraw, TO_REDRAW_THUMBS, false); + if (!tns_load(&tns, tns.loadnext, 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 { + xfd = ConnectionNumber(win.env.dpy); + FD_ZERO(&fds); + FD_SET(xfd, &fds); + if (info.fd != -1) { + FD_SET(info.fd, &fds); + xfd = MAX(xfd, info.fd); + } + select(xfd + 1, &fds, 0, 0, to_set ? &timeout : NULL); + if (info.fd != -1 && FD_ISSET(info.fd, &fds)) + read_info(); } - select(xfd + 1, &fds, 0, 0, to_set ? &timeout : NULL); - if (info.fd != -1 && FD_ISSET(info.fd, &fds)) - read_info(); + continue; } do { @@ -882,9 +880,6 @@ int main(int argc, char **argv) win_open(&win); win_set_cursor(&win, CURSOR_WATCH); - if (mode == MODE_THUMB) - tns_render(&tns); - set_timeout(redraw, 25, false); run(); |