st.c | 29 ++++++----------------------- diff --git a/st.c b/st.c index d7ca87516155edc8977cf5fafadc2fc9ed3de13a..397f6a6294ca9c7c9f2062e4eb8638932dbbb197 100644 --- a/st.c +++ b/st.c @@ -288,7 +288,6 @@ static void xdraws(char *, Glyph, int, int, int, int); static void xhints(void); static void xclear(int, int, int, int); -static void xcopy(void); static void xdrawcursor(void); static void xinit(void); static void xloadcols(void); @@ -635,7 +634,6 @@ if(sel.bx == -1) return; sel.bx = -1; tsetdirt(sel.b.y, sel.e.y); - draw(); } void @@ -685,8 +683,6 @@ XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, CurrentTime); clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0); XSetSelectionOwner(xw.dpy, clipboard, xw.win, CurrentTime); - - XFlush(xw.dpy); } void @@ -729,7 +725,6 @@ selcopy(); } memcpy(&sel.tclick2, &sel.tclick1, sizeof(struct timeval)); gettimeofday(&sel.tclick1, NULL); - draw(); } void @@ -746,7 +741,6 @@ if(oldey != sel.ey || oldex != sel.ex) { int starty = MIN(oldey, sel.ey); int endy = MAX(oldey, sel.ey); tsetdirt(starty, endy); - draw(); } } } @@ -2091,13 +2085,6 @@ if(base.mode & ATTR_UNDERLINE) XDrawLine(xw.dpy, xw.buf, dc.gc, winx, winy+1, winx+width-1, winy+1); } -/* copy buffer pixmap to screen pixmap */ -void -xcopy() { - XdbeSwapInfo swpinfo[1] = {{xw.win, XdbeCopied}}; - XdbeSwapBuffers(xw.dpy, swpinfo, 1); -} - void xdrawcursor(void) { static int oldx = 0; @@ -2117,8 +2104,6 @@ sl = utf8size(term.line[oldy][oldx].c); xdraws(term.line[oldy][oldx].c, term.line[oldy][oldx], oldx, oldy, 1, sl); } else xclear(oldx, oldy, oldx, oldy); - - xcopy(); /* draw the new one */ if(!(term.c.state & CURSOR_HIDE)) { @@ -2132,8 +2117,6 @@ sl = utf8size(g.c); xdraws(g.c, g, term.c.x, term.c.y, 1, sl); oldx = term.c.x, oldy = term.c.y; } - - xcopy(); } void @@ -2152,8 +2135,10 @@ } void draw() { + XdbeSwapInfo swpinfo[1] = {{xw.win, XdbeCopied}}; + drawregion(0, 0, term.col, term.row); - xcopy(); + XdbeSwapBuffers(xw.dpy, swpinfo, 1); } void @@ -2208,7 +2193,6 @@ if(xw.state & WIN_REDRAW) { if(!e->count) xw.state &= ~WIN_REDRAW; } - xcopy(); } void @@ -2241,7 +2225,6 @@ xw.state |= WIN_FOCUSED; xseturgency(0); } else xw.state &= ~WIN_FOCUSED; - draw(); } char* @@ -2317,7 +2300,6 @@ xseturgency(0); } else if(e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { xw.state &= ~WIN_FOCUSED; } - draw(); } } @@ -2358,8 +2340,6 @@ } if(FD_ISSET(cmdfd, &rfd)) ttyread(); - draw(); - while(XPending(xw.dpy)) { XNextEvent(xw.dpy, &ev); if(XFilterEvent(&ev, xw.win)) @@ -2367,6 +2347,9 @@ continue; if(handler[ev.type]) (handler[ev.type])(&ev); } + + draw(); + XFlush(xw.dpy); } }