From: Stefan Csomor Date: Sun, 31 Jul 2005 18:32:04 +0000 (+0000) Subject: applied patch 1216005 : message and new NavDirDialog X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/516d38cdfda661f0560e8f68820715824b7c51c4 applied patch 1216005 : message and new NavDirDialog git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35042 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mac/carbon/dirdlg.cpp b/src/mac/carbon/dirdlg.cpp index 2150002e42..822047c4df 100644 --- a/src/mac/carbon/dirdlg.cpp +++ b/src/mac/carbon/dirdlg.cpp @@ -50,57 +50,65 @@ wxDirDialog::wxDirDialog(wxWindow *parent, int wxDirDialog::ShowModal() { - NavDialogOptions mNavOptions; - NavObjectFilterUPP mNavFilterUPP = NULL; - NavReplyRecord mNavReply; - - ::NavGetDefaultDialogOptions(&mNavOptions); - - mNavReply.validRecord = false; - mNavReply.replacing = false; - mNavReply.isStationery = false; - mNavReply.translationNeeded = false; - mNavReply.selection.descriptorType = typeNull; - mNavReply.selection.dataHandle = nil; - mNavReply.keyScript = smSystemScript; - mNavReply.fileTranslation = nil; - - // Set default location, the location - // that's displayed when the dialog - // first appears - - OSErr err = ::NavChooseFolder( - NULL, - &mNavReply, - &mNavOptions, - NULL, - mNavFilterUPP, - 0L); // User Data - - if ( (err != noErr) && (err != userCanceledErr) ) { - m_path = wxEmptyString ; - return wxID_CANCEL ; + NavDialogRef dialog; + NavDialogCreationOptions options; + NavReplyRecord reply ; + bool disposeReply = false ; + OSStatus err = noErr; + + err = NavGetDefaultDialogCreationOptions(&options); + if (err == noErr) + { + wxMacCFStringHolder message(m_message, m_font.GetEncoding()); + options.message = message; + err = NavCreateChooseFolderDialog(&options, NULL, NULL, NULL, &dialog); + if (err == noErr) + { + err = NavDialogRun(dialog); + if ( err == noErr ) + { + err = NavDialogGetReply(dialog, &reply); + disposeReply = true ; + } + } } - - if (mNavReply.validRecord) { // User chose a folder - - FSRef folderInfo; - AEDesc specDesc ; - - OSErr err = ::AECoerceDesc( &mNavReply.selection , typeFSRef, &specDesc); - if ( err != noErr ) { - m_path = wxEmptyString ; - return wxID_CANCEL ; + + if ( err == noErr ) + { + if ( reply.validRecord ) + { + FSRef folderInfo; + AEDesc specDesc ; + + OSErr err = ::AECoerceDesc( &reply.selection , typeFSRef, &specDesc); + if ( err != noErr ) + { + m_path = wxEmptyString ; + } + else + { + folderInfo = **(FSRef**) specDesc.dataHandle; + m_path = wxMacFSRefToPath( &folderInfo ) ; + if (specDesc.dataHandle != nil) + { + ::AEDisposeDesc(&specDesc); + } + } } - folderInfo = **(FSRef**) specDesc.dataHandle; - if (specDesc.dataHandle != nil) { - ::AEDisposeDesc(&specDesc); + else + { + err = paramErr ; // could be any error, only used for giving back wxID_CANCEL } - - m_path = wxMacFSRefToPath( &folderInfo ) ; - return wxID_OK ; } - return wxID_CANCEL; + + if ( disposeReply ) + ::NavDisposeReply(&reply); + + // apparently cancelling shouldn't change m_path + if ( err != noErr && err != userCanceledErr ) + m_path = wxEmptyString ; + + return (err == noErr) ? wxID_OK : wxID_CANCEL ; } #endif