shithub: tbs

Download patch

ref: 86318ae338e606247cfa057d141e6a974f4898a9
parent: 38d8044975f8467c5ac4662259a89d6ea59d45bc
author: qwx <qwx@sciops.net>
date: Thu Apr 15 13:02:28 EDT 2021

properly initialize mouse state

--- a/tbs.c
+++ b/tbs.c
@@ -95,7 +95,7 @@
 threadmain(int argc, char **argv)
 {
 	Rune r;
-	Mouse m, om;
+	Mouse om;
 
 	ARGBEGIN{
 	case 'd': dbname = EARGF(usage()); break;
@@ -114,10 +114,11 @@
 		sysfatal("initkeyboard: %r");
 	if((mctl = initmouse(nil, screen)) == nil)
 		sysfatal("initmouse: %r");
+	om.xy = ZP;
 	initimages();
 	resetdraw();
 	Alt a[] = {
-		{mctl->c, &m, CHANRCV},
+		{mctl->c, &mctl->Mouse, CHANRCV},
 		{mctl->resizec, nil, CHANRCV},
 		{kctl->c, &r, CHANRCV},
 		{nil, nil, CHANEND}
@@ -127,17 +128,20 @@
 		default:
 			sysfatal("alt: %r");
 		case 0:
-			if((m.buttons & 1) == 1 && (om.buttons & 1) == 0)
-				select(m.xy);
-			if(m.buttons & 2)
+			if(eqpt(om.xy, ZP))
+				om = mctl->Mouse;
+			if((mctl->buttons & 1) == 1 && (om.buttons & 1) == 0)
+				select(mctl->xy);
+			if(mctl->buttons & 2)
 				mmenu();
-			if(m.buttons & 4)
-				dopan(m.xy.x - om.xy.x, m.xy.y - om.xy.y);
-			om = m;
+			if(mctl->buttons & 4)
+				dopan(mctl->xy.x - om.xy.x, mctl->xy.y - om.xy.y);
+			om = mctl->Mouse;
 			break;
 		case 1:
 			if(getwindow(display, Refnone) < 0)
 				sysfatal("getwindow: %r");
+			om = mctl->Mouse;
 			resetdraw();
 			break;
 		case 2: