From 825c991807a068b42fd8e59c6bbf8d4567b842d5 Mon Sep 17 00:00:00 2001 From: Ketmar Dark Date: Sat, 26 Aug 2023 00:06:37 +0300 Subject: [PATCH] more shitty code for timeouts; doesn't really do what i want yet --- src/globals.c | 1 - src/libk8sterm/tdraw.c | 6 ++++-- src/sterm.c | 36 +++++++++++++++++++++++++----------- src/x11CB.c | 7 ------- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/globals.c b/src/globals.c index 0106ee8..e7a7003 100644 --- a/src/globals.c +++ b/src/globals.c @@ -57,7 +57,6 @@ static int term_array_size = 0; static K8Term *curterm; // current terminal static int termidx; // current terminal index; DON'T RELAY ON IT! static int updateTabBar; -static K8TTimeMSec lastDrawTime = 0; static char *lastSelStr = NULL; //static int lastSelLength = 0; diff --git a/src/libk8sterm/tdraw.c b/src/libk8sterm/tdraw.c index 0d56cc2..f4a1303 100644 --- a/src/libk8sterm/tdraw.c +++ b/src/libk8sterm/tdraw.c @@ -248,7 +248,8 @@ K8TERM_API void k8t_drawRegion (K8Term *term, int x1, int y1, int x2, int y2, in // if (!forced && !term->isVisible(term)) { //dlogf("invisible"); - term->setLastDrawTime(term, (term->lastDrawTime = 1)); + term->lastDrawTime = 1; + if (term->setLastDrawTime) term->setLastDrawTime(term, term->lastDrawTime); term->wantRedraw = 1; return; } @@ -273,7 +274,8 @@ K8TERM_API void k8t_drawRegion (K8Term *term, int x1, int y1, int x2, int y2, in } if (fulldirty) k8t_drawCopy(term, 0, 0, term->col, term->row); k8t_drawCursor(term, 0); - term->setLastDrawTime(term, (term->lastDrawTime = term->clockTicks(term))); + term->lastDrawTime = term->clockTicks(term); + if (term->setLastDrawTime) term->setLastDrawTime(term, term->lastDrawTime); term->wantRedraw = 0; } } diff --git a/src/sterm.c b/src/sterm.c index d789c62..da69556 100644 --- a/src/sterm.c +++ b/src/sterm.c @@ -323,6 +323,7 @@ static void xevtcbcmessage (XEvent *e) { //////////////////////////////////////////////////////////////////////////////// static K8TTimeMSec swapCooldown = 0; +static int fastUpdate = 0; static void afterNewLineCB (K8Term *term) { @@ -344,16 +345,24 @@ static void afterScreenSwapCB (K8Term *term) { static inline int last_draw_too_old (void) { K8TTimeMSec tt; if (curterm != NULL) { - if (curterm->dead || !curterm->wantRedraw) return 0; + if (curterm->dead || !curterm->wantRedraw) { + fastUpdate = 0; + return 0; + } + if (fastUpdate) { + fastUpdate = 0; + return 1; + } tt = mclock_ticks(); if (tt <= swapCooldown) return 1; return - (tt-curterm->lastDrawTime >= opt_drawtimeout || - tt-lastDrawTime >= opt_maxdrawtimeout); + (tt-curterm->lastDrawTime >= opt_drawtimeout /*|| + tt-lastDrawTime >= opt_maxdrawtimeout*/); //tt-lastDrawTime >= (curterm->justSwapped ? opt_swapdrawtimeout : opt_maxdrawtimeout)); } else { - tt = mclock_ticks(); - return (tt-lastDrawTime >= opt_maxdrawtimeout); + //tt = mclock_ticks(); + //return (tt-lastDrawTime >= opt_maxdrawtimeout); + return 0; } } @@ -385,12 +394,13 @@ static void (*handler[LASTEvent])(XEvent *) = { static int termsDoIO (int xfd) { int res = 0, done; - int xloop = 0; int mx = opt_drawtimeout; if (curterm->lastBlinkTime > 0 && mx > curterm->lastBlinkTime) mx = curterm->lastBlinkTime; if (mx < 16) mx = 16; else if (mx > 900) mx = 900; + K8TTimeMSec stt = mclock_ticks(); + do { fd_set rfd, wfd; struct timeval timeout; @@ -444,10 +454,13 @@ static int termsDoIO (int xfd) { if (K8T_DATA(t)->pid != 0 && FD_ISSET(t->cmdfd, &wfd)) k8t_ttyFlushWriteBuf(t); if (FD_ISSET(t->cmdfd, &rfd)) { rd = k8t_ttyRead(t); - if (t == curterm && res == 0 && xloop == 0) { - done = 0; - xloop += 1; - mx = 50; + if (t == curterm && res == 0 /*&& xloop == 0*/) { + if (k8t_ttyCanRead(curterm)) { + mx = 100; + K8TTimeMSec ctt = mclock_ticks(); + if (ctt - stt < 400) done = 0; + fastUpdate = 1; + } } } @@ -460,6 +473,7 @@ static int termsDoIO (int xfd) { free(K8T_DATA(t)->exitmsg); K8T_DATA(t)->exitmsg = NULL; k8t_tmWantRedraw(t, 1); + if (t == curterm) { done = 1; fastUpdate = 1; } } } } @@ -591,7 +605,7 @@ static void termSetCallbacks (K8Term *term) { term->udata = td; // term->clockTicks = clockTicksCB; - term->setLastDrawTime = setLastDrawTimeCB; + term->setLastDrawTime = NULL; // term->isConversionNecessary = isConversionNecessaryCB; term->loc2utf = loc2utfCB; diff --git a/src/x11CB.c b/src/x11CB.c index 6ea024f..6cfcade 100644 --- a/src/x11CB.c +++ b/src/x11CB.c @@ -3,13 +3,6 @@ static K8TTimeMSec clockTicksCB (K8Term *term) { } -static void setLastDrawTimeCB (K8Term *term, K8TTimeMSec time) { - if (term == curterm) { - lastDrawTime = time; - } -} - - static int isFocusedCB (K8Term *term) { return (xw.state&K8T_WIN_FOCUSED ? 1 : 0); } -- 2.11.4.GIT