shithub: vdir

Download patch

ref: 692a7dd95ec710318bc5400e97b3ebbf85e89a3e
parent: cf29ee19bf527ca8bf82da1985ef96566a3343c6
author: phil9 <[email protected]>
date: Sun Aug 15 00:50:40 EDT 2021

fix scrolling going out of bounds

	scrolling offset was going out of bounds when the number of
	visible lines was greater than the number of files to display.
	This lead to a bunch of unnamed files to appear.
	We now check whether scrolling is possible and also do not redraw
	when clicking the scrollbar but no scrolling will happen (ie offset
	does not change).

--- a/vdir.c
+++ b/vdir.c
@@ -315,9 +315,11 @@
 int
 scrollclamp(int offset)
 {
-	if(offset < 0)
+	if(nlines >= ndirs)
 		offset = 0;
-	if(offset+nlines > ndirs)
+	else if(offset < 0)
+		offset = 0;
+	else if(offset+nlines > ndirs)
 		offset = ndirs-nlines;
 	return offset;
 }
@@ -325,7 +327,12 @@
 void
 scrollup(int off)
 {
-	offset = scrollclamp(offset - off);
+	int newoff;
+
+	newoff = scrollclamp(offset - off);
+	if(newoff == offset)
+		return;
+	offset = newoff;
 	redraw();
 }
 
@@ -332,7 +339,12 @@
 void
 scrolldown(int off)
 {
-	offset = scrollclamp(offset + off);
+	int newoff;
+
+	newoff = scrollclamp(offset + off);
+	if(newoff == offset)
+		return;
+	offset = newoff;
 	redraw();
 }