Update XIM cursor position only if changed - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 72e3f6c7c05b4d5b56388508bb20a863aec279f5
 (DIR) parent 33a9a456644ceb235ea6ce61282f3bdce7a8b547
 (HTM) Author: Ivan Tham <pickfire@riseup.net>
       Date:   Sun, 19 Apr 2020 19:38:39 +0200
       
       Update XIM cursor position only if changed
       
       Updating XIM cursor position is expensive, so only update it when cursor
       position changed.
       
       Diffstat:
         M st.c                                |       9 ++++++---
       
       1 file changed, 6 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -2571,6 +2571,7 @@ void
        drawregion(int x1, int y1, int x2, int y2)
        {
                int y;
       +
                for (y = y1; y < y2; y++) {
                        if (!term.dirty[y])
                                continue;
       @@ -2583,7 +2584,7 @@ drawregion(int x1, int y1, int x2, int y2)
        void
        draw(void)
        {
       -        int cx = term.c.x;
       +        int cx = term.c.x, ocx = term.ocx, ocy = term.ocy;
        
                if (!xstartdraw())
                        return;
       @@ -2599,9 +2600,11 @@ draw(void)
                drawregion(0, 0, term.col, term.row);
                xdrawcursor(cx, term.c.y, term.line[term.c.y][cx],
                                term.ocx, term.ocy, term.line[term.ocy][term.ocx]);
       -        term.ocx = cx, term.ocy = term.c.y;
       +        term.ocx = cx;
       +        term.ocy = term.c.y;
                xfinishdraw();
       -        xximspot(term.ocx, term.ocy);
       +        if (ocx != term.ocx || ocy != term.ocy)
       +                xximspot(term.ocx, term.ocy);
        }
        
        void