diff options
Diffstat (limited to 'macosx/TView.cxx')
-rw-r--r-- | macosx/TView.cxx | 132 |
1 files changed, 56 insertions, 76 deletions
diff --git a/macosx/TView.cxx b/macosx/TView.cxx index 9ed02b110..00a354ae7 100644 --- a/macosx/TView.cxx +++ b/macosx/TView.cxx @@ -111,12 +111,8 @@ TView::~TView() // If we have installed our custom mouse events handler on the window, // go forth and remove it. Note: -1 is used to indicate that no handler has // been installed yet, but we want to once we get a window. - if ( mouseEventHandler != NULL && mouseEventHandler != reinterpret_cast<void*>( -1 ) ) - { - OSStatus err; - err = RemoveEventHandler( mouseEventHandler ); - assert( err == noErr ); - } + if ( mouseEventHandler != NULL && mouseEventHandler != reinterpret_cast<void*>( -1 ) ) + RemoveEventHandler( mouseEventHandler ); mouseEventHandler = NULL; } @@ -549,7 +545,6 @@ OSStatus TView::ActivateInterface( result = AddEventTypesToHandler( fHandler, GetEventTypeCount( kControlMouseEvents ), kControlMouseEvents ); - assert( result == noErr ); } if ( this->GetOwner() != NULL ) @@ -558,7 +553,6 @@ OSStatus TView::ActivateInterface( if ( mouseEventHandler != NULL && mouseEventHandler != reinterpret_cast<void*>( -1 ) ) { result = RemoveEventHandler( mouseEventHandler ); - assert( result != NULL ); } mouseEventHandler = NULL; @@ -570,11 +564,9 @@ OSStatus TView::ActivateInterface( { kEventClassMouse, kEventMouseDragged }, }; - assert( mouseEventHandler == NULL ); result = InstallEventHandler( GetWindowEventTarget( this->GetOwner() ), WindowEventHandler, GetEventTypeCount( kWindowMouseEvents ), kWindowMouseEvents, this, &mouseEventHandler ); - assert( result == noErr && mouseEventHandler != NULL ); } // If we have no window yet. Set the mouseEventHandler to -1 so when we get one we // will install the event handler @@ -595,7 +587,6 @@ OSStatus TView::ActivateInterface( result = AddEventTypesToHandler( fHandler, GetEventTypeCount( kControlMouseEvents ), kControlMouseEvents ); - assert( result == noErr ); } } @@ -697,8 +688,8 @@ pascal OSStatus TView::ViewEventHandler( OSStatus result; TView* view = (TView*) inUserData; TCarbonEvent event( inEvent ); - if (view->debugPrint) - fprintf(stderr,"TView::ViewEventHandler\n"); + //if (view->debugPrint) + // fprintf(stderr,"TView::ViewEventHandler\n"); result = view->HandleEvent( inCallRef, event ); return result; @@ -714,7 +705,8 @@ pascal OSStatus TView::WindowEventHandler( TCarbonEvent event( inEvent ); const WindowRef window = view->GetOwner(); - assert( window != NULL ); + if (NULL == window) + return eventNotHandledErr; // If the window is not active, let the standard window handler execute. if ( ! IsWindowActive( window ) ) return eventNotHandledErr; @@ -722,7 +714,8 @@ pascal OSStatus TView::WindowEventHandler( fprintf(stderr,"TView::WindowEventHandler\n"); const HIViewRef rootView = HIViewGetRoot( window ); - assert( rootView != NULL ); + if (NULL == rootView) + return eventNotHandledErr; // TODO: On OS X 10.3, test if this bug still exists // This is a hack to work around a bug in the OS. See: @@ -739,19 +732,18 @@ pascal OSStatus TView::WindowEventHandler( // convert screen coords to window relative Rect bounds; err = GetWindowBounds( window, kWindowStructureRgn, &bounds ); - assert( err == noErr ); - - ptMouse.x -= bounds.left; - ptMouse.y -= bounds.top; - - event.SetParameter( kEventParamWindowMouseLocation, ptMouse ); + if( err == noErr ) + { + ptMouse.x -= bounds.left; + ptMouse.y -= bounds.top; + event.SetParameter( kEventParamWindowMouseLocation, ptMouse ); + } } HIViewRef targetView = NULL; err = HIViewGetViewForMouseEvent( rootView, inEvent, &targetView ); - assert( err == noErr && targetView != NULL ); - if (view->debugPrint) - fprintf(stderr,"TView::WindowEventHandler root[%08X] viewRef[%08X] targetView[%08X]\n", rootView, view->GetViewRef(), targetView); + //if (view->debugPrint) + // fprintf(stderr,"TView::WindowEventHandler root[%08X] viewRef[%08X] targetView[%08X]\n", rootView, view->GetViewRef(), targetView); if ( targetView == view->GetViewRef() || event.GetKind() == kEventMouseDragged ) { return view->HandleEvent( inCallRef, event ); @@ -1076,7 +1068,6 @@ OSStatus TView::HandleEvent( // some other kind of Control event default: - assert( false ); break; } break; @@ -1086,70 +1077,59 @@ OSStatus TView::HandleEvent( break; case kEventClassMouse: + { result = inEvent.GetParameter<HIPoint>( kEventParamWindowMouseLocation, typeHIPoint, &where ); HIViewConvertPoint( &where, NULL, fViewRef ); - assert( result == noErr ); UInt32 inKeyModifiers; result = inEvent.GetParameter( kEventParamKeyModifiers, &inKeyModifiers ); - assert( result == noErr ); - + if( result != noErr ) + inKeyModifiers = 0; + EventMouseButton inMouseButton = 0; + result = inEvent.GetParameter<EventMouseButton>( kEventParamMouseButton, typeMouseButton, &inMouseButton ); + if (noErr != result) + // assume no button is pressed if there is no button info + inMouseButton = 0; + UInt32 inClickCount; + result = inEvent.GetParameter( kEventParamClickCount, &inClickCount ); + if( result != noErr ) + inClickCount = 0; + switch ( inEvent.GetKind() ) - { + { case kEventMouseWheelMoved: - { - EventMouseWheelAxis inAxis; - result = inEvent.GetParameter<EventMouseWheelAxis>( kEventParamMouseWheelAxis, typeMouseWheelAxis, &inAxis ); - assert( noErr == result ); + { + EventMouseWheelAxis inAxis; + result = inEvent.GetParameter<EventMouseWheelAxis>( kEventParamMouseWheelAxis, typeMouseWheelAxis, &inAxis ); - SInt32 inDelta; - result = inEvent.GetParameter<SInt32>( kEventParamMouseWheelDelta, typeSInt32, &inDelta ); - assert( noErr == result ); + SInt32 inDelta; + result = inEvent.GetParameter<SInt32>( kEventParamMouseWheelDelta, typeSInt32, &inDelta ); - result = MouseWheelMoved( inAxis, inDelta, inKeyModifiers ); - } + result = MouseWheelMoved( inAxis, inDelta, inKeyModifiers ); + break; + } + case kEventMouseDown: + result = MouseDown( where, inKeyModifiers, inMouseButton, inClickCount, inEvent ); break; - - - // some other kind of Mouse event: This is (in my opinion) an error - // TODO: There is also a MouseMoved event that we do not handle - default: - { - EventMouseButton inMouseButton; - result = inEvent.GetParameter<EventMouseButton>( kEventParamMouseButton, typeMouseButton, &inMouseButton ); - assert( result == noErr ); - - UInt32 inClickCount; - result = inEvent.GetParameter( kEventParamClickCount, &inClickCount ); - assert( result == noErr ); - - switch ( inEvent.GetKind() ) - { - case kEventMouseDown: - result = MouseDown( where, inKeyModifiers, inMouseButton, inClickCount, inEvent ); - break; - case kEventMouseUp: - result = MouseUp( where, inKeyModifiers, inMouseButton, inClickCount ); - break; - case kEventMouseExited: - result = MouseExited( where, inKeyModifiers, inMouseButton, inClickCount ); - break; - case kEventMouseEntered: - result = MouseEntered( where, inKeyModifiers, inMouseButton, inClickCount ); - break; - case kEventMouseMoved: - case kEventMouseDragged: - result = MouseDragged( where, inKeyModifiers, inMouseButton, inClickCount ); - break; - } - } + case kEventMouseUp: + result = MouseUp( where, inKeyModifiers, inMouseButton, inClickCount ); break; - } - break; - + case kEventMouseExited: + result = MouseExited( where, inKeyModifiers, inMouseButton, inClickCount ); + break; + case kEventMouseEntered: + result = MouseEntered( where, inKeyModifiers, inMouseButton, inClickCount ); + break; + case kEventMouseMoved: + case kEventMouseDragged: + result = MouseDragged( where, inKeyModifiers, inMouseButton, inClickCount ); + break; + default:; + } + break; + } // some other event class default: - assert( false ); break; } |