From b828b554191c761776e4757d1b92156c624c75f6 Mon Sep 17 00:00:00 2001 From: Bert Date: Thu, 17 Feb 2011 14:13:18 +0100 Subject: [PATCH] Immediately respond to events while loading thumbs --- main.c | 19 +++++++++++++++---- thumbs.c | 2 ++ util.h | 3 +++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/main.c b/main.c index 80d69b6..5b3bd33 100644 --- a/main.c +++ b/main.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -469,7 +470,7 @@ void on_motionnotify(XMotionEvent *mev) { void run() { int xfd; fd_set fds; - struct timeval t; + struct timeval t, t0; XEvent ev; timeout = 0; @@ -477,12 +478,22 @@ void run() { while (1) { if (mode == MODE_THUMBS && tns_loaded < filecnt) { win_set_cursor(&win, CURSOR_WATCH); - tns_load(&tns, &win, filenames[tns_loaded++]); - tns_render(&tns, &win); + gettimeofday(&t0, 0); + + while (!XPending(win.env.dpy) && tns_loaded < filecnt) { + tns_load(&tns, &win, filenames[tns_loaded++]); + gettimeofday(&t, 0); + if (TV_TO_DOUBLE(t) - TV_TO_DOUBLE(t0) >= 0.25) + break; + } if (tns_loaded == filecnt) win_set_cursor(&win, CURSOR_ARROW); - else if (!XPending(win.env.dpy)) + if (!XPending(win.env.dpy)) { + tns_render(&tns, &win); continue; + } else { + timeout = 1; + } } else if (timeout) { t.tv_sec = 0; t.tv_usec = 75000; diff --git a/thumbs.c b/thumbs.c index 9a8791f..b4e6976 100644 --- a/thumbs.c +++ b/thumbs.c @@ -84,6 +84,8 @@ void tns_render(tns_t *tns, win_t *win) { if (!tns || !win) return; + + printf("tns_render()\n"); tns->cols = win->w / thumb_dim; tns->rows = win->h / thumb_dim; diff --git a/util.h b/util.h index 2caf347..f1db6b8 100644 --- a/util.h +++ b/util.h @@ -27,6 +27,9 @@ #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define LEN(a) (sizeof(a) / sizeof(a[0])) +#define TV_TO_DOUBLE(x) ((double) ((x).tv_sec) + 0.000001 * \ + (double) ((x).tv_usec)) + void* s_malloc(size_t); void* s_realloc(void*, size_t);