Simplified cursor resetting
This commit is contained in:
parent
9fa0bbca17
commit
a7a849761f
2
Makefile
2
Makefile
@ -1,6 +1,6 @@
|
||||
all: sxiv
|
||||
|
||||
VERSION = git-20110902
|
||||
VERSION = git-20110903
|
||||
|
||||
CC = gcc
|
||||
DESTDIR =
|
||||
|
23
commands.c
23
commands.c
@ -33,7 +33,7 @@ void cleanup();
|
||||
void remove_file(int, unsigned char);
|
||||
void load_image(int);
|
||||
void redraw();
|
||||
void hide_cursor();
|
||||
void reset_cursor();
|
||||
void animate();
|
||||
void set_timeout(timeout_f, int, int);
|
||||
void reset_timeout(timeout_f);
|
||||
@ -56,8 +56,7 @@ int it_switch_mode(arg_t a) {
|
||||
if (!tns.thumbs)
|
||||
tns_init(&tns, filecnt);
|
||||
img_close(&img, 0);
|
||||
win_set_cursor(&win, CURSOR_ARROW);
|
||||
reset_timeout(hide_cursor);
|
||||
reset_timeout(reset_cursor);
|
||||
tns.sel = fileidx;
|
||||
tns.dirty = 1;
|
||||
mode = MODE_THUMB;
|
||||
@ -81,12 +80,15 @@ int it_toggle_fullscreen(arg_t a) {
|
||||
int it_reload_image(arg_t a) {
|
||||
if (mode == MODE_IMAGE) {
|
||||
load_image(fileidx);
|
||||
} else if (!tns_load(&tns, tns.sel, &files[tns.sel], True, False)) {
|
||||
} else {
|
||||
win_set_cursor(&win, CURSOR_WATCH);
|
||||
if (!tns_load(&tns, tns.sel, &files[tns.sel], True, False)) {
|
||||
remove_file(tns.sel, 0);
|
||||
tns.dirty = 1;
|
||||
if (tns.sel >= tns.cnt)
|
||||
tns.sel = tns.cnt - 1;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -250,7 +252,7 @@ int i_drag(arg_t a) {
|
||||
}
|
||||
|
||||
win_set_cursor(&win, CURSOR_ARROW);
|
||||
set_timeout(hide_cursor, TO_CURSOR_HIDE, 1);
|
||||
set_timeout(reset_cursor, TO_CURSOR_HIDE, 1);
|
||||
reset_timeout(redraw);
|
||||
|
||||
return 0;
|
||||
@ -369,17 +371,17 @@ int it_shell_cmd(arg_t a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
win_set_cursor(&win, CURSOR_WATCH);
|
||||
|
||||
if ((pid = fork()) == 0) {
|
||||
execl("/bin/sh", "/bin/sh", "-c", cmdline, NULL);
|
||||
warn("could not exec: /bin/sh");
|
||||
exit(1);
|
||||
} else if (pid < 0) {
|
||||
warn("could not fork. command line was: %s", cmdline);
|
||||
goto end;
|
||||
return 0;
|
||||
}
|
||||
|
||||
win_set_cursor(&win, CURSOR_WATCH);
|
||||
|
||||
waitpid(pid, &status, 0);
|
||||
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
|
||||
warn("child exited with non-zero return value: %d. command line was: %s",
|
||||
@ -398,10 +400,5 @@ int it_shell_cmd(arg_t a) {
|
||||
tns.sel = tns.cnt - 1;
|
||||
}
|
||||
|
||||
end:
|
||||
if (mode == MODE_THUMB)
|
||||
win_set_cursor(&win, CURSOR_ARROW);
|
||||
/* else: cursor gets reset in redraw() */
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
57
main.c
57
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);
|
||||
|
||||
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,19 +373,16 @@ 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)) {
|
||||
/* wait for timeouts */
|
||||
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user