]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/sound.cpp
fix for [ 805216 ] dirMac does not properly skip directories from kevin hock
[wxWidgets.git] / src / mac / carbon / sound.cpp
index fc24d21ac3e19667149956b233db28de767a6c1d..a4870396eb5839ddef5a789b491958e2e322401f 100644 (file)
@@ -2,10 +2,10 @@
 // Name:        sound.cpp
 // Purpose:     wxSound class implementation: optional
 // Author:      Ryan Norton
-// Modified by:
+// Modified by: Stefan Csomor
 // Created:     1998-01-01
 // RCS-ID:      $Id$
-// Copyright:   (c) Ryan Norton, Stefan Csomor
+// Copyright:   (c) Ryan Norton
 // Licence:       wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -19,6 +19,7 @@
 #include "wx/file.h"
 #include "wx/sound.h"
 #include "wx/timer.h"
+#include "wx/intl.h"
 
 #if wxUSE_SOUND
 
@@ -41,7 +42,7 @@
 //
 
 #ifdef __WXMAC__
-#include "wx/mac/private.h"
+#include "wx/mac/uma.h"
 #include <Movies.h>
 #include <Gestalt.h>
 #endif
@@ -375,42 +376,74 @@ bool wxSound::DoPlay(unsigned flags) const
             if (!wxInitQT())
                 return false;
 
-            short movieResFile;
-            FSSpec sfFile;
-
-#ifdef __WXMAC__
-            wxMacFilename2FSSpec( m_sndname , &sfFile ) ;
-#else
-            int nError;
-            if ((nError = NativePathNameToFSSpec ((char*) m_sndname.c_str(), &sfFile, 0)) != noErr)
+            OSErr err = noErr ;
+//NB:  RN: Stefan - I think the 10.3 path functions are broken if kQTNativeDefaultPathStyle is
+//going to trigger a warning every time it is used - where its _supposed to be used_!!
+//(kQTNativePathStyle is negative but the function argument is unsigned!)
+//../src/mac/carbon/sound.cpp: In member function `virtual bool 
+//   wxSound::DoPlay(unsigned int) const':
+//../src/mac/carbon/sound.cpp:387: warning: passing negative value `
+//   kQTNativeDefaultPathStyle' for argument passing 2 of `OSErr 
+//   QTNewDataReferenceFromFullPathCFString(const __CFString*, long unsigned int, 
+//   long unsigned int, char***, OSType*)'
+//../src/mac/carbon/sound.cpp:387: warning: argument of negative value `
+//   kQTNativeDefaultPathStyle' to `long unsigned int'
+#if defined( __WXMAC__ ) && TARGET_API_MAC_OSX && ( MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2 )
+            if ( UMAGetSystemVersion() >= 0x1030 )
             {
-                wxLogSysError(wxString::Format(wxT("File:%s does not exist\nError:%i"),
-                                m_sndname.c_str(), nError));
-                return false;
+                Handle dataRef = NULL;
+                OSType dataRefType;            
+                
+                err = QTNewDataReferenceFromFullPathCFString(wxMacCFStringHolder(m_sndname,wxLocale::GetSystemEncoding()),
+                    //FIXME: Why does this have to be casted?
+                    (unsigned int)kQTNativeDefaultPathStyle, 
+                    //FIXME: End
+                    0, &dataRef, &dataRefType);
+
+                wxASSERT(err == noErr);
+                
+                if (NULL != dataRef || err != noErr) 
+                {
+                    err = NewMovieFromDataRef( &movie, newMovieDontAskUnresolvedDataRefs , NULL, dataRef, dataRefType );
+                    wxASSERT(err == noErr);
+                    DisposeHandle(dataRef);
+                }
             }
+            else
 #endif
-
-            if (OpenMovieFile (&sfFile, &movieResFile, fsRdPerm) != noErr)
             {
-                wxLogSysError(wxT("Quicktime couldn't open the file"));
-                return false;
+                short movieResFile;
+                FSSpec sfFile;
+#ifdef __WXMAC__
+                wxMacFilename2FSSpec( m_sndname , &sfFile ) ;
+#else
+                int nError;
+                if ((nError = NativePathNameToFSSpec ((char*) m_sndname.c_str(), &sfFile, 0)) != noErr)
+                {
+                    wxLogSysError(wxString::Format(wxT("File:%s does not exist\nError:%i"),
+                                    m_sndname.c_str(), nError));
+                    return false;
+                }
+#endif
+                if (OpenMovieFile (&sfFile, &movieResFile, fsRdPerm) != noErr)
+                {
+                    wxLogSysError(wxT("Quicktime couldn't open the file"));
+                    return false;
+                }
+                short movieResID = 0;
+                Str255 movieName;
+
+                err = NewMovieFromFile (
+                &movie,
+                movieResFile,
+                &movieResID,
+                movieName,
+                newMovieActive,
+                NULL); //wasChanged
+
+                CloseMovieFile (movieResFile);
             }
-
-
-            short movieResID = 0;
-            Str255 movieName;
-            OSErr err;
-
-            err = NewMovieFromFile (
-            &movie,
-            movieResFile,
-            &movieResID,
-            movieName,
-            newMovieActive,
-            NULL); //wasChanged
-
-            CloseMovieFile (movieResFile);
-
+            
             if (err != noErr)
             {
                 wxLogSysError(