X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3083eb85df678aaeac65b9f8bcd9c9a465527e49..75736a9c818f10e49b51506d967759fbecb4fa66:/src/mac/carbon/utils.cpp diff --git a/src/mac/carbon/utils.cpp b/src/mac/carbon/utils.cpp index eff9beaca2..77fb5aefcf 100644 --- a/src/mac/carbon/utils.cpp +++ b/src/mac/carbon/utils.cpp @@ -198,11 +198,15 @@ long wxGetFreeMemory() void wxUsleep(unsigned long milliseconds) { + // TODO remove if we don't encounter any other problemsy + /* clock_t start = clock() ; do { YieldToAnyThread() ; } while( clock() - start < milliseconds / 1000.0 * CLOCKS_PER_SEC ) ; + */ + wxThread::Sleep( milliseconds ) ; } void wxSleep(int nSecs) @@ -1076,10 +1080,6 @@ wxFontEncoding wxMacGetFontEncFromSystemEnc(wxUint32 encoding) return enc ; } -#endif // wxUSE_BASE - -#if wxUSE_GUI - // // CFStringRefs (Carbon only) @@ -1224,6 +1224,46 @@ void wxMacConvertNewlines10To13( wxChar * data ) } #endif +// ---------------------------------------------------------------------------- +// Common Event Support +// ---------------------------------------------------------------------------- + + +extern ProcessSerialNumber gAppProcess ; + +void wxMacWakeUp() +{ + ProcessSerialNumber psn ; + Boolean isSame ; + psn.highLongOfPSN = 0 ; + psn.lowLongOfPSN = kCurrentProcess ; + SameProcess( &gAppProcess , &psn , &isSame ) ; + if ( isSame ) + { +#if TARGET_CARBON + EventRef dummyEvent ; + OSStatus err = MacCreateEvent(nil, 'WXMC', 'WXMC', GetCurrentEventTime(), + kEventAttributeNone, &dummyEvent); + if (err == noErr) + { + err = PostEventToQueue(GetMainEventQueue(), dummyEvent, + kEventPriorityHigh); + } +#else + PostEvent( nullEvent , 0 ) ; +#endif + } + else + { + WakeUpProcess( &gAppProcess ) ; + } +} + +#endif // wxUSE_BASE + +#if wxUSE_GUI + + // ---------------------------------------------------------------------------- // Carbon Event Support // ---------------------------------------------------------------------------- @@ -1234,11 +1274,64 @@ OSStatus wxMacCarbonEvent::GetParameter(EventParamName inName, EventParamType in return ::GetEventParameter( m_eventRef , inName , inDesiredType , NULL , inBufferSize , NULL , outData ) ; } -OSStatus wxMacCarbonEvent::SetParameter(EventParamName inName, EventParamType inType, UInt32 inBufferSize, void * inData) +OSStatus wxMacCarbonEvent::SetParameter(EventParamName inName, EventParamType inType, UInt32 inBufferSize, const void * inData) { return ::SetEventParameter( m_eventRef , inName , inType , inBufferSize , inData ) ; } +// ---------------------------------------------------------------------------- +// Control Access Support +// ---------------------------------------------------------------------------- + +OSStatus wxMacControl::GetData(ControlPartCode inPartCode , ResType inTag , Size inBufferSize , void * inOutBuffer , Size * outActualSize ) +{ + return ::GetControlData( m_controlRef , inPartCode , inTag , inBufferSize , inOutBuffer , outActualSize ) ; +} + +OSStatus wxMacControl::GetDataSize(ControlPartCode inPartCode , ResType inTag , Size * outActualSize ) +{ + return ::GetControlDataSize( m_controlRef , inPartCode , inTag , outActualSize ) ; +} + +OSStatus wxMacControl::SetData(ControlPartCode inPartCode , ResType inTag , Size inSize , const void * inData) +{ + return ::SetControlData( m_controlRef , inPartCode , inTag , inSize , inData ) ; +} + +OSStatus wxMacControl::SendEvent( EventRef event , OptionBits inOptions ) +{ +#if TARGET_API_MAC_OSX + return SendEventToEventTargetWithOptions( event, + HIObjectGetEventTarget( (HIObjectRef) m_controlRef ), inOptions ); +#else + #pragma unused(inOptions) + return SendEventToEventTarget(event,GetControlEventTarget( m_controlRef ) ) ; +#endif +} + +OSStatus wxMacControl::SendHICommand( HICommand &command , OptionBits inOptions ) +{ + wxMacCarbonEvent event( kEventClassCommand , kEventCommandProcess ) ; + event.SetParameter(kEventParamDirectObject,command) ; + return SendEvent( event , inOptions ) ; +} + +OSStatus wxMacControl::SendHICommand( UInt32 commandID , OptionBits inOptions ) +{ + HICommand command ; + memset( &command, 0 , sizeof(command) ) ; + command.commandID = commandID ; + return SendHICommand( command , inOptions ) ; +} + +void wxMacControl::Flash( ControlPartCode part , UInt32 ticks ) +{ + HiliteControl( m_controlRef , part ) ; + unsigned long finalTicks ; + Delay( ticks , &finalTicks ) ; + HiliteControl( m_controlRef , kControlNoPart ) ; +} + // ---------------------------------------------------------------------------- // debugging support // ----------------------------------------------------------------------------