return result ;
}
-static pascal OSStatus MouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
+pascal OSStatus MouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
{
OSStatus result = eventNotHandledErr ;
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);
- if ( IsWindowActive(window) && windowPart == inContent )
+ // either we really are active or we are capturing mouse events
+
+ if ( (IsWindowActive(window) && windowPart == inContent) ||
+ (wxTheApp->s_captureWindow && wxTheApp->s_captureWindow->MacGetTopLevelWindow() == toplevelWindow) )
{
switch ( GetEventKind( event ) )
{
result = noErr ;
break ;
case kEventMouseMoved :
- toplevelWindow->MacFireMouseEvent( nullEvent , point.h , point.v , modifiers , EventTimeToTicks( GetEventTime( event ) ) ) ;
+ wxTheApp->MacHandleMouseMovedEvent( point.h , point.v , modifiers , EventTimeToTicks( GetEventTime( event ) ) ) ;
result = noErr ;
break ;
case kEventMouseDragged :
GetEventParameter( event, kEventParamCurrentBounds, typeQDRectangle, NULL,
sizeof( newContentRect ), NULL, &newContentRect );
- wxRect contentRect(newContentRect.left , newContentRect.top ,
- newContentRect.right - newContentRect.left ,
- newContentRect.bottom - newContentRect.top) ;
+ wxSize formerSize = toplevelWindow->GetSize() ;
- bool handled = false ;
- if ((attributes & kWindowBoundsChangeSizeChanged) != 0)
- {
- wxSizeEvent event(contentRect , toplevelWindow->GetId());
- event.SetEventObject(toplevelWindow);
- handled = toplevelWindow->GetEventHandler()->ProcessEvent(event);
- contentRect = event.GetRect() ;
- }
- else if ( attributes & kWindowBoundsChangeOriginChanged != 0)
- {
- wxMoveEvent event(contentRect , toplevelWindow->GetId());
- event.SetEventObject(toplevelWindow);
- handled = toplevelWindow->GetEventHandler()->ProcessEvent(event);
- contentRect = event.GetRect() ;
- }
- if ( handled )
+ if ( (attributes & kWindowBoundsChangeSizeChanged ) ||
+ ( attributes & kWindowBoundsChangeOriginChanged ) )
+ toplevelWindow->SetSize( newContentRect.left , newContentRect.top ,
+ newContentRect.right - newContentRect.left ,
+ newContentRect.bottom - newContentRect.top, wxSIZE_USE_EXISTING);
+
+ int x , y , w , h ;
+ toplevelWindow->GetPosition( &x , &y ) ;
+ toplevelWindow->GetSize( &w , &h ) ;
+ Rect adjustedRect = { y , x , y + h , x + w } ;
+
+ if ( !EqualRect( &newContentRect , &adjustedRect ) )
{
- SetRect( &newContentRect , contentRect.GetLeft() , contentRect.GetTop() , contentRect.GetRight() , contentRect.GetBottom() ) ;
- SetEventParameter( event, kEventParamCurrentBounds, typeQDRectangle, sizeof( newContentRect ), &newContentRect );
+ SetEventParameter( event , kEventParamCurrentBounds , typeQDRectangle, sizeof( adjustedRect ) , &adjustedRect ) ;
}
+
+ if ( toplevelWindow->GetSize() != formerSize )
+ toplevelWindow->Update() ;
+
result = noErr ;
}
break ;
wxList *wxWinMacWindowList = NULL;
wxTopLevelWindowMac *wxFindWinFromMacWindow(WXWindow inWindowRef)
{
+ if ( wxWinMacWindowList == NULL )
+ return NULL ;
wxNode *node = wxWinMacWindowList->Find((long)inWindowRef);
if (!node)
return NULL;
void wxTopLevelWindowMac::MacActivate( long timestamp , bool inIsActivating )
{
- wxLogDebug(wxT("TopLevel=%p::MacActivate"),this);
+ // wxLogDebug(wxT("TopLevel=%p::MacActivate"),this);
+
if(s_macDeactivateWindow==this)
s_macDeactivateWindow=NULL;
MacDelayedDeactivation(timestamp);
{
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() ;