diff --git a/ChangeLog b/ChangeLog index a400318..83d3582 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-02-10 Eric Wasylishen + + * 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 * Headers/win32/WIN32Server.h: Remove HOTKEY method. diff --git a/Headers/x11/XGGeneric.h b/Headers/x11/XGGeneric.h index ec0e67f..e84cbac 100644 --- a/Headers/x11/XGGeneric.h +++ b/Headers/x11/XGGeneric.h @@ -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; diff --git a/Source/x11/XGServerEvent.m b/Source/x11/XGServerEvent.m index df1e278..0697437 100644 --- a/Source/x11/XGServerEvent.m +++ b/Source/x11/XGServerEvent.m @@ -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; diff --git a/Source/x11/XGServerWindow.m b/Source/x11/XGServerWindow.m index 1b38515..21c2949 100644 --- a/Source/x11/XGServerWindow.m +++ b/Source/x11/XGServerWindow.m @@ -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];