diff options
author | Ivan Delalande <colona@ycc.fr> | 2015-02-15 00:34:03 +0100 |
---|---|---|
committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2015-02-22 11:53:34 +0000 |
commit | 1b514048b254827f1a83c05e1b2a2428bf31924e (patch) | |
tree | 1932d55979fa417d675a8d3e39c990ede67fbf11 /st.c | |
parent | 3604445ffc6ff1bfdfc7614771ca659e423b404b (diff) | |
download | st-1b514048b254827f1a83c05e1b2a2428bf31924e.tar.gz st-1b514048b254827f1a83c05e1b2a2428bf31924e.zip |
Let curses do the dirty work for flash
Use the terminfo delay syntax ($<x>) in our flash capability to avoid
hardcoding a fixed delay in redraw() when called from tsetmode() with
DECSCNM.
We need to turn on the npc capability so that delays are made with
xon/xoff instead of padding characters.
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 21 |
1 files changed, 6 insertions, 15 deletions
@@ -63,8 +63,6 @@ char *argv0; | |||
63 | #define XK_NO_MOD 0 | 63 | #define XK_NO_MOD 0 |
64 | #define XK_SWITCH_MOD (1<<13) | 64 | #define XK_SWITCH_MOD (1<<13) |
65 | 65 | ||
66 | #define REDRAW_TIMEOUT (80*1000) /* 80 ms */ | ||
67 | |||
68 | /* macros */ | 66 | /* macros */ |
69 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) | 67 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) |
70 | #define MAX(a, b) ((a) < (b) ? (b) : (a)) | 68 | #define MAX(a, b) ((a) < (b) ? (b) : (a)) |
@@ -349,7 +347,7 @@ typedef struct { | |||
349 | 347 | ||
350 | static void die(const char *, ...); | 348 | static void die(const char *, ...); |
351 | static void draw(void); | 349 | static void draw(void); |
352 | static void redraw(int); | 350 | static void redraw(void); |
353 | static void drawregion(int, int, int, int); | 351 | static void drawregion(int, int, int, int); |
354 | static void execsh(void); | 352 | static void execsh(void); |
355 | static void sigchld(int); | 353 | static void sigchld(int); |
@@ -1826,7 +1824,7 @@ tsetmode(bool priv, bool set, int *args, int narg) { | |||
1826 | mode = term.mode; | 1824 | mode = term.mode; |
1827 | MODBIT(term.mode, set, MODE_REVERSE); | 1825 | MODBIT(term.mode, set, MODE_REVERSE); |
1828 | if(mode != term.mode) | 1826 | if(mode != term.mode) |
1829 | redraw(REDRAW_TIMEOUT); | 1827 | redraw(); |
1830 | break; | 1828 | break; |
1831 | case 6: /* DECOM -- Origin */ | 1829 | case 6: /* DECOM -- Origin */ |
1832 | MODBIT(term.c.state, set, CURSOR_ORIGIN); | 1830 | MODBIT(term.c.state, set, CURSOR_ORIGIN); |
@@ -2200,7 +2198,7 @@ strhandle(void) { | |||
2200 | * TODO if defaultbg color is changed, borders | 2198 | * TODO if defaultbg color is changed, borders |
2201 | * are dirty | 2199 | * are dirty |
2202 | */ | 2200 | */ |
2203 | redraw(0); | 2201 | redraw(); |
2204 | } | 2202 | } |
2205 | return; | 2203 | return; |
2206 | } | 2204 | } |
@@ -3093,7 +3091,7 @@ xzoomabs(const Arg *arg) { | |||
3093 | xunloadfonts(); | 3091 | xunloadfonts(); |
3094 | xloadfonts(usedfont, arg->i); | 3092 | xloadfonts(usedfont, arg->i); |
3095 | cresize(0, 0); | 3093 | cresize(0, 0); |
3096 | redraw(0); | 3094 | redraw(); |
3097 | xhints(); | 3095 | xhints(); |
3098 | } | 3096 | } |
3099 | 3097 | ||
@@ -3558,16 +3556,9 @@ xresettitle(void) { | |||
3558 | } | 3556 | } |
3559 | 3557 | ||
3560 | void | 3558 | void |
3561 | redraw(int timeout) { | 3559 | redraw(void) { |
3562 | struct timespec tv = {0, timeout * 1000}; | ||
3563 | |||
3564 | tfulldirt(); | 3560 | tfulldirt(); |
3565 | draw(); | 3561 | draw(); |
3566 | |||
3567 | if(timeout > 0) { | ||
3568 | nanosleep(&tv, NULL); | ||
3569 | XSync(xw.dpy, False); /* necessary for a good tput flash */ | ||
3570 | } | ||
3571 | } | 3562 | } |
3572 | 3563 | ||
3573 | void | 3564 | void |
@@ -3634,7 +3625,7 @@ expose(XEvent *ev) { | |||
3634 | if(!e->count) | 3625 | if(!e->count) |
3635 | xw.state &= ~WIN_REDRAW; | 3626 | xw.state &= ~WIN_REDRAW; |
3636 | } | 3627 | } |
3637 | redraw(0); | 3628 | redraw(); |
3638 | } | 3629 | } |
3639 | 3630 | ||
3640 | void | 3631 | void |