OSStatus CNavOpenDialog::CreateGetFileDialog( NavEventProcPtr eventHandler ) { OSStatus status = paramErr; require( fNavDialogRef == NULL, FAIL ); if( fEventHandler != NULL ) { DisposeNavEventUPP( fEventHandler ); fEventHandler = NULL; } if( eventHandler != NULL ) fEventHandler = NewNavEventUPP( eventHandler ); if( fEventHandler != NULL ) { // assumption: fPreviewer, and fObjectFilter are either NULL or correctly setup // before this function was called. status = NavCreateGetFileDialog( &fNavDialogOptions, NULL /*typeList*/, // the old way to filter files fEventHandler /*event callback*/, fPreviewer/*preview callback*/, fObjectFilter/*filter callback*/, // the OSX way to filter files this/*userData*/, &fNavDialogRef/*dialog ref*/ ); } FAIL: return status; }
static const NavEventUPP make_navProcUPP() { if(mac_navProcUPP) return mac_navProcUPP; qAddPostRoutine(cleanup_navProcUPP); return mac_navProcUPP = NewNavEventUPP(qt_mac_filedialog_event_proc); }
static NavEventUPP GetPrivateEventUPP() { static NavEventUPP privateEventUPP = NULL; if ( privateEventUPP == NULL ) { privateEventUPP = NewNavEventUPP( MyPrivateEventProc ); } return privateEventUPP; }
static NavEventUPP GetEventUPP() { static NavEventUPP eventUPP = NULL; if ( eventUPP == NULL ) { eventUPP = NewNavEventUPP( MyEventProc ); } return eventUPP; }
// this code originates from the NavServices sample code in the CarbonLib SDK OSStatus DoSaveAsPDF(WindowRef w, void *ourDataP) { OSStatus err = noErr; static NavEventUPP gNavEventProc = NULL; // event proc for our Nav Dialogs NavDialogCreationOptions dialogOptions; if(!gNavEventProc){ gNavEventProc = NewNavEventUPP(NavEventProc); if(!gNavEventProc) err = memFullErr; } if(!err && (( err = NavGetDefaultDialogCreationOptions( &dialogOptions )) == noErr )) { OurSaveDialogData *dialogDataP = NULL; CFStringRef tempString; CopyWindowTitleAsCFString(w, &tempString); dialogOptions.saveFileName = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, kFileTypePDFCFStr, tempString); CFRelease(tempString); // make the dialog modal to our parent doc, AKA sheets dialogOptions.parentWindow = w; dialogOptions.modality = kWindowModalityWindowModal; dialogDataP = (OurSaveDialogData *)malloc(sizeof(OurSaveDialogData)); if(dialogDataP){ dialogDataP->dialogRef = NULL; dialogDataP->parentWindow = w; dialogDataP->documentDataP = ourDataP; err = NavCreatePutFileDialog(&dialogOptions, kFileTypePDF, kFileCreator, gNavEventProc, dialogDataP, &dialogDataP->dialogRef); if (!err && dialogDataP->dialogRef != NULL) { err = NavDialogRun( dialogDataP->dialogRef ); if (err != noErr) { NavDialogDispose( dialogDataP->dialogRef ); dialogDataP->dialogRef = NULL; free(dialogDataP); } } }else err = memFullErr; if ( dialogOptions.saveFileName != NULL ) CFRelease( dialogOptions.saveFileName ); } return err; }
static void DoAddTest(void) // Called in response to a click of the "Add" button. { OSStatus err; NavDialogCreationOptions navOptions; NavDialogRef navDialog; navDialog = NULL; if (gAddNavEventUPP == NULL) { gAddNavEventUPP = NewNavEventUPP(AddNavEvent); assert(gAddNavEventUPP != NULL); } // Create and run a Nav choose object dialog (which lets you // choose a file, folder or volume). err = NavGetDefaultDialogCreationOptions(&navOptions); if (err == noErr) { navOptions.optionFlags |= kNavSupportPackages; navOptions.modality = kWindowModalityWindowModal; navOptions.parentWindow = gMainWindow; err = NavCreateChooseObjectDialog( &navOptions, // inOptions gAddNavEventUPP, NULL, // inPreviewProc NULL, // inFilterProc NULL, // inClientData &navDialog ); } if (err == noErr) { err = NavDialogRun(navDialog); // The process of adding the item continues in AddNavEvent // when the user has chosen an item to add. } // Clean up. // Dispose the Nav dialog if we didn't manage to start it running. if (err != noErr) { if (navDialog != NULL) { NavDialogDispose(navDialog); } } DisplayError(err); }
OSStatus DoOpenDocument(void) { OSStatus err = noErr; NavDialogCreationOptions dialogOptions; OurDialogData *dialogDataP = NULL; static NavEventUPP gNavEventProc = NULL; // event proc for our Nav Dialogs if(!gNavEventProc){ gNavEventProc = NewNavEventUPP(NavEventProc); if(!gNavEventProc) err = memFullErr; } // while our open dialog is up we'll disable our Open command, else // we might end up with more than one open dialog. Yuk DisableMenuCommand(NULL, kHICommandOpen); dialogDataP = (OurDialogData *)calloc(1, sizeof(OurDialogData)); if(!dialogDataP) err = memFullErr; if (!err && ( err = NavGetDefaultDialogCreationOptions( &dialogOptions )) == noErr ) { dialogOptions.preferenceKey = kOpenPrefKey; dialogOptions.modality = kWindowModalityAppModal; // make it modal if ((err = NavCreateGetFileDialog( &dialogOptions, NULL, //openListH, gNavEventProc, NULL, // no custom previews NULL, // filter proc is NULL dialogDataP, &dialogDataP->dialogRef )) == noErr) { if (( err = NavDialogRun( dialogDataP->dialogRef )) != noErr){ if ( dialogDataP->dialogRef != NULL ){ NavDialogDispose( dialogDataP->dialogRef ); dialogDataP->dialogRef = NULL; free(dialogDataP); } } } if(err == userCanceledErr){ err = noErr; } EnableMenuCommand(NULL, kHICommandOpen); } return err; }
OSErr PutFile (ConstStr255Param thePrompt, ConstStr255Param theFileName, FSSpecPtr theFSSpecPtr, Boolean *theIsSelected, Boolean *theIsReplacing) { NavReplyRecord myReply; NavDialogOptions myDialogOptions; NavEventUPP myEventUPP = NewNavEventUPP(HandleNavEvent); OSErr myErr = noErr; if ((theFSSpecPtr == NULL) || (theIsSelected == NULL) || (theIsReplacing == NULL)) return(paramErr); // assume we are not replacing an existing file *theIsReplacing = false; *theIsSelected = false; // specify the options for the dialog box NavGetDefaultDialogOptions(&myDialogOptions); myDialogOptions.dialogOptionFlags += kNavNoTypePopup; myDialogOptions.dialogOptionFlags += kNavDontAutoTranslate; BlockMoveData(theFileName, myDialogOptions.savedFileName, theFileName[0] + 1); BlockMoveData(thePrompt, myDialogOptions.message, thePrompt[0] + 1); // prompt the user for a file myErr = NavPutFile(NULL, &myReply, &myDialogOptions, myEventUPP, MovieFileType, sigMoviePlayer, NULL); if ((myErr == noErr) && myReply.validRecord) { AEKeyword myKeyword; DescType myActualType; Size myActualSize = 0; // get the FSSpec for the selected file if (theFSSpecPtr != NULL) myErr = AEGetNthPtr(&(myReply.selection), 1, typeFSS, &myKeyword, &myActualType, theFSSpecPtr, sizeof(FSSpec), &myActualSize); *theIsSelected = myReply.validRecord; if (myReply.validRecord) { *theIsReplacing = myReply.replacing; } NavDisposeReply(&myReply); } DisposeNavEventUPP(myEventUPP); return(myErr); }
fileData* MacOSXDirScanner::saveFileDialog() { //XXX not finished yet. fprintf(stderr, "start OSX File Save Dialog\n"); OSStatus err; NavDialogRef saveDialog; NavDialogCreationOptions dialogAttributes; int n = 0; if ( savefD ) { delete savefD; savefD = NULL; } if( AudicleWindow::our_fullscreen ) { glutReshapeWindow( AudicleWindow::main()->m_w, AudicleWindow::main()->m_h ); glutPostRedisplay(); AudicleWindow::our_fullscreen = FALSE; return NULL; } err = NavGetDefaultDialogCreationOptions( &dialogAttributes ); dialogAttributes.modality = kWindowModalityAppModal; gNavEventHandlerPtr = NewNavEventUPP( dialogFileCallback ); err = NavCreatePutFileDialog( &dialogAttributes, 'ChuK', kNavGenericSignature, gNavEventHandlerPtr, NULL, &saveDialog ); if ( !AudicleGfx::cursor_on ) { ShowCursor(); AudicleGfx::cursor_on = true; } err = NavDialogRun( saveDialog ); if ( err != noErr ) { NavDialogDispose( saveDialog ); DisposeNavEventUPP( gNavEventHandlerPtr ); return NULL; } return savefD; }
fileData* MacOSXDirScanner::openFileDialog() { OSStatus err; NavDialogRef openDialog; NavDialogCreationOptions dialogAttributes; int n = 0; if ( openfD ) { delete openfD; openfD = NULL; } if( AudicleWindow::our_fullscreen ) { glutReshapeWindow( AudicleWindow::main()->m_w, AudicleWindow::main()->m_h ); glutPostRedisplay(); AudicleWindow::our_fullscreen = FALSE; return NULL; } err = NavGetDefaultDialogCreationOptions( &dialogAttributes ); dialogAttributes.modality = kWindowModalityAppModal; gNavEventHandlerPtr = NewNavEventUPP( dialogFileCallback ); err = NavCreateGetFileDialog( &dialogAttributes, NULL, gNavEventHandlerPtr, NULL, NULL, NULL, &openDialog ); if ( !AudicleGfx::cursor_on ) { ShowCursor(); AudicleGfx::cursor_on = true; } err = NavDialogRun( openDialog ); if ( err != noErr ) { NavDialogDispose( openDialog ); DisposeNavEventUPP( gNavEventHandlerPtr ); return NULL; } return openfD; }
bool nav_open_file(char *filetype,char *path) { NavDialogCreationOptions navoption; NavReplyRecord navreply; NavEventUPP navevent; NavObjectFilterUPP navfilter; AEKeyword keyword; DescType typecode; Size sz; NavDialogRef diagref; FSRef fsref; strcpy(nav_filetype,filetype); NavGetDefaultDialogCreationOptions(&navoption); navoption.optionFlags-=kNavDontAddTranslateItems; navoption.optionFlags-=kNavAllowPreviews; navevent=NewNavEventUPP(nav_event_proc); navfilter=NewNavObjectFilterUPP(nav_file_filter); NavCreateGetFileDialog(&navoption,NULL,navevent,NULL,navfilter,NULL,&diagref); NavDialogRun(diagref); NavDialogGetReply(diagref,&navreply); NavDialogDispose(diagref); DisposeNavEventUPP(navevent); DisposeNavObjectFilterUPP(navfilter); if (!navreply.validRecord) { NavDisposeReply(&navreply); return(FALSE); } AEGetNthPtr(&(navreply.selection),1,typeFSRef,&keyword,&typecode,(void*)&fsref,sizeof(FSRef),&sz); NavDisposeReply(&navreply); FSRefMakePath(&fsref,(unsigned char*)path,1024); return(TRUE); }
static OSStatus MyChooseFolder() { NavDialogRef dialog; NavDialogCreationOptions options; OSStatus err = noErr; if (gNavEventUPP == NULL) { gNavEventUPP = NewNavEventUPP(MyNavEventCallBack); assert(gNavEventUPP != NULL); } err = NavGetDefaultDialogCreationOptions(&options); if (err == noErr) { err = NavCreateChooseFolderDialog(&options, gNavEventUPP, NULL, NULL, &dialog); if (err == noErr) { err = NavDialogRun(dialog); } } return err; }
static NavEventUPP GetMyNavEventHandlerUPP(void) { if(!gMyNavEventHandlerPtr) gMyNavEventHandlerPtr = NewNavEventUPP( MyNavEventCallback ); return gMyNavEventHandlerPtr; }
#include "wx/dialog.h" #endif // WX_PRECOMP #include "wx/filename.h" #include "wx/modalhook.h" #include "wx/osx/private.h" IMPLEMENT_CLASS(wxDirDialog, wxDialog) static pascal void NavEventProc( NavEventCallbackMessage inSelector, NavCBRecPtr ioParams, NavCallBackUserData ioUserData ); static NavEventUPP sStandardNavEventFilter = NewNavEventUPP(NavEventProc); static pascal void NavEventProc( NavEventCallbackMessage inSelector, NavCBRecPtr ioParams, NavCallBackUserData ioUserData ) { wxDirDialog * data = ( wxDirDialog *) ioUserData ; if ( inSelector == kNavCBStart ) { if (data && !data->GetPath().empty() ) { // Set default location for the modern Navigation APIs // Apple Technical Q&A 1151 FSRef theFile; wxMacPathToFSRef(data->GetPath(), &theFile);
const StringPtr kApplicationName = "\pYourAppNameHere"; ////////// // // GetOneFileWithPreview // Display the appropriate file-opening dialog box, with an optional QuickTime preview pane. If the user // selects a file, return information about it using the theFSSpecPtr parameter. // // Note that both StandardGetFilePreview and NavGetFile use the function specified by theFilterProc as a // file filter. This framework always passes NULL in the theFilterProc parameter. If you use this function // in your own code, keep in mind that on Windows the function specifier must be of type FileFilterUPP and // on Macintosh it must be of type NavObjectFilterUPP. (You can use the QTFrame_GetFileFilterUPP to create // a function specifier of the appropriate type.) Also keep in mind that Navigation Services expects a file // filter function to return true if a file is to be displayed, while the Standard File Package expects the // filter to return false if a file is to be displayed. // ////////// OSErr GetOneFileWithPreview (short theNumTypes, TypeListPtr theTypeList, FSSpecPtr theFSSpecPtr, void *theFilterProc) { #if TARGET_OS_WIN32 StandardFileReply myReply; #endif #if TARGET_OS_MAC NavReplyRecord myReply; NavDialogOptions myDialogOptions; NavTypeListHandle myOpenList = NULL; NavEventUPP myEventUPP = NewNavEventUPP(HandleNavEvent); #endif OSErr myErr = noErr; if (theFSSpecPtr == NULL) return(paramErr); #if TARGET_OS_WIN32 // prompt the user for a file StandardGetFilePreview((FileFilterUPP)theFilterProc, theNumTypes, (ConstSFTypeListPtr)theTypeList, &myReply); if (!myReply.sfGood) return(userCanceledErr); // make an FSSpec record myErr = FSMakeFSSpec(myReply.sfFile.vRefNum, myReply.sfFile.parID, myReply.sfFile.name, theFSSpecPtr); #endif #if TARGET_OS_MAC // specify the options for the dialog box NavGetDefaultDialogOptions(&myDialogOptions); myDialogOptions.dialogOptionFlags -= kNavNoTypePopup; myDialogOptions.dialogOptionFlags -= kNavAllowMultipleFiles; BlockMoveData(kApplicationName, myDialogOptions.clientName, kApplicationName[0] + 1); // create a handle to an 'open' resource myOpenList = (NavTypeListHandle)CreateOpenHandle(kApplicationSignature, theNumTypes, theTypeList); if (myOpenList != NULL) HLock((Handle)myOpenList); // prompt the user for a file myErr = NavGetFile(NULL, &myReply, &myDialogOptions, myEventUPP, NULL, (NavObjectFilterUPP)theFilterProc, myOpenList, NULL); if ((myErr == noErr) && myReply.validRecord) { AEKeyword myKeyword; DescType myActualType; Size myActualSize = 0; // get the FSSpec for the selected file if (theFSSpecPtr != NULL) myErr = AEGetNthPtr(&(myReply.selection), 1, typeFSS, &myKeyword, &myActualType, theFSSpecPtr, sizeof(FSSpec), &myActualSize); NavDisposeReply(&myReply); } if (myOpenList != NULL) { HUnlock((Handle)myOpenList); DisposeHandle((Handle)myOpenList); } DisposeNavEventUPP(myEventUPP); #endif return(myErr); }
////////// // // GetOneFileWithPreview // Display the appropriate file-opening dialog box, with an optional QuickTime preview pane. If the user // selects a file, return information about it using the theFSSpecPtr parameter. // // Note that both StandardGetFilePreview and NavGetFile use the function specified by theFilterProc as a // file filter. This framework always passes NULL in the theFilterProc parameter. If you use this function // in your own code, keep in mind that on Windows the function specifier must be of type FileFilterUPP and // on Macintosh it must be of type NavObjectFilterUPP. (You can use the QTFrame_GetFileFilterUPP to create // a function specifier of the appropriate type.) Also keep in mind that Navigation Services expects a file // filter function to return true if a file is to be displayed, while the Standard File Package expects the // filter to return false if a file is to be displayed. // ////////// OSErr GetOneFileWithPreview(short theNumTypes, TypeListPtr theTypeList, FSSpecPtr theFSSpecPtr, void *theFilterProc) { #if TARGET_OS_WIN32 StandardFileReply myReply; #endif #if TARGET_OS_MAC NavReplyRecord myReply; NavDialogOptions myDialogOptions; NavTypeListHandle myOpenList = NULL; NavEventUPP myEventUPP = NewNavEventUPP(HandleNavEvent); #endif OSErr myErr = noErr; if (theFSSpecPtr == NULL) return(paramErr); #if TARGET_OS_WIN32 // prompt the user for a file StandardGetFilePreview((FileFilterUPP)theFilterProc, theNumTypes, (ConstSFTypeListPtr)theTypeList, &myReply); if (!myReply.sfGood) return(userCanceledErr); // make an FSSpec record myErr = FSMakeFSSpec(myReply.sfFile.vRefNum, myReply.sfFile.parID, myReply.sfFile.name, theFSSpecPtr); #endif #if TARGET_OS_MAC // specify the options for the dialog box NavGetDefaultDialogOptions(&myDialogOptions); myDialogOptions.dialogOptionFlags -= kNavNoTypePopup; myDialogOptions.dialogOptionFlags -= kNavAllowMultipleFiles; BlockMoveData(kApplicationName, myDialogOptions.clientName, kApplicationName[0] + 1); // create a handle to an 'open' resource myOpenList = (NavTypeListHandle)CreateOpenHandle(kApplicationSignature, theNumTypes, theTypeList); if (myOpenList != NULL) HLock((Handle)myOpenList); // prompt the user for a file myErr = NavGetFile(NULL, &myReply, &myDialogOptions, myEventUPP, NULL, (NavObjectFilterUPP)theFilterProc, myOpenList, NULL); if ((myErr == noErr) && myReply.validRecord) { AEKeyword myKeyword; DescType myActualType; Size myActualSize = 0; // get the FSSpec for the selected file if (theFSSpecPtr != NULL) myErr = AEGetNthPtr(&(myReply.selection), 1, typeFSS, &myKeyword, &myActualType, theFSSpecPtr, sizeof(FSSpec), &myActualSize); NavDisposeReply(&myReply); } if (myOpenList != NULL) { HUnlock((Handle)myOpenList); DisposeHandle((Handle)myOpenList); } DisposeNavEventUPP(myEventUPP); #endif return(myErr); }
OSStatus LLFilePickerBase::doNavSaveDialog(ESaveFilter filter, std::string const& filename, std::string const& folder) { OSStatus error = noErr; NavDialogRef navRef = NULL; NavReplyRecord navReply; memset(&navReply, 0, sizeof(navReply)); // Setup the type, creator, and extension OSType type, creator; CFStringRef extension = NULL; switch (filter) { case FFSAVE_WAV: type = 'WAVE'; creator = 'TVOD'; extension = CFSTR(".wav"); break; case FFSAVE_TGA: type = 'TPIC'; creator = 'prvw'; extension = CFSTR(".tga"); break; case FFSAVE_BMP: type = 'BMPf'; creator = 'prvw'; extension = CFSTR(".bmp"); break; case FFSAVE_JPEG: type = 'JPEG'; creator = 'prvw'; extension = CFSTR(".jpeg"); break; case FFSAVE_PNG: type = 'PNG '; creator = 'prvw'; extension = CFSTR(".png"); break; case FFSAVE_AVI: type = L'\?\?\?\?'; creator = L'\?\?\?\?'; extension = CFSTR(".mov"); break; case FFSAVE_ANIM: type = L'\?\?\?\?'; creator = L'\?\?\?\?'; extension = CFSTR(".xaf"); break; #ifdef _CORY_TESTING case FFSAVE_GEOMETRY: type = L'\?\?\?\?'; creator = L'\?\?\?\?'; extension = CFSTR(".slg"); break; #endif case FFSAVE_RAW: type = L'\?\?\?\?'; creator = L'\?\?\?\?'; extension = CFSTR(".raw"); break; case FFSAVE_J2C: type = L'\?\?\?\?'; creator = 'prvw'; extension = CFSTR(".j2c"); break; case FFSAVE_ALL: default: type = L'\?\?\?\?'; creator = L'\?\?\?\?'; extension = CFSTR(""); break; } NavEventUPP eventUPP = NewNavEventUPP(navSetDefaultFolderProc); mFolder = folder; // Create the dialog error = NavCreatePutFileDialog(&mNavOptions, type, creator, eventUPP, (void*)this, &navRef); if (error == noErr) { CFStringRef nameString = NULL; bool hasExtension = true; // Create a CFString of the initial file name if (!filename.empty()) nameString = CFStringCreateWithCString(NULL, filename.c_str(), kCFStringEncodingUTF8); else nameString = CFSTR("Untitled"); // Add the extension if one was not provided if (nameString && !CFStringHasSuffix(nameString, extension)) { CFStringRef tempString = nameString; hasExtension = false; nameString = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@%@"), tempString, extension); CFRelease(tempString); } // Set the name in the dialog if (nameString) { error = NavDialogSetSaveFileName(navRef, nameString); CFRelease(nameString); } else { error = paramErr; } } //gViewerWindow->mWindow->beforeDialog(); // Run the dialog if (error == noErr) { PLS_FLUSH; error = NavDialogRun(navRef); } //gViewerWindow->mWindow->afterDialog(); if (error == noErr) error = NavDialogGetReply(navRef, &navReply); if (navRef) NavDialogDispose(navRef); if (error == noErr && navReply.validRecord) { SInt32 count = 0; // AE indexes are 1 based... error = AECountItems(&navReply.selection, &count); if (count > 0) { // Get the FSRef to the containing folder FSRef fsRef; AEKeyword theAEKeyword; DescType typeCode; Size actualSize = 0; memset(&fsRef, 0, sizeof(fsRef)); error = AEGetNthPtr(&navReply.selection, 1, typeFSRef, &theAEKeyword, &typeCode, &fsRef, sizeof(fsRef), &actualSize); if (error == noErr) { char path[PATH_MAX]; /*Flawfinder: ignore*/ char newFileName[SINGLE_FILENAME_BUFFER_SIZE]; /*Flawfinder: ignore*/ error = FSRefMakePath(&fsRef, (UInt8*)path, PATH_MAX); if (error == noErr) { if (CFStringGetCString(navReply.saveFileName, newFileName, sizeof(newFileName), kCFStringEncodingUTF8)) { mFiles.push_back(std::string(path) + "/" + std::string(newFileName)); } else { error = paramErr; } } else { error = paramErr; } } } } if (eventUPP) DisposeNavEventUPP(eventUPP); return error; }
OSStatus LLFilePickerBase::doNavChooseDialog(ELoadFilter filter, std::string const& folder) { OSStatus error = noErr; NavDialogRef navRef = NULL; NavReplyRecord navReply; memset(&navReply, 0, sizeof(navReply)); mLoadFilter = filter; mFolder = folder; NavEventUPP eventProc = NewNavEventUPP(doNavCallbackEvent); // NOTE: we are passing the address of a local variable here. // This is fine, because the object this call creates will exist for less than the lifetime of this function. // (It is destroyed by NavDialogDispose() below.) error = NavCreateChooseFileDialog(&mNavOptions, NULL, eventProc, NULL, navOpenFilterProc, (void*)this, &navRef); //gViewerWindow->mWindow->beforeDialog(); if (error == noErr) { PLS_FLUSH; error = NavDialogRun(navRef); } //gViewerWindow->mWindow->afterDialog(); if (error == noErr) error = NavDialogGetReply(navRef, &navReply); if (navRef) NavDialogDispose(navRef); if (error == noErr && navReply.validRecord) { SInt32 count = 0; SInt32 index; // AE indexes are 1 based... error = AECountItems(&navReply.selection, &count); for (index = 1; index <= count; index++) { FSRef fsRef; AEKeyword theAEKeyword; DescType typeCode; Size actualSize = 0; char path[MAX_PATH]; /*Flawfinder: ignore*/ memset(&fsRef, 0, sizeof(fsRef)); error = AEGetNthPtr(&navReply.selection, index, typeFSRef, &theAEKeyword, &typeCode, &fsRef, sizeof(fsRef), &actualSize); if (error == noErr) error = FSRefMakePath(&fsRef, (UInt8*) path, sizeof(path)); if (error == noErr) mFiles.push_back(std::string(path)); } } if (eventProc) DisposeNavEventUPP(eventProc); return error; }