|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|