Simplified cursor resetting
This commit is contained in:
parent
9fa0bbca17
commit
a7a849761f
2
Makefile
2
Makefile
@ -1,6 +1,6 @@
|
|||||||
all: sxiv
|
all: sxiv
|
||||||
|
|
||||||
VERSION = git-20110902
|
VERSION = git-20110903
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
|
31
commands.c
31
commands.c
@ -33,7 +33,7 @@ void cleanup();
|
|||||||
void remove_file(int, unsigned char);
|
void remove_file(int, unsigned char);
|
||||||
void load_image(int);
|
void load_image(int);
|
||||||
void redraw();
|
void redraw();
|
||||||
void hide_cursor();
|
void reset_cursor();
|
||||||
void animate();
|
void animate();
|
||||||
void set_timeout(timeout_f, int, int);
|
void set_timeout(timeout_f, int, int);
|
||||||
void reset_timeout(timeout_f);
|
void reset_timeout(timeout_f);
|
||||||
@ -56,8 +56,7 @@ int it_switch_mode(arg_t a) {
|
|||||||
if (!tns.thumbs)
|
if (!tns.thumbs)
|
||||||
tns_init(&tns, filecnt);
|
tns_init(&tns, filecnt);
|
||||||
img_close(&img, 0);
|
img_close(&img, 0);
|
||||||
win_set_cursor(&win, CURSOR_ARROW);
|
reset_timeout(reset_cursor);
|
||||||
reset_timeout(hide_cursor);
|
|
||||||
tns.sel = fileidx;
|
tns.sel = fileidx;
|
||||||
tns.dirty = 1;
|
tns.dirty = 1;
|
||||||
mode = MODE_THUMB;
|
mode = MODE_THUMB;
|
||||||
@ -81,11 +80,14 @@ int it_toggle_fullscreen(arg_t a) {
|
|||||||
int it_reload_image(arg_t a) {
|
int it_reload_image(arg_t a) {
|
||||||
if (mode == MODE_IMAGE) {
|
if (mode == MODE_IMAGE) {
|
||||||
load_image(fileidx);
|
load_image(fileidx);
|
||||||
} else if (!tns_load(&tns, tns.sel, &files[tns.sel], True, False)) {
|
} else {
|
||||||
remove_file(tns.sel, 0);
|
win_set_cursor(&win, CURSOR_WATCH);
|
||||||
tns.dirty = 1;
|
if (!tns_load(&tns, tns.sel, &files[tns.sel], True, False)) {
|
||||||
if (tns.sel >= tns.cnt)
|
remove_file(tns.sel, 0);
|
||||||
tns.sel = tns.cnt - 1;
|
tns.dirty = 1;
|
||||||
|
if (tns.sel >= tns.cnt)
|
||||||
|
tns.sel = tns.cnt - 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -250,7 +252,7 @@ int i_drag(arg_t a) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
win_set_cursor(&win, CURSOR_ARROW);
|
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);
|
reset_timeout(redraw);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -369,17 +371,17 @@ int it_shell_cmd(arg_t a) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
win_set_cursor(&win, CURSOR_WATCH);
|
|
||||||
|
|
||||||
if ((pid = fork()) == 0) {
|
if ((pid = fork()) == 0) {
|
||||||
execl("/bin/sh", "/bin/sh", "-c", cmdline, NULL);
|
execl("/bin/sh", "/bin/sh", "-c", cmdline, NULL);
|
||||||
warn("could not exec: /bin/sh");
|
warn("could not exec: /bin/sh");
|
||||||
exit(1);
|
exit(1);
|
||||||
} else if (pid < 0) {
|
} else if (pid < 0) {
|
||||||
warn("could not fork. command line was: %s", cmdline);
|
warn("could not fork. command line was: %s", cmdline);
|
||||||
goto end;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
win_set_cursor(&win, CURSOR_WATCH);
|
||||||
|
|
||||||
waitpid(pid, &status, 0);
|
waitpid(pid, &status, 0);
|
||||||
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
|
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
|
||||||
warn("child exited with non-zero return value: %d. command line was: %s",
|
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;
|
tns.sel = tns.cnt - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
|
||||||
if (mode == MODE_THUMB)
|
|
||||||
win_set_cursor(&win, CURSOR_ARROW);
|
|
||||||
/* else: cursor gets reset in redraw() */
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
57
main.c
57
main.c
@ -49,7 +49,7 @@ typedef struct {
|
|||||||
|
|
||||||
/* timeout handler functions: */
|
/* timeout handler functions: */
|
||||||
void redraw();
|
void redraw();
|
||||||
void hide_cursor();
|
void reset_cursor();
|
||||||
void animate();
|
void animate();
|
||||||
|
|
||||||
appmode_t mode;
|
appmode_t mode;
|
||||||
@ -65,7 +65,7 @@ char win_title[TITLE_LEN];
|
|||||||
|
|
||||||
timeout_t timeouts[] = {
|
timeout_t timeouts[] = {
|
||||||
{ { 0, 0 }, False, redraw },
|
{ { 0, 0 }, False, redraw },
|
||||||
{ { 0, 0 }, False, hide_cursor },
|
{ { 0, 0 }, False, reset_cursor },
|
||||||
{ { 0, 0 }, False, animate }
|
{ { 0, 0 }, False, animate }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -189,10 +189,9 @@ void load_image(int new) {
|
|||||||
if (new < 0 || new >= filecnt)
|
if (new < 0 || new >= filecnt)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* cursor gets reset in redraw() */
|
|
||||||
win_set_cursor(&win, CURSOR_WATCH);
|
win_set_cursor(&win, CURSOR_WATCH);
|
||||||
|
|
||||||
img_close(&img, 0);
|
img_close(&img, 0);
|
||||||
|
|
||||||
while (!img_load(&img, &files[new])) {
|
while (!img_load(&img, &files[new])) {
|
||||||
remove_file(new, 0);
|
remove_file(new, 0);
|
||||||
if (new >= filecnt)
|
if (new >= filecnt)
|
||||||
@ -247,23 +246,34 @@ void update_title() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void redraw() {
|
void redraw() {
|
||||||
if (mode == MODE_IMAGE) {
|
if (mode == MODE_IMAGE)
|
||||||
img_render(&img, &win);
|
img_render(&img, &win);
|
||||||
if (img.multi.animate) {
|
else
|
||||||
win_set_cursor(&win, CURSOR_NONE);
|
|
||||||
} else {
|
|
||||||
win_set_cursor(&win, CURSOR_ARROW);
|
|
||||||
set_timeout(hide_cursor, TO_CURSOR_HIDE, 1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tns_render(&tns, &win);
|
tns_render(&tns, &win);
|
||||||
}
|
|
||||||
update_title();
|
update_title();
|
||||||
reset_timeout(redraw);
|
reset_timeout(redraw);
|
||||||
|
reset_cursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void hide_cursor() {
|
void reset_cursor() {
|
||||||
win_set_cursor(&win, CURSOR_NONE);
|
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() {
|
void animate() {
|
||||||
@ -312,7 +322,7 @@ void on_buttonpress(XButtonEvent *bev) {
|
|||||||
|
|
||||||
if (mode == MODE_IMAGE) {
|
if (mode == MODE_IMAGE) {
|
||||||
win_set_cursor(&win, CURSOR_ARROW);
|
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++) {
|
for (i = 0; i < LEN(buttons); i++) {
|
||||||
if (buttons[i].button == bev->button &&
|
if (buttons[i].button == bev->button &&
|
||||||
@ -329,15 +339,15 @@ void on_buttonpress(XButtonEvent *bev) {
|
|||||||
case Button1:
|
case Button1:
|
||||||
if ((sel = tns_translate(&tns, bev->x, bev->y)) >= 0) {
|
if ((sel = tns_translate(&tns, bev->x, bev->y)) >= 0) {
|
||||||
if (sel == tns.sel) {
|
if (sel == tns.sel) {
|
||||||
load_image(tns.sel);
|
|
||||||
mode = MODE_IMAGE;
|
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 {
|
} else {
|
||||||
tns_highlight(&tns, &win, tns.sel, False);
|
tns_highlight(&tns, &win, tns.sel, False);
|
||||||
tns_highlight(&tns, &win, sel, True);
|
tns_highlight(&tns, &win, sel, True);
|
||||||
tns.sel = sel;
|
tns.sel = sel;
|
||||||
}
|
}
|
||||||
redraw();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -363,18 +373,15 @@ void run() {
|
|||||||
!XPending(win.env.dpy))
|
!XPending(win.env.dpy))
|
||||||
{
|
{
|
||||||
/* load thumbnails */
|
/* load thumbnails */
|
||||||
win_set_cursor(&win, CURSOR_WATCH);
|
|
||||||
set_timeout(redraw, TO_REDRAW_THUMBS, 0);
|
set_timeout(redraw, TO_REDRAW_THUMBS, 0);
|
||||||
if (tns_load(&tns, tns.cnt, &files[tns.cnt], False, False))
|
if (tns_load(&tns, tns.cnt, &files[tns.cnt], False, False))
|
||||||
tns.cnt++;
|
tns.cnt++;
|
||||||
else
|
else
|
||||||
remove_file(tns.cnt, 0);
|
remove_file(tns.cnt, 0);
|
||||||
if (tns.cnt == filecnt) {
|
if (tns.cnt == filecnt)
|
||||||
redraw();
|
redraw();
|
||||||
win_set_cursor(&win, CURSOR_ARROW);
|
else
|
||||||
} else {
|
|
||||||
check_timeouts(NULL);
|
check_timeouts(NULL);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!XPending(win.env.dpy) && check_timeouts(&timeout)) {
|
while (!XPending(win.env.dpy) && check_timeouts(&timeout)) {
|
||||||
@ -410,7 +417,7 @@ void run() {
|
|||||||
case MotionNotify:
|
case MotionNotify:
|
||||||
if (mode == MODE_IMAGE) {
|
if (mode == MODE_IMAGE) {
|
||||||
win_set_cursor(&win, CURSOR_ARROW);
|
win_set_cursor(&win, CURSOR_ARROW);
|
||||||
set_timeout(hide_cursor, TO_CURSOR_HIDE, 1);
|
set_timeout(reset_cursor, TO_CURSOR_HIDE, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user