event.SetTimestamp(when);
event.SetEventObject(focus);
- if ( focus && (modifiers ^ wxTheApp->s_lastModifiers ) & controlKey )
+ if ( focus && (modifiers ^ wxApp::s_lastModifiers ) & controlKey )
{
event.m_keyCode = WXK_CONTROL ;
event.SetEventType( ( modifiers & controlKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ;
focus->GetEventHandler()->ProcessEvent( event ) ;
}
- if ( focus && (modifiers ^ wxTheApp->s_lastModifiers ) & shiftKey )
+ if ( focus && (modifiers ^ wxApp::s_lastModifiers ) & shiftKey )
{
event.m_keyCode = WXK_SHIFT ;
event.SetEventType( ( modifiers & shiftKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ;
focus->GetEventHandler()->ProcessEvent( event ) ;
}
- if ( focus && (modifiers ^ wxTheApp->s_lastModifiers ) & optionKey )
+ if ( focus && (modifiers ^ wxApp::s_lastModifiers ) & optionKey )
{
event.m_keyCode = WXK_ALT ;
event.SetEventType( ( modifiers & optionKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ;
focus->GetEventHandler()->ProcessEvent( event ) ;
}
- if ( focus && (modifiers ^ wxTheApp->s_lastModifiers ) & cmdKey )
+ if ( focus && (modifiers ^ wxApp::s_lastModifiers ) & cmdKey )
{
event.m_keyCode = WXK_COMMAND ;
event.SetEventType( ( modifiers & cmdKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ;
focus->GetEventHandler()->ProcessEvent( event ) ;
}
- wxTheApp->s_lastModifiers = modifiers ;
+ wxApp::s_lastModifiers = modifiers ;
}
break ;
}
button = kEventMouseButtonSecondary ;
}
+ // otherwise we report double clicks by connecting a left click with a ctrl-left click
+ if ( clickCount > 1 && button != lastButton )
+ clickCount = 1 ;
+
// we must make sure that our synthetic 'right' button corresponds in
// mouse down, moved and mouse up, and does not deliver a right down and left up
{
QDGlobalToLocalPoint( UMAGetWindowPort(window ) , &windowMouseLocation ) ;
- if ( wxTheApp->s_captureWindow && wxTheApp->s_captureWindow->MacGetTopLevelWindowRef() == (WXWindow) window && windowPart == inContent )
+ if ( wxApp::s_captureWindow && wxApp::s_captureWindow->MacGetTopLevelWindowRef() == (WXWindow) window && windowPart == inContent )
{
- currentMouseWindow = wxTheApp->s_captureWindow ;
+ currentMouseWindow = wxApp::s_captureWindow ;
}
else if ( (IsWindowActive(window) && windowPart == inContent) )
{
result = noErr ;
}
}
- if ( cEvent.GetKind() == kEventMouseUp && wxTheApp->s_captureWindow )
+ if ( cEvent.GetKind() == kEventMouseUp && wxApp::s_captureWindow )
{
- wxTheApp->s_captureWindow = NULL ;
+ wxApp::s_captureWindow = NULL ;
// update cursor ?
}
event.SetEventObject( toplevelWindow ) ;
toplevelWindow->GetEventHandler()->ProcessEvent(event) ;
+ toplevelWindow->wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified
}
if ( attributes & kWindowBoundsChangeOriginChanged )
{
const Rect adjustedRect = { adjustR.y + top , adjustR.x + left , adjustR.y + adjustR.height - bottom , adjustR.x + adjustR.width - right } ;
if ( !EqualRect( &newRect , &adjustedRect ) )
cEvent.SetParameter<Rect>( kEventParamCurrentBounds , &adjustedRect ) ;
+ toplevelWindow->wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified
}
result = noErr ;
MacCreateRealWindow( title, pos , size , MacRemoveBordersFromStyle(style) , name ) ;
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
+
+ if (GetExtraStyle() & wxFRAME_EX_METAL)
+ MacSetMetalAppearance(true);
wxTopLevelWindows.Append(this);
}
}
- if ( HasFlag( wxMINIMIZE_BOX ) )
+ if ( HasFlag( wxMINIMIZE_BOX ) && wclass != kPlainWindowClass )
{
attr |= kWindowCollapseBoxAttribute ;
}
- if ( HasFlag( wxMAXIMIZE_BOX ) )
+ if ( HasFlag( wxMAXIMIZE_BOX ) && wclass != kPlainWindowClass )
{
attr |= kWindowFullZoomAttribute ;
}
- if ( HasFlag( wxRESIZE_BORDER ) )
+ if ( HasFlag( wxRESIZE_BORDER ) && wclass != kPlainWindowClass )
{
attr |= kWindowResizableAttribute ;
}
- if ( HasFlag( wxCLOSE_BOX) )
+ if ( HasFlag( wxCLOSE_BOX) && wclass != kPlainWindowClass )
{
attr |= kWindowCloseBoxAttribute ;
}
InstallStandardEventHandler( GetWindowEventTarget(MAC_WXHWND(m_macWindow)) ) ;
MacInstallTopLevelWindowEventHandler() ;
+ DoSetWindowVariant( m_windowVariant ) ;
+
m_macFocus = NULL ;
if ( HasFlag(wxFRAME_SHAPED) )
void wxTopLevelWindowMac::DoMoveWindow(int x, int y, int width, int height)
{
+ m_cachedClippedRectValid = false ;
Rect bounds = { y , x , y + height , x + width } ;
verify_noerr(SetWindowBounds( (WindowRef) m_macWindow, kWindowStructureRgn , &bounds )) ;
+ wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified
}
void wxTopLevelWindowMac::DoGetPosition( int *x, int *y ) const
return attr ;
}
+void wxTopLevelWindowMac::MacPerformUpdates()
+{
+#if TARGET_API_MAC_OSX
+ if ( m_macUsesCompositing )
+ {
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3
+ // for composited windows this also triggers a redraw of all
+ // invalid views in the window
+ if( UMAGetSystemVersion() >= 0x1030 )
+ HIWindowFlush((WindowRef) m_macWindow) ;
+ else
+#endif
+ {
+ // the only way to trigger the redrawing on earlier systems is to call
+ // ReceiveNextEvent
+
+ EventRef currentEvent = (EventRef) wxTheApp->MacGetCurrentEvent() ;
+ UInt32 currentEventClass = 0 ;
+ UInt32 currentEventKind = 0 ;
+ if ( currentEvent != NULL )
+ {
+ currentEventClass = ::GetEventClass( currentEvent ) ;
+ currentEventKind = ::GetEventKind( currentEvent ) ;
+ }
+ if ( currentEventClass != kEventClassMenu )
+ {
+ // when tracking a menu, strange redraw errors occur if we flush now, so leave..
+ EventRef theEvent;
+ OSStatus status = noErr ;
+ status = ReceiveNextEvent( 0 , NULL , kEventDurationNoWait , false , &theEvent ) ;
+ }
+ }
+ }
+ else
+#endif
+ {
+ BeginUpdate( (WindowRef) m_macWindow ) ;
+
+ RgnHandle updateRgn = NewRgn();
+ if ( updateRgn )
+ {
+ GetPortVisibleRegion( GetWindowPort( (WindowRef)m_macWindow ), updateRgn );
+ UpdateControls( (WindowRef)m_macWindow , updateRgn ) ;
+ // if ( !EmptyRgn( updateRgn ) )
+ // MacDoRedraw( updateRgn , 0 , true) ;
+ DisposeRgn( updateRgn );
+ }
+ EndUpdate( (WindowRef)m_macWindow ) ;
+ QDFlushPortBuffer( GetWindowPort( (WindowRef)m_macWindow ) , NULL ) ;
+ }
+}
+
// Attracts the users attention to this window if the application is
// inactive (should be called when a background event occurs)