Browse Source

STR #1060: first attempt at fixing the dreaded MightyMouse issue on OS X.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4636 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
pull/168/head
Matthias Melcher 20 years ago
parent
commit
cd433ac67a
  1. 23
      src/Fl_mac.cxx

23
src/Fl_mac.cxx

@ -606,6 +606,7 @@ static double do_queued_events( double time = 0.0 )
{ kEventClassMouse, kEventMouseDown }, { kEventClassMouse, kEventMouseDown },
{ kEventClassMouse, kEventMouseUp }, { kEventClassMouse, kEventMouseUp },
{ kEventClassMouse, kEventMouseMoved }, { kEventClassMouse, kEventMouseMoved },
{ kEventClassMouse, 11 }, // MightyMouse wheels
{ kEventClassMouse, kEventMouseWheelMoved }, { kEventClassMouse, kEventMouseWheelMoved },
{ kEventClassMouse, kEventMouseDragged }, { kEventClassMouse, kEventMouseDragged },
{ kEventClassFLTK, kEventFLTKBreakLoop }, { kEventClassFLTK, kEventFLTKBreakLoop },
@ -792,13 +793,26 @@ static pascal OSStatus carbonWindowHandler( EventHandlerCallRef nextHandler, Eve
* Carbon Mousewheel handler * Carbon Mousewheel handler
* This needs to be linked into all new window event handlers * This needs to be linked into all new window event handlers
*/ */
static pascal OSStatus carbonMousewheelHandler( EventHandlerCallRef nextHandler, EventRef event, void *userData ) static pascal OSStatus carbonMousewheelHandler( EventHandlerCallRef nextHandler, EventRef ev, void *userData )
{ {
Fl_Window *window = (Fl_Window*)userData; // Handle the new "MightyMouse" mouse wheel events. Please, someone explaint ot me
EventMouseWheelAxis axis; // why Apple changed the API on this even though the current API supports two wheels
// just fine. Matthias,
EventRef event;
if (GetEventKind(event)==11) {
// if this is a "MightyMouse" event, we need to convert it into a regulare MouseWheel event
GetEventParameter( ev, kEventParamEventRef, typeEventRef, NULL, sizeof( EventRef ), NULL, &event );
} else {
// otherwise, we simply copy the event (can we safely do that?)
event = ev;
}
fl_lock_function(); fl_lock_function();
fl_os_event = event;
Fl_Window *window = (Fl_Window*)userData;
EventMouseWheelAxis axis;
GetEventParameter( event, kEventParamMouseWheelAxis, typeMouseWheelAxis, NULL, sizeof(EventMouseWheelAxis), NULL, &axis ); GetEventParameter( event, kEventParamMouseWheelAxis, typeMouseWheelAxis, NULL, sizeof(EventMouseWheelAxis), NULL, &axis );
long delta; long delta;
GetEventParameter( event, kEventParamMouseWheelDelta, typeLongInteger, NULL, sizeof(long), NULL, &delta ); GetEventParameter( event, kEventParamMouseWheelDelta, typeLongInteger, NULL, sizeof(long), NULL, &delta );
@ -1767,8 +1781,9 @@ void Fl_X::make(Fl_Window* w)
OSStatus ret; OSStatus ret;
EventHandlerUPP mousewheelHandler = NewEventHandlerUPP( carbonMousewheelHandler ); // will not be disposed by Carbon... EventHandlerUPP mousewheelHandler = NewEventHandlerUPP( carbonMousewheelHandler ); // will not be disposed by Carbon...
static EventTypeSpec mousewheelEvents[] = { static EventTypeSpec mousewheelEvents[] = {
{ kEventClassMouse, 11 } // "11" is the yet unlabled "MightyMouse" wheel event - sigh!
{ kEventClassMouse, kEventMouseWheelMoved } }; { kEventClassMouse, kEventMouseWheelMoved } };
ret = InstallWindowEventHandler( x->xid, mousewheelHandler, 1, mousewheelEvents, w, 0L ); ret = InstallWindowEventHandler( x->xid, mousewheelHandler, 2, mousewheelEvents, w, 0L );
EventHandlerUPP mouseHandler = NewEventHandlerUPP( carbonMouseHandler ); // will not be disposed by Carbon... EventHandlerUPP mouseHandler = NewEventHandlerUPP( carbonMouseHandler ); // will not be disposed by Carbon...
static EventTypeSpec mouseEvents[] = { static EventTypeSpec mouseEvents[] = {
{ kEventClassMouse, kEventMouseDown }, { kEventClassMouse, kEventMouseDown },

Loading…
Cancel
Save