summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBert Münnich <ber.t@posteo.de>2014-09-26 22:45:01 +0200
committerBert Münnich <ber.t@posteo.de>2014-09-26 22:47:28 +0200
commit5fce009b73d52320aeae17f7d5c22ca740784173 (patch)
tree368ba053de44fea2e97726f4d47a1dd97d73c340
parentc1e084357cbf2492c510a2a8e98aae604e8db355 (diff)
downloadnsxiv-5fce009b73d52320aeae17f7d5c22ca740784173.tar.zst
Refactored main loop; properly fixes startup issue
-rw-r--r--main.c59
1 files changed, 27 insertions, 32 deletions
diff --git a/main.c b/main.c
index 058731b..ffc8013 100644
--- 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();