nsxiv5fce009
Refactored main loop; properly fixes startup issue
+27 −32
1 file changed
- M main.c +27 −32
| @@ -668,41 +668,39 @@ void run(void) | |||
| 668 | 668 | int xfd; | |
| 669 | 669 | fd_set fds; | |
| 670 | 670 | struct timeval timeout; | |
| 671 | − | bool discard, to_set; | |
| 671 | + | bool discard, load_thumb, to_set; | |
| 672 | 672 | XEvent ev, nextev; | |
| 673 | 673 | ||
| 674 | 674 | while (true) { | |
| 675 | − | while (mode == MODE_THUMB && tns.loadnext < tns.end && | |
| 676 | − | XPending(win.env.dpy) == 0) | |
| 677 | − | { | |
| 678 | − | /* load thumbnails */ | |
| 679 | − | set_timeout(redraw, TO_REDRAW_THUMBS, false); | |
| 680 | − | if (!tns_load(&tns, tns.loadnext, false)) { | |
| 681 | − | remove_file(tns.loadnext, false); | |
| 682 | − | tns.dirty = true; | |
| 683 | − | } | |
| 684 | − | while (tns.loadnext < tns.end && tns.thumbs[tns.loadnext].im != NULL) | |
| 685 | − | tns.loadnext++; | |
| 686 | − | if (tns.loadnext >= tns.end) | |
| 687 | − | redraw(); | |
| 688 | − | else | |
| 689 | − | check_timeouts(NULL); | |
| 690 | − | } | |
| 675 | + | to_set = check_timeouts(&timeout); | |
| 676 | + | load_thumb = mode == MODE_THUMB && tns.loadnext < tns.end; | |
| 691 | 677 | ||
| 692 | − | while (XPending(win.env.dpy) == 0 | |
| 693 | − | && ((to_set = check_timeouts(&timeout)) || info.fd != -1)) | |
| 678 | + | if ((load_thumb || to_set || info.fd != -1) && | |
| 679 | + | XPending(win.env.dpy) == 0) | |
| 694 | 680 | { | |
| 695 | − | /* check for timeouts & input */ | |
| 696 | − | xfd = ConnectionNumber(win.env.dpy); | |
| 697 | − | FD_ZERO(&fds); | |
| 698 | − | FD_SET(xfd, &fds); | |
| 699 | − | if (info.fd != -1) { | |
| 700 | − | FD_SET(info.fd, &fds); | |
| 701 | − | xfd = MAX(xfd, info.fd); | |
| 681 | + | if (load_thumb) { | |
| 682 | + | set_timeout(redraw, TO_REDRAW_THUMBS, false); | |
| 683 | + | if (!tns_load(&tns, tns.loadnext, false)) { | |
| 684 | + | remove_file(tns.loadnext, false); | |
| 685 | + | tns.dirty = true; | |
| 686 | + | } | |
| 687 | + | while (tns.loadnext < tns.end && tns.thumbs[tns.loadnext].im != NULL) | |
| 688 | + | tns.loadnext++; | |
| 689 | + | if (tns.loadnext >= tns.end) | |
| 690 | + | redraw(); | |
| 691 | + | } else { | |
| 692 | + | xfd = ConnectionNumber(win.env.dpy); | |
| 693 | + | FD_ZERO(&fds); | |
| 694 | + | FD_SET(xfd, &fds); | |
| 695 | + | if (info.fd != -1) { | |
| 696 | + | FD_SET(info.fd, &fds); | |
| 697 | + | xfd = MAX(xfd, info.fd); | |
| 698 | + | } | |
| 699 | + | select(xfd + 1, &fds, 0, 0, to_set ? &timeout : NULL); | |
| 700 | + | if (info.fd != -1 && FD_ISSET(info.fd, &fds)) | |
| 701 | + | read_info(); | |
| 702 | 702 | } | |
| 703 | − | select(xfd + 1, &fds, 0, 0, to_set ? &timeout : NULL); | |
| 704 | − | if (info.fd != -1 && FD_ISSET(info.fd, &fds)) | |
| 705 | − | read_info(); | |
| 703 | + | continue; | |
| 706 | 704 | } | |
| 707 | 705 | ||
| 708 | 706 | do { | |
| @@ -882,9 +880,6 @@ int main(int argc, char **argv) | |||
| 882 | 880 | win_open(&win); | |
| 883 | 881 | win_set_cursor(&win, CURSOR_WATCH); | |
| 884 | 882 | ||
| 885 | − | if (mode == MODE_THUMB) | |
| 886 | − | tns_render(&tns); | |
| 887 | − | ||
| 888 | 883 | set_timeout(redraw, 25, false); | |
| 889 | 884 | ||
| 890 | 885 | run(); | |