From a7a849761fed7f829da3874ef6a5b5097a7b9e6a Mon Sep 17 00:00:00 2001 From: Bert Date: Sat, 3 Sep 2011 17:01:39 +0200 Subject: Simplified cursor resetting --- main.c | 57 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 25 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index f596733..6fafb8b 100644 --- a/main.c +++ b/main.c @@ -49,7 +49,7 @@ typedef struct { /* timeout handler functions: */ void redraw(); -void hide_cursor(); +void reset_cursor(); void animate(); appmode_t mode; @@ -65,7 +65,7 @@ char win_title[TITLE_LEN]; timeout_t timeouts[] = { { { 0, 0 }, False, redraw }, - { { 0, 0 }, False, hide_cursor }, + { { 0, 0 }, False, reset_cursor }, { { 0, 0 }, False, animate } }; @@ -189,10 +189,9 @@ void load_image(int new) { if (new < 0 || new >= filecnt) return; - /* cursor gets reset in redraw() */ win_set_cursor(&win, CURSOR_WATCH); + img_close(&img, 0); - while (!img_load(&img, &files[new])) { remove_file(new, 0); if (new >= filecnt) @@ -247,23 +246,34 @@ void update_title() { } void redraw() { - if (mode == MODE_IMAGE) { + if (mode == MODE_IMAGE) img_render(&img, &win); - if (img.multi.animate) { - win_set_cursor(&win, CURSOR_NONE); - } else { - win_set_cursor(&win, CURSOR_ARROW); - set_timeout(hide_cursor, TO_CURSOR_HIDE, 1); - } - } else { + else tns_render(&tns, &win); - } update_title(); reset_timeout(redraw); + reset_cursor(); } -void hide_cursor() { - win_set_cursor(&win, CURSOR_NONE); +void reset_cursor() { + int i; + cursor_t cursor = CURSOR_NONE; + + if (mode == MODE_IMAGE) { + for (i = 0; i < LEN(timeouts); i++) { + if (timeouts[i].handler == reset_cursor) { + if (timeouts[i].active) + cursor = CURSOR_ARROW; + break; + } + } + } else { + if (tns.cnt != filecnt) + cursor = CURSOR_WATCH; + else + cursor = CURSOR_ARROW; + } + win_set_cursor(&win, cursor); } void animate() { @@ -312,7 +322,7 @@ void on_buttonpress(XButtonEvent *bev) { if (mode == MODE_IMAGE) { win_set_cursor(&win, CURSOR_ARROW); - set_timeout(hide_cursor, TO_CURSOR_HIDE, 1); + set_timeout(reset_cursor, TO_CURSOR_HIDE, 1); for (i = 0; i < LEN(buttons); i++) { if (buttons[i].button == bev->button && @@ -329,15 +339,15 @@ void on_buttonpress(XButtonEvent *bev) { case Button1: if ((sel = tns_translate(&tns, bev->x, bev->y)) >= 0) { if (sel == tns.sel) { - load_image(tns.sel); mode = MODE_IMAGE; - set_timeout(hide_cursor, TO_CURSOR_HIDE, 1); + set_timeout(reset_cursor, TO_CURSOR_HIDE, 1); + load_image(tns.sel); + redraw(); } else { tns_highlight(&tns, &win, tns.sel, False); tns_highlight(&tns, &win, sel, True); tns.sel = sel; } - redraw(); break; } break; @@ -363,18 +373,15 @@ void run() { !XPending(win.env.dpy)) { /* load thumbnails */ - win_set_cursor(&win, CURSOR_WATCH); set_timeout(redraw, TO_REDRAW_THUMBS, 0); if (tns_load(&tns, tns.cnt, &files[tns.cnt], False, False)) tns.cnt++; else remove_file(tns.cnt, 0); - if (tns.cnt == filecnt) { + if (tns.cnt == filecnt) redraw(); - win_set_cursor(&win, CURSOR_ARROW); - } else { + else check_timeouts(NULL); - } } while (!XPending(win.env.dpy) && check_timeouts(&timeout)) { @@ -410,7 +417,7 @@ void run() { case MotionNotify: if (mode == MODE_IMAGE) { win_set_cursor(&win, CURSOR_ARROW); - set_timeout(hide_cursor, TO_CURSOR_HIDE, 1); + set_timeout(reset_cursor, TO_CURSOR_HIDE, 1); } break; } -- cgit v1.2.3-54-g00ecf