shithub: zuke

Download patch

ref: e62f9b68f8c6669be92c868688f72538f96350e9
parent: 8167a433d7023a864c8539df91a146f72c45004a
author: Sigrid Haflínudóttir <ftrvxmtrx@gmail.com>
date: Wed Jun 3 14:50:00 EDT 2020

make left/right mouse buttons work on scrollbar

--- a/zuke.c
+++ b/zuke.c
@@ -4,6 +4,9 @@
 #include <ctype.h>
 #include "plist.h"
 
+#define MAX(a,b) ((a)>=(b)?(a):(b))
+#define MIN(a,b) ((a)<=(b)?(a):(b))
+
 typedef struct Player Player;
 
 enum
@@ -905,6 +908,27 @@
 
 		switch(alt(a)){
 		case 0:
+			if(m.buttons != 2)
+				scrolling = 0;
+			if(m.buttons == 0)
+				break;
+
+			n = (m.xy.y - screen->r.min.y)/f->height;
+
+			if(oldbuttons == 0 && m.xy.x <= screen->r.min.x+Scrollwidth){
+				if(m.buttons == 1){
+					scroll = MAX(0, scroll-n-1);
+					redraw(1);
+					break;
+				}else if(m.buttons == 4){
+					scroll = MIN(scroll+n+1, plnum-scrollsz-1);
+					redraw(1);
+					break;
+				}else if(m.buttons == 2){
+					scrolling = 1;
+				}
+			}
+
 			if(m.buttons == 4){
 				n = menuhit(3, mctl, &menu3, nil);
 				if(n == 0)
@@ -913,25 +937,15 @@
 					goto end;
 				goto ev;
 			}
-			if(m.buttons != 2)
-				scrolling = 0;
-			else if(oldbuttons == 0 && m.xy.x <= screen->r.min.x+Scrollwidth)
-				scrolling = 1;
-			oldbuttons = m.buttons;
-			if(m.buttons == 0)
-				break;
 
 			if(scrolling){
 				if(scrollsz >= plnum)
 					break;
 				scroll = (m.xy.y - screen->r.min.y - Scrollheight/4)*(plnum-scrollsz) / (Dy(screen->r)-Scrollheight/2);
-				if(scroll > plnum-scrollsz-1)
-					scroll = plnum-scrollsz-1;
-				if(scroll < 0)
-					scroll = 0;
+				scroll = MAX(0, MIN(scroll, plnum-scrollsz-1));
 				redraw(1);
 			}else if(m.buttons == 1 || m.buttons == 2){
-				pcur = scroll + (m.xy.y - screen->r.min.y)/f->height;
+				pcur = scroll + n;
 				if(m.buttons == 2){
 					stop(playercurr);
 					playercurr = newplayer(pcur, 1);