Handle horizontal scrolling in X11

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@29532 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Eric Wasylishen 2010-02-10 07:36:36 +00:00
parent 77565aaad0
commit 39c9297595
4 changed files with 40 additions and 9 deletions

View file

@ -1,3 +1,9 @@
2010-02-10 Eric Wasylishen <ewasylishen@gmail.com>
* Source/x11/XGServerWindow.m:
* Source/x11/XGServerEvent.m:
* Headers/x11/XGGeneric.h: Handle horizontal scrolling events
2010-02-07 03:37-EST Gregory John Casamento <greg.casamento@gmail.com>
* Headers/win32/WIN32Server.h: Remove HOTKEY method.

View file

@ -117,6 +117,8 @@ struct XGGeneric {
unsigned char rMouse;
unsigned char upMouse;
unsigned char downMouse;
unsigned char scrollLeftMouse;
unsigned char scrollRightMouse;
int lMouseMask;
int mMouseMask;
int rMouseMask;

View file

@ -402,6 +402,7 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
}
generic.lastClick = xEvent.xbutton.time;
[self setLastTime: generic.lastClick];
deltaX = 0.0;
deltaY = 0.0;
if (xEvent.xbutton.button == generic.lMouse)
@ -435,6 +436,20 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
eventType = NSScrollWheel;
buttonNumber = generic.downMouse;
}
else if (xEvent.xbutton.button == generic.scrollLeftMouse
&& generic.scrollLeftMouse != 0)
{
deltaX = -1.;
eventType = NSScrollWheel;
buttonNumber = generic.scrollLeftMouse;
}
else if (xEvent.xbutton.button == generic.scrollRightMouse
&& generic.scrollRightMouse != 0)
{
deltaX = 1.;
eventType = NSScrollWheel;
buttonNumber = generic.scrollRightMouse;
}
else
{
break; /* Unknown button */
@ -484,7 +499,7 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
clickCount: clickCount
pressure: 1.0
buttonNumber: buttonNumber /* FIXME */
deltaX: 0.
deltaX: deltaX
deltaY: deltaY
deltaZ: 0.];
break;

View file

@ -1295,13 +1295,15 @@ _get_next_prop_new_event(Display *display, XEvent *event, char *arg)
- (void) _setupMouse
{
int numButtons;
unsigned char mouseNumbers[5];
unsigned char buttons[5] = {
unsigned char mouseNumbers[7];
unsigned char buttons[7] = {
Button1,
Button2,
Button3,
Button4,
Button5
Button5,
6,
7
};
int masks[5] = {
Button1Mask,
@ -1314,15 +1316,21 @@ _get_next_prop_new_event(Display *display, XEvent *event, char *arg)
* Get pointer information - so we know which mouse buttons we have.
* With a two button
*/
numButtons = XGetPointerMapping(dpy, mouseNumbers, 5);
if (numButtons > 5)
numButtons = XGetPointerMapping(dpy, mouseNumbers, 7);
if (numButtons > 7)
{
NSDebugLLog(@"XGTrace", @"Warning - mouse/pointer seems to have more than 5 buttons "
@"(%d) - just using one to five", numButtons);
numButtons = 5;
NSDebugLLog(@"XGTrace", @"Warning - mouse/pointer seems to have more than 7 buttons "
@"(%d) - just using one to seven", numButtons);
numButtons = 7;
}
generic.lMouse = buttons[0];
generic.lMouseMask = masks[0];
if (numButtons >= 7)
{
generic.scrollLeftMouse = buttons[5];
generic.scrollRightMouse = buttons[6];
}
if (numButtons >= 5)
{
generic.upMouse = buttons[3];