X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/672456655288ae8bfd67ab7047adffef6b959d77..b77b87881bae2e6306366d79e7fe160334b3d4a2:/src/mac/toplevel.cpp?ds=inline diff --git a/src/mac/toplevel.cpp b/src/mac/toplevel.cpp index a78d68ecf0..190bcd8946 100644 --- a/src/mac/toplevel.cpp +++ b/src/mac/toplevel.cpp @@ -97,6 +97,7 @@ static const EventTypeSpec eventList[] = { kEventClassMouse , kEventMouseDown } , { kEventClassMouse , kEventMouseUp } , + { kEventClassMouse , kEventMouseWheelMoved } , { kEventClassMouse , kEventMouseMoved } , { kEventClassMouse , kEventMouseDragged } , @@ -264,6 +265,11 @@ pascal OSStatus MouseEventHandler( EventHandlerCallRef handler , EventRef event if ( button == 0 || GetEventKind( event ) == kEventMouseUp ) modifiers += btnState ; + // temporary hack to support true two button mouse + if ( button == kEventMouseButtonSecondary ) + { + modifiers |= controlKey ; + } WindowRef window ; short windowPart = ::FindWindow(point, &window); @@ -290,6 +296,39 @@ pascal OSStatus MouseEventHandler( EventHandlerCallRef handler , EventRef event toplevelWindow->MacFireMouseEvent( nullEvent , point.h , point.v , modifiers , EventTimeToTicks( GetEventTime( event ) ) ) ; result = noErr ; break ; + case kEventMouseWheelMoved : + { + //bClearTooltip = false; + EventMouseWheelAxis axis = kEventMouseWheelAxisY; + SInt32 delta = 0; + Point mouseLoc = {0, 0}; + if (::GetEventParameter(event, kEventParamMouseWheelAxis, typeMouseWheelAxis, + NULL, sizeof(EventMouseWheelAxis), NULL, &axis) == noErr && + ::GetEventParameter(event, kEventParamMouseWheelDelta, typeLongInteger, + NULL, sizeof(SInt32), NULL, &delta) == noErr && + ::GetEventParameter(event, kEventParamMouseLocation, typeQDPoint, + NULL, sizeof(Point), NULL, &mouseLoc) == noErr) + { + wxMouseEvent wheelEvent(wxEVT_MOUSEWHEEL); + + wheelEvent.m_x = mouseLoc.h; + wheelEvent.m_y = mouseLoc.v; + + wheelEvent.m_wheelRotation = delta; + wheelEvent.m_wheelDelta = 1; + wheelEvent.m_linesPerAction = 1; + + wxWindow* currentMouseWindow = NULL; + wxWindow::MacGetWindowFromPoint(wxPoint(mouseLoc.h, mouseLoc.v), ¤tMouseWindow); + + if (currentMouseWindow) + { + currentMouseWindow->GetEventHandler()->ProcessEvent(wheelEvent); + result = noErr; + } + } + } + break ; default : break ; } @@ -1070,27 +1109,32 @@ void wxTopLevelWindowMac::DoMoveWindow(int x, int y, int width, int height) { m_x = actualX ; m_y = actualY ; - m_width = actualWidth ; - m_height = actualHeight ; if ( doMove ) ::MoveWindow((WindowRef)m_macWindow, m_x, m_y , false); // don't make frontmost + m_width = actualWidth ; + m_height = actualHeight ; + if ( doResize ) ::SizeWindow((WindowRef)m_macWindow, m_width, m_height , true); // the OS takes care of invalidating and erasing the new area so we only have to // take care of refreshing for full repaints - if ( doResize && !HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) ) + if ( doResize && HasFlag(wxFULL_REPAINT_ON_RESIZE) ) Refresh() ; if ( IsKindOf( CLASSINFO( wxFrame ) ) ) { wxFrame* frame = (wxFrame*) this ; +#if wxUSE_STATUSBAR frame->PositionStatusBar(); +#endif +#if wxUSE_TOOLBAR frame->PositionToolBar(); +#endif } if ( doMove ) wxWindowMac::MacTopLevelWindowChangedPosition() ; // like this only children will be notified