Fix empty selection highlighting bug. - st - Simple Terminal
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit c990abfedf56cb8d3176fe6d5152ff65bb68bff0
 (DIR) parent 3cb7f27afe89c33c74b51c5460b7fb16413f786b
 (HTM) Author: noname <noname@inventati.org>
       Date:   Sun,  3 May 2015 19:28:10 +0000
       
       Fix empty selection highlighting bug.
       
       When user clicks LMB, one character is selected, but will not be copied
       to selection until the user moves cursor a bit. Therefore, the character
       should not be highlighted as selected yet.
       
       Before the patch, the trick was not to mark line as dirty to avoid
       highlighting it. However, if user has already selected something and
       clicks in line that contains selection, selclear sets the line as dirty
       and one character is highlighted when it should not.
       
       This patch replaces dirty trick with explicit check for sel.mode inside
       selected().
       
       Diffstat:
         st.c                                |      12 +++++-------
       
       1 file changed, 5 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -716,6 +716,9 @@ selnormalize(void) {
        
        bool
        selected(int x, int y) {
       +        if(sel.mode == SEL_EMPTY)
       +                return false;
       +
                if(sel.type == SEL_RECTANGULAR)
                        return BETWEEN(y, sel.nb.y, sel.ne.y)
                            && BETWEEN(x, sel.nb.x, sel.ne.x);
       @@ -921,14 +924,9 @@ bpress(XEvent *e) {
                        }
                        selnormalize();
        
       -                /*
       -                 * Draw selection, unless it's regular and we don't want to
       -                 * make clicks visible
       -                 */
       -                if(sel.snap != 0) {
       +                if(sel.snap != 0)
                                sel.mode = SEL_READY;
       -                        tsetdirt(sel.nb.y, sel.ne.y);
       -                }
       +                tsetdirt(sel.nb.y, sel.ne.y);
                        sel.tclick2 = sel.tclick1;
                        sel.tclick1 = now;
                }