X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b27679518606c4739f1821fbb600687b17497dbf..4fe83b93a517ca229ff6503eacf81c1177d088e0:/src/osx/utils_osx.cpp diff --git a/src/osx/utils_osx.cpp b/src/osx/utils_osx.cpp index 5882a67144..251332d88c 100644 --- a/src/osx/utils_osx.cpp +++ b/src/osx/utils_osx.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: utils.cpp 54886 2008-07-31 13:02:53Z SC $ +// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,6 +17,7 @@ #ifndef WX_PRECOMP #include "wx/intl.h" #include "wx/app.h" + #include "wx/log.h" #if wxUSE_GUI #include "wx/toplevel.h" #include "wx/font.h" @@ -39,12 +40,6 @@ #endif #include "wx/osx/private.h" - -#ifdef wxOSX_USE_COCOA -// to get the themeing APIs -#include -#endif - #include "wx/osx/private/timer.h" #include "wx/evtloop.h" @@ -66,6 +61,7 @@ bool wxCheckForInterrupt(wxWindow *WXUNUSED(wnd)) // Return true if we have a colour display bool wxColourDisplay() { + // always the case on OS X return true; } @@ -87,6 +83,57 @@ void wxDisplaySize(int *width, int *height) if ( height ) *height = (int)bounds.size.height; } + +#if wxUSE_GUI + +// ---------------------------------------------------------------------------- +// Launch document with default app +// ---------------------------------------------------------------------------- + +bool wxLaunchDefaultApplication(const wxString& document, int flags) +{ + wxUnusedVar(flags); + + wxCFRef cfMutableString(CFStringCreateMutableCopy(NULL, 0, wxCFStringRef(document))); + CFStringNormalize(cfMutableString,kCFStringNormalizationFormD); + wxCFRef curl(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, cfMutableString , kCFURLPOSIXPathStyle, false)); + OSStatus err = LSOpenCFURLRef( curl , NULL ); + + if (err == noErr) + { + return true; + } + else + { + wxLogDebug(wxT("Default Application Launch error %d"), (int) err); + return false; + } +} + +// ---------------------------------------------------------------------------- +// Launch default browser +// ---------------------------------------------------------------------------- + +bool wxDoLaunchDefaultBrowser(const wxString& url, int flags) +{ + wxUnusedVar(flags); + wxCFRef< CFURLRef > curl( CFURLCreateWithString( kCFAllocatorDefault, + wxCFStringRef( url ), NULL ) ); + OSStatus err = LSOpenCFURLRef( curl , NULL ); + + if (err == noErr) + { + return true; + } + else + { + wxLogDebug(wxT("Browser Launch error %d"), (int) err); + return false; + } +} + +#endif // wxUSE_GUI + #endif void wxDisplaySizeMM(int *width, int *height) @@ -116,9 +163,30 @@ wxEventLoopBase* wxGUIAppTraits::CreateEventLoop() return new wxEventLoop; } +wxWindow* wxFindWindowAtPoint(wxWindow* win, const wxPoint& pt); + wxWindow* wxFindWindowAtPoint(const wxPoint& pt) { - return wxGenericFindWindowAtPoint(pt); +#if wxOSX_USE_CARBON + + Point screenPoint = { pt.y , pt.x }; + WindowRef windowRef; + + if ( FindWindow( screenPoint , &windowRef ) ) + { + wxNonOwnedWindow *nonOwned = wxNonOwnedWindow::GetFromWXWindow( windowRef ); + + if ( nonOwned ) + return wxFindWindowAtPoint( nonOwned , pt ); + } + + return NULL; + +#else + + return wxGenericFindWindowAtPoint( pt ); + +#endif } /* @@ -156,4 +224,24 @@ CGColorRef wxMacCreateCGColorFromHITheme( ThemeBrush brush ) return color; } +//--------------------------------------------------------------------------- +// Mac Specific string utility functions +//--------------------------------------------------------------------------- + +void wxMacStringToPascal( const wxString&from , unsigned char * to ) +{ + wxCharBuffer buf = from.mb_str( wxConvLocal ); + int len = strlen(buf); + + if ( len > 255 ) + len = 255; + to[0] = len; + memcpy( (char*) &to[1] , buf , len ); +} + +wxString wxMacMakeStringFromPascal( const unsigned char * from ) +{ + return wxString( (char*) &from[1] , wxConvLocal , from[0] ); +} + #endif // wxOSX_USE_COCOA_OR_CARBON