Re: Mouse scroll wheel in wily

Sam Holden <[email protected]> Fri, 09 Jul 2004 17:06:12 +1000
Newsgroups gmane.editors.wily
Message-ID <[email protected]>
ozan s yigit writes:
>> I modified wily/libXg to recognize scroll mouse events and scroll the
>> view accordingly. Would anybody here be interested in a patch? The patch
>> itself is very simple, since all it does is add handling of Button4 and
>> Button5 mouse events returned by X windows.
>
>please send me the patch when you get a chance.
>thanks.

Did anything come of this? It's a patch I'm certainly interested in,
I whipped up my own implementation just now, but wily internals scare
me (it has gary's fingerprints after all :) and I probably introduced
a huge bug of some sort or another...

It's only 20 lines of touched code or so, so here's a diff of my
implementation, feel free to point out the defects that certainly exist.


diff -c -r wily-0.13.41/libXg/gwin.c wily-0.13.41-mod/libXg/gwin.c
*** wily-0.13.41/libXg/gwin.c	Tue Oct  1 14:57:48 1996
--- wily-0.13.41-mod/libXg/gwin.c	Fri Jul  9 16:24:15 2004
***************
*** 355,360 ****
--- 355,362 ----
  		case 1:	s |= Button1Mask; break;
  		case 2:	s |= Button2Mask; break;
  		case 3:	s |= Button3Mask; break;
+ 		case 4:	s |= Button4Mask; break;
+ 		case 5:	s |= Button5Mask; break;
  		}
  		break;
  	case ButtonRelease:
***************
*** 367,372 ****
--- 369,376 ----
  		case 1:	s &= ~Button1Mask; break;
  		case 2:	s &= ~Button2Mask; break;
  		case 3:	s &= ~Button3Mask; break;
+ 		case 4:	s &= ~Button4Mask; break;
+ 		case 5:	s &= ~Button5Mask; break;
  		}
  		break;
  	case MotionNotify:
***************
*** 383,388 ****
--- 387,394 ----
  	if(s & Button1Mask) m.buttons |= 1;
  	if(s & Button2Mask) m.buttons |= 2;
  	if(s & Button3Mask) m.buttons |= 4;
+ 	if(s & Button4Mask) m.buttons |= 8;
+ 	if(s & Button5Mask) m.buttons |= 16;
  	f = ((GwinWidget)w)->gwin.gotmouse;
  	if(f)
  		(*f)(&m);

diff -c -r wily-0.13.41/wily/const.h wily-0.13.41-mod/wily/const.h
*** wily-0.13.41/wily/const.h	Sat May  3 21:59:35 1997
--- wily-0.13.41-mod/wily/const.h	Fri Jul  9 16:42:16 2004
***************
*** 27,33 ****
  	INSET = 4,
  
  	/* mouse buttons */
! 	LEFT =1, MIDDLE=2, RIGHT=4,	
  
  	/* keys */
  	Backspace =	0x7f,
--- 27,33 ----
  	INSET = 4,
  
  	/* mouse buttons */
! 	LEFT =1, MIDDLE=2, RIGHT=4, UP=8, DOWN=16,
  
  	/* keys */
  	Backspace =	0x7f,

diff -c -r wily-0.13.41/wily/mouse.c wily-0.13.41-mod/wily/mouse.c
*** wily-0.13.41/wily/mouse.c	Wed Apr 29 16:55:35 1998
--- wily-0.13.41-mod/wily/mouse.c	Fri Jul  9 16:54:47 2004
***************
*** 149,154 ****
--- 149,166 ----
  		} else {
  			b2(v,r,false);
  		}
+ 	} else if (oldbuttons & UP) {
+ 		if (m->buttons) /* cancelled an UP */
+ 			while (m->buttons)
+ 				*m = emouse();
+ 		else
+ 			view_linesdown(v,1,false);
+ 	} else if (oldbuttons & DOWN) {
+ 		if (m->buttons) /* cancelled a DOWN */
+ 			while (m->buttons)
+ 				*m = emouse();
+ 		else
+ 			view_linesdown(v,1,true);
  	} else {
  		assert((oldbuttons&RIGHT));
  		if(m->buttons)	/* cancelled a b3 */
-- 
Sam