[hackers] [st] Fix empty selection highlighting bug. || noname

From: <git_AT_suckless.org>
Date: Mon, 4 May 2015 14:23:30 +0200 (CEST)

commit c990abfedf56cb8d3176fe6d5152ff65bb68bff0
Author: noname <noname_AT_inventati.org>
Date: Sun May 3 19:28:10 2015 +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().

diff --git a/st.c b/st.c
index cf6556a..3eb66fa 100644
--- a/st.c
+++ b/st.c
_AT_@ -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);
_AT_@ -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;
         }
Received on Mon May 04 2015 - 14:23:30 CEST

This archive was generated by hypermail 2.3.0 : Mon May 04 2015 - 14:24:21 CEST