X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/80442e9470849ad3216d4192dae50865c1f77431..9d5507f7a2701395e1d5c121bd877bb9066ee6ea:/src/mac/carbon/filedlg.cpp diff --git a/src/mac/carbon/filedlg.cpp b/src/mac/carbon/filedlg.cpp index ec922ff21a..81845d173e 100644 --- a/src/mac/carbon/filedlg.cpp +++ b/src/mac/carbon/filedlg.cpp @@ -83,12 +83,14 @@ static pascal void NavEventProc( ::NavCustomControl(ioParams->context, kNavCtlSetLocation, (void *) &theLocation); } - NavMenuItemSpec menuItem; - menuItem.version = kNavMenuItemSpecVersion; - menuItem.menuCreator = 'WXNG'; - menuItem.menuType = data->currentfilter; - wxMacStringToPascal( data->name[data->currentfilter] , (StringPtr)(menuItem.menuItemName) ) ; - ::NavCustomControl(ioParams->context, kNavCtlSelectCustomType, &menuItem); + if( data->extensions.GetCount() > 0 ) + { + NavMenuItemSpec menuItem; + memset( &menuItem, 0, sizeof(menuItem) ); + menuItem.version = kNavMenuItemSpecVersion; + menuItem.menuType = data->currentfilter; + ::NavCustomControl(ioParams->context, kNavCtlSelectCustomType, &menuItem); + } } else if ( inSelector == kNavCBPopupMenuSelect ) { @@ -106,14 +108,13 @@ static pascal void NavEventProc( wxString firstExtension = data->extensions[i].BeforeFirst('|').BeforeFirst(';'); wxString extension = firstExtension.AfterLast('.') ; - extension.MakeLower() ; wxString sfilename ; wxMacCFStringHolder cfString( NavDialogGetSaveFileName( ioParams->context ) , false ); sfilename = cfString.AsString() ; int pos = sfilename.Find('.', true) ; - if ( pos != wxNOT_FOUND ) + if ( pos != wxNOT_FOUND && extension != wxT("*") ) { sfilename = sfilename.Left(pos+1)+extension ; cfString.Assign( sfilename , wxFONTENCODING_DEFAULT ) ; @@ -147,7 +148,7 @@ void MakeUserDataRec(OpenUserDataRec *myData , const wxString& filter ) } else { - myData->extensions.Add( current.MakeUpper() ) ; + myData->extensions.Add( current ) ; ++filterIndex ; } @@ -166,9 +167,9 @@ void MakeUserDataRec(OpenUserDataRec *myData , const wxString& filter ) if ( current.empty() ) myData->extensions.Add( myData->name[filterIndex] ) ; else - myData->extensions.Add( current.MakeUpper() ) ; + myData->extensions.Add( current ) ; if ( filterIndex == 0 || isName ) - myData->name.Add( current.MakeUpper() ) ; + myData->name.Add( current ) ; ++filterIndex ; @@ -216,6 +217,7 @@ static Boolean CheckFile( const wxString &filename , OSType type , OpenUserDataR wxString extension = tokenizer.GetNextToken() ; if ( extension.GetChar(0) == '*' ) extension = extension.Mid(1) ; + extension.MakeUpper(); if ( file.length() >= extension.length() && extension == file.Right(extension.length() ) ) return true ; @@ -228,34 +230,6 @@ static Boolean CheckFile( const wxString &filename , OSType type , OpenUserDataR return true ; } -#if !TARGET_API_MAC_OSX -static pascal Boolean CrossPlatformFileFilter(CInfoPBPtr myCInfoPBPtr, void *dataPtr) -{ - OpenUserDataRecPtr data = (OpenUserDataRecPtr) dataPtr ; - // return true if this item is invisible or a file - - Boolean visibleFlag; - Boolean folderFlag; - - visibleFlag = ! (myCInfoPBPtr->hFileInfo.ioFlFndrInfo.fdFlags & kIsInvisible); - folderFlag = (myCInfoPBPtr->hFileInfo.ioFlAttrib & 0x10); - - // because the semantics of the filter proc are "true means don't show - // it" we need to invert the result that we return - - if ( !visibleFlag ) - return true ; - - if ( !folderFlag ) - { - wxString file = wxMacMakeStringFromPascal( myCInfoPBPtr->hFileInfo.ioNamePtr ) ; - return !CheckFile( file , myCInfoPBPtr->hFileInfo.ioFlFndrInfo.fdType , data ) ; - } - - return false ; -} -#endif - // end wxmac wxFileDialog::wxFileDialog( @@ -281,11 +255,8 @@ pascal Boolean CrossPlatformFilterCallback( // filter string. // However, packages should be dealt with like files and not like folders. So // check if a folder is a package before deciding what to do. - FSRef fsref; NavFileOrFolderInfo* theInfo = (NavFileOrFolderInfo*) info ; - AECoerceDesc (theItem, typeFSRef, theItem); - if ( AEGetDescData (theItem, &fsref, sizeof (FSRef)) != noErr) - return true; + FSRef fsref; if ( theInfo->isFolder ) { @@ -305,10 +276,15 @@ pascal Boolean CrossPlatformFilterCallback( !(lsInfo.flags & (kLSItemInfoIsApplication | kLSItemInfoIsPackage)) ) return true; } - - wxString file = wxMacFSRefToPath( &fsref ) ; - return CheckFile( file , theInfo->fileAndFolder.fileInfo.finderInfo.fdType , data ) ; - + else + { + AECoerceDesc (theItem, typeFSRef, theItem); + if ( AEGetDescData (theItem, &fsref, sizeof (FSRef)) == noErr) + { + wxString file = wxMacFSRefToPath( &fsref ) ; + return CheckFile( file , theInfo->fileAndFolder.fileInfo.finderInfo.fdType , data ) ; + } + } } return true; @@ -365,10 +341,8 @@ int wxFileDialog::ShowModal() if (numFilters < 2) dialogCreateOptions.optionFlags |= kNavPreserveSaveFileExtension; -#if TARGET_API_MAC_OSX if (!(m_windowStyle & wxFD_OVERWRITE_PROMPT)) dialogCreateOptions.optionFlags |= kNavDontConfirmReplacement; -#endif err = ::NavCreatePutFileDialog( &dialogCreateOptions, @@ -402,7 +376,10 @@ int wxFileDialog::ShowModal() ::DisposeNavObjectFilterUPP(navFilterUPP); if (err != noErr) + { + ::NavDialogDispose(dialog); return wxID_CANCEL; + } NavReplyRecord navReply; err = ::NavDialogGetReply(dialog, &navReply); @@ -433,6 +410,7 @@ int wxFileDialog::ShowModal() if (!thePath) { ::NavDisposeReply(&navReply); + ::NavDialogDispose(dialog); return wxID_CANCEL; } @@ -449,6 +427,7 @@ int wxFileDialog::ShowModal() } ::NavDisposeReply(&navReply); + ::NavDialogDispose(dialog); return (err == noErr) ? wxID_OK : wxID_CANCEL; }