Commit Diff


commit - 813751d7549110861174912c9c12ea01dae0d084
commit + 7a3533513e6f401bf62d94d4577922771090ffb4
blob - 729b72cf55395340ee9458725dd8c7ef21979634
blob + 6497eea66d7ab9f55e6f1b391717deadf8021c78
--- src/cmd/samterm/flayer.c
+++ src/cmd/samterm/flayer.c
@@ -274,6 +274,7 @@ void
 flsetselect(Flayer *l, long p0, long p1)
 {
 	ulong fp0, fp1;
+	int ticked;
 
 	l->click = 0;
 	if(l->visible==None || !flprepare(l)){
@@ -281,9 +282,12 @@ flsetselect(Flayer *l, long p0, long p1)
 		return;
 	}
 	l->p0 = p0, l->p1 = p1;
-	flfp0p1(l, &fp0, &fp1);
-	if(fp0==l->f.p0 && fp1==l->f.p1)
+	flfp0p1(l, &fp0, &fp1, &ticked);
+	if(fp0==l->f.p0 && fp1==l->f.p1){
+		if(l->f.ticked != ticked)
+			frdrawseltick(&l->f, frptofchar(&l->f, fp0), fp0, fp1, 1, ticked);
 		return;
+	}
 
 	if(fp1<=l->f.p0 || fp0>=l->f.p1 || l->f.p0==l->f.p1 || fp0==fp1){
 		/* no overlap or trivial repainting */
@@ -315,18 +319,23 @@ flsetselect(Flayer *l, long p0, long p1)
 }
 
 void
-flfp0p1(Flayer *l, ulong *pp0, ulong *pp1)
+flfp0p1(Flayer *l, ulong *pp0, ulong *pp1, int *ticked)
 {
 	long p0 = l->p0-l->origin, p1 = l->p1-l->origin;
 
-	if(p0 < 0)
+	*ticked = 1;
+	if(p0 < 0){
+		*ticked = 0;
 		p0 = 0;
+	}
 	if(p1 < 0)
 		p1 = 0;
 	if(p0 > l->f.nchars)
 		p0 = l->f.nchars;
-	if(p1 > l->f.nchars)
+	if(p1 > l->f.nchars){
+		*ticked = 0;
 		p1 = l->f.nchars;
+	}
 	*pp0 = p0;
 	*pp1 = p1;
 }
@@ -401,6 +410,7 @@ flprepare(Flayer *l)
 	Frame *f;
 	ulong n;
 	Rune *r;
+	int ticked;
 
 	if(l->visible == None)
 		return 0;
@@ -418,8 +428,8 @@ flprepare(Flayer *l)
 		r = (*l->textfn)(l, n, &n);
 		frinsert(f, r, r+n, (ulong)0);
 		frdrawsel(f, frptofchar(f, f->p0), f->p0, f->p1, 0);
-		flfp0p1(l, &f->p0, &f->p1);
-		frdrawsel(f, frptofchar(f, f->p0), f->p0, f->p1, 1);
+		flfp0p1(l, &f->p0, &f->p1, &ticked);
+		frdrawseltick(f, frptofchar(f, f->p0), f->p0, f->p1, 1, ticked);
 		l->lastsr = ZR;
 		scrdraw(l, scrtotal(l));
 	}
blob - 62c98076a22670617d281cfa86bc3e429b964242
blob + 8db797520b2eef35554137c25a68124b34fdd546
--- src/cmd/samterm/flayer.h
+++ src/cmd/samterm/flayer.h
@@ -28,7 +28,7 @@ struct Flayer
 void	flborder(Flayer*, int);
 void	flclose(Flayer*);
 void	fldelete(Flayer*, long, long);
-void	flfp0p1(Flayer*, ulong*, ulong*);
+void	flfp0p1(Flayer*, ulong*, ulong*, int*);
 void	flinit(Flayer*, Rectangle, Font*, Image**);
 void	flinsert(Flayer*, Rune*, Rune*, long);
 void	flnew(Flayer*, Rune *(*fn)(Flayer*, long, ulong*), int, void*);