commit 6818e07291f3b2913e687c8ec3d3fe4711724050
Author:     NRK <n...@disroot.org>
AuthorDate: Fri Mar 25 22:51:45 2022 +0100
Commit:     Hiltjo Posthuma <hil...@codemadness.org>
CommitDate: Fri Mar 25 22:53:50 2022 +0100

    avoid redraw when there's no change
    
    while i was timing the performance issue, i noticed that there was lots
    of random redrawing going on.
    
    turns out there were coming from here; if someone presses CTRL/ALT etc
    without pressing anything else, nothing will be inserted, so nothing
    will change. but the code will `break`, go down and do a needless redraw.
    
    this patch changes it to simply return if the keypress iscntrl()
    
    also avoid potential UB by casting *buf into an unsigned char.

diff --git a/dmenu.c b/dmenu.c
index 085dc29..19f6385 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -415,8 +415,9 @@ keypress(XKeyEvent *ev)
        switch(ksym) {
        default:
 insert:
-               if (!iscntrl(*buf))
-                       insert(buf, len);
+               if (iscntrl((unsigned char)*buf))
+                       return;
+               insert(buf, len);
                break;
        case XK_Delete:
        case XK_KP_Delete:

Reply via email to