commit 97e443234436c4d0cfdb4b07d84d11c320c56dd3 from: rsc date: Thu May 10 19:34:04 2007 UTC better tick handling commit - 024c9812e4752ea38f8fab05b8b4f05108bb9d4f commit + 97e443234436c4d0cfdb4b07d84d11c320c56dd3 blob - 9cfdb525d84e21ffcc43c6fb7863a810259c1876 blob + ddb3527a2eaf801a23380d073623ac9ecb77d37f --- src/cmd/acme/text.c +++ src/cmd/acme/text.c @@ -1122,7 +1122,7 @@ selrestore(Frame *f, Point pt0, uint p0, uint p1) void textsetselect(Text *t, uint q0, uint q1) { - int p0, p1; + int p0, p1, ticked; /* t->fr.p0 and t->fr.p1 are always right; t->q0 and t->q1 may be off */ t->q0 = q0; @@ -1130,21 +1130,30 @@ textsetselect(Text *t, uint q0, uint q1) /* compute desired p0,p1 from q0,q1 */ p0 = q0-t->org; p1 = q1-t->org; - if(p0 < 0) + ticked = 1; + if(p0 < 0){ + ticked = 0; p0 = 0; + } if(p1 < 0) p1 = 0; if(p0 > t->fr.nchars) p0 = t->fr.nchars; - if(p1 > t->fr.nchars) - p1 = t->fr.nchars; - if(p0==t->fr.p0 && p1==t->fr.p1) + if(p1 > t->fr.nchars){ + ticked = 0; + p1 = t->fr.nchars; + } + if(p0==t->fr.p0 && p1==t->fr.p1){ + if(p0 == p1 && ticked != t->fr.ticked) + frtick(&t->fr, frptofchar(&t->fr, p0), ticked); return; + } /* screen disagrees with desired selection */ if(t->fr.p1<=p0 || p1<=t->fr.p0 || p0==p1 || t->fr.p1==t->fr.p0){ /* no overlap or too easy to bother trying */ frdrawsel(&t->fr, frptofchar(&t->fr, t->fr.p0), t->fr.p0, t->fr.p1, 0); - frdrawsel(&t->fr, frptofchar(&t->fr, p0), p0, p1, 1); + if(p0 != p1 || ticked) + frdrawsel(&t->fr, frptofchar(&t->fr, p0), p0, p1, 1); goto Return; } /* overlap; avoid unnecessary painting */