From: Stefan Csomor Date: Tue, 29 Jul 2008 19:57:35 +0000 (+0000) Subject: OSX regrouping X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/56869c5423170499f9b816c7c2a5a43773e073c7 OSX regrouping git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54817 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/osx/core/stdpaths_cf.cpp b/src/osx/core/stdpaths_cf.cpp index b144a77ae0..3c80821371 100644 --- a/src/osx/core/stdpaths_cf.cpp +++ b/src/osx/core/stdpaths_cf.cpp @@ -101,7 +101,7 @@ wxString wxStandardPathsCF::GetFromFunc(wxCFURLRef (*func)(wxCFBundleRef)) const wxString wxStandardPathsCF::GetDocumentsDir() const { -#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__) +#if defined( __WXMAC__ ) && wxOSX_USE_CARBON return wxMacFindFolderNoSeparator ( kUserDomain, @@ -119,7 +119,7 @@ wxString wxStandardPathsCF::GetDocumentsDir() const wxString wxStandardPathsCF::GetConfigDir() const { -#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__) +#if defined( __WXMAC__ ) && wxOSX_USE_CARBON return wxMacFindFolder((short)kLocalDomain, kPreferencesFolderType, kCreateFolder); #else return wxT("/Library/Preferences"); @@ -128,7 +128,7 @@ wxString wxStandardPathsCF::GetConfigDir() const wxString wxStandardPathsCF::GetUserConfigDir() const { -#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__) +#if defined( __WXMAC__ ) && wxOSX_USE_CARBON return wxMacFindFolder((short)kUserDomain, kPreferencesFolderType, kCreateFolder); #else return wxFileName::GetHomeDir() + wxT("/Library/Preferences"); @@ -180,7 +180,7 @@ wxString wxStandardPathsCF::GetExecutablePath() const wxString wxStandardPathsCF::GetLocalDataDir() const { -#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__) +#if defined( __WXMAC__ ) && wxOSX_USE_CARBON return AppendAppInfo(wxMacFindFolder((short)kLocalDomain, kApplicationSupportFolderType, kCreateFolder)); #else return AppendAppInfo(wxT("/Library/Application Support")); @@ -189,7 +189,7 @@ wxString wxStandardPathsCF::GetLocalDataDir() const wxString wxStandardPathsCF::GetUserDataDir() const { -#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__) +#if defined( __WXMAC__ ) && wxOSX_USE_CARBON return AppendAppInfo(wxMacFindFolder((short)kUserDomain, kApplicationSupportFolderType, kCreateFolder)); #else return AppendAppInfo(wxFileName::GetHomeDir() + _T("/Library/Application Support")); diff --git a/src/osx/core/timer.cpp b/src/osx/core/timer.cpp new file mode 100644 index 0000000000..2a18cd7ff3 --- /dev/null +++ b/src/osx/core/timer.cpp @@ -0,0 +1,109 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: sec/osx/core/timer.cpp +// Purpose: wxTimer implementation using CoreFoundation +// Author: Stefan Csomor +// Modified by: +// Created: 2008-07-01 +// RCS-ID: $Id: timer.cpp 54129 2008-06-11 19:30:52Z SC $ +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" + +#if wxUSE_TIMER + +#ifndef WX_PRECOMP + #include "wx/dynarray.h" +#endif + +#include "wx/osx/private.h" +#include "wx/osx/private/timer.h" + +struct wxOSXTimerInfo +{ + wxOSXTimerImpl* m_timer; + CFRunLoopTimerRef m_timerRef; +}; + +void wxProcessTimer(CFRunLoopTimerRef WXUNUSED(theTimer), void *data) +{ + if ( data == NULL ) + return; + + wxOSXTimerImpl* timer = (wxOSXTimerImpl*)data; + + if ( timer->IsOneShot() ) + timer->Stop(); + + timer->Notify(); +} + +wxOSXTimerImpl::wxOSXTimerImpl(wxTimer *timer) + : wxTimerImpl(timer) +{ + m_info = new wxOSXTimerInfo(); + m_info->m_timer = this; + m_info->m_timerRef = kInvalidID; +} + +bool wxOSXTimerImpl::IsRunning() const +{ + return ( m_info->m_timerRef != kInvalidID && CFRunLoopTimerIsValid(m_info->m_timerRef)); +} + +wxOSXTimerImpl::~wxOSXTimerImpl() +{ + if (m_info->m_timerRef) + { + if ( CFRunLoopTimerIsValid(m_info->m_timerRef) ) + CFRunLoopTimerInvalidate( m_info->m_timerRef ); + CFRelease( m_info->m_timerRef ); + } + delete m_info; +} + +bool wxOSXTimerImpl::Start( int milliseconds, bool mode ) +{ + (void)wxTimerImpl::Start(milliseconds, mode); + + wxCHECK_MSG( m_milli > 0, false, wxT("invalid value for timer timeout") ); + wxCHECK_MSG( m_info->m_timerRef == NULL, false, wxT("attempting to restart a timer") ); + + CFGregorianUnits gumilli ; + memset(&gumilli,0,sizeof(gumilli) ); + gumilli.seconds = m_milli / 1000.0; + + CFRunLoopTimerContext ctx ; + memset( &ctx, 0 , sizeof(ctx) ); + ctx.version = 0; + ctx.info = this; + + m_info->m_timer = this; + m_info->m_timerRef = CFRunLoopTimerCreate( + kCFAllocatorDefault, + CFAbsoluteTimeAddGregorianUnits( CFAbsoluteTimeGetCurrent() , NULL, gumilli ), + IsOneShot() ? 0 : CFTimeInterval( m_milli / 1000.0 ) , + 0, 0, wxProcessTimer, &ctx); + + wxASSERT_MSG( m_info->m_timerRef != NULL, wxT("unable to create timer")); + + CFRunLoopAddTimer( CFRunLoopGetMain() // or CFRunLoopGetCurrent() ? + , m_info->m_timerRef, kCFRunLoopCommonModes) ; + + + return true; +} + +void wxOSXTimerImpl::Stop() +{ + if (m_info->m_timerRef) + { + CFRunLoopTimerInvalidate( m_info->m_timerRef ); + CFRelease( m_info->m_timerRef ); + } + m_info->m_timerRef = kInvalidID; +} + +#endif // wxUSE_TIMER +