sxiv

simple X image viewer
git clone git://git.suckless.org/sxiv
Log | Files | Refs | LICENSE

commit 5fce009b73d52320aeae17f7d5c22ca740784173
parent c1e084357cbf2492c510a2a8e98aae604e8db355
Author: Bert M√ľnnich <ber.t@posteo.de>
Date:   Fri, 26 Sep 2014 22:45:01 +0200

Refactored main loop; properly fixes startup issue

Diffstat:
main.c | 59+++++++++++++++++++++++++++--------------------------------
1 file changed, 27 insertions(+), 32 deletions(-)

diff --git a/main.c b/main.c @@ -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();