Refactored main loop; properly fixes startup issue
This commit is contained in:
parent
c1e084357c
commit
5fce009b73
59
main.c
59
main.c
@ -668,41 +668,39 @@ void run(void)
|
|||||||
int xfd;
|
int xfd;
|
||||||
fd_set fds;
|
fd_set fds;
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
bool discard, to_set;
|
bool discard, load_thumb, to_set;
|
||||||
XEvent ev, nextev;
|
XEvent ev, nextev;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
while (mode == MODE_THUMB && tns.loadnext < tns.end &&
|
to_set = check_timeouts(&timeout);
|
||||||
XPending(win.env.dpy) == 0)
|
load_thumb = mode == MODE_THUMB && tns.loadnext < tns.end;
|
||||||
{
|
|
||||||
/* 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (XPending(win.env.dpy) == 0
|
if ((load_thumb || to_set || info.fd != -1) &&
|
||||||
&& ((to_set = check_timeouts(&timeout)) || info.fd != -1))
|
XPending(win.env.dpy) == 0)
|
||||||
{
|
{
|
||||||
/* check for timeouts & input */
|
if (load_thumb) {
|
||||||
xfd = ConnectionNumber(win.env.dpy);
|
set_timeout(redraw, TO_REDRAW_THUMBS, false);
|
||||||
FD_ZERO(&fds);
|
if (!tns_load(&tns, tns.loadnext, false)) {
|
||||||
FD_SET(xfd, &fds);
|
remove_file(tns.loadnext, false);
|
||||||
if (info.fd != -1) {
|
tns.dirty = true;
|
||||||
FD_SET(info.fd, &fds);
|
}
|
||||||
xfd = MAX(xfd, info.fd);
|
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);
|
continue;
|
||||||
if (info.fd != -1 && FD_ISSET(info.fd, &fds))
|
|
||||||
read_info();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@ -882,9 +880,6 @@ int main(int argc, char **argv)
|
|||||||
win_open(&win);
|
win_open(&win);
|
||||||
win_set_cursor(&win, CURSOR_WATCH);
|
win_set_cursor(&win, CURSOR_WATCH);
|
||||||
|
|
||||||
if (mode == MODE_THUMB)
|
|
||||||
tns_render(&tns);
|
|
||||||
|
|
||||||
set_timeout(redraw, 25, false);
|
set_timeout(redraw, 25, false);
|
||||||
|
|
||||||
run();
|
run();
|
||||||
|
Loading…
Reference in New Issue
Block a user