patch: appsync
This commit is contained in:
22
x.c
22
x.c
@@ -1936,6 +1936,9 @@ resize(XEvent *e)
|
||||
cresize(e->xconfigure.width, e->xconfigure.height);
|
||||
}
|
||||
|
||||
int tinsync(uint);
|
||||
int ttyread_pending();
|
||||
|
||||
void
|
||||
run(void)
|
||||
{
|
||||
@@ -1970,7 +1973,7 @@ run(void)
|
||||
FD_SET(ttyfd, &rfd);
|
||||
FD_SET(xfd, &rfd);
|
||||
|
||||
if (XPending(xw.dpy))
|
||||
if (XPending(xw.dpy) || ttyread_pending())
|
||||
timeout = 0; /* existing events might not set xfd */
|
||||
|
||||
seltv.tv_sec = timeout / 1E3;
|
||||
@@ -1984,7 +1987,8 @@ run(void)
|
||||
}
|
||||
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||
|
||||
if (FD_ISSET(ttyfd, &rfd))
|
||||
int ttyin = FD_ISSET(ttyfd, &rfd) || ttyread_pending();
|
||||
if (ttyin)
|
||||
ttyread();
|
||||
|
||||
xev = 0;
|
||||
@@ -2008,7 +2012,7 @@ run(void)
|
||||
* maximum latency intervals during `cat huge.txt`, and perfect
|
||||
* sync with periodic updates from animations/key-repeats/etc.
|
||||
*/
|
||||
if (FD_ISSET(ttyfd, &rfd) || xev) {
|
||||
if (ttyin || xev) {
|
||||
if (!drawing) {
|
||||
trigger = now;
|
||||
drawing = 1;
|
||||
@@ -2019,6 +2023,18 @@ run(void)
|
||||
continue; /* we have time, try to find idle */
|
||||
}
|
||||
|
||||
if (tinsync(su_timeout)) {
|
||||
/*
|
||||
* on synchronized-update draw-suspension: don't reset
|
||||
* drawing so that we draw ASAP once we can (just after
|
||||
* ESU). it won't be too soon because we already can
|
||||
* draw now but we skip. we set timeout > 0 to draw on
|
||||
* SU-timeout even without new content.
|
||||
*/
|
||||
timeout = minlatency;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* idle detected or maxlatency exhausted -> draw */
|
||||
timeout = -1;
|
||||
if (blinktimeout && tattrset(ATTR_BLINK)) {
|
||||
|
||||
Reference in New Issue
Block a user