# HG changeset patch # User YAMAMOTO Mitsuharu # Date 1135392634 0 # Node ID 8c306a35f0b07cc2ff6ae45ba016795ba9e1f50a # Parent 55dd97aa46da050124cacdaf7794fabdf19f2af1 [TARGET_API_MAC_CARBON] (Fx_file_dialog): Use coercion of Apple event data for translation from/to file names. diff -r 55dd97aa46da -r 8c306a35f0b0 src/macfns.c --- a/src/macfns.c Sat Dec 24 02:50:11 2005 +0000 +++ b/src/macfns.c Sat Dec 24 02:50:34 2005 +0000 @@ -4226,21 +4226,13 @@ /* Set the default location and continue*/ if (status == noErr) { + Lisp_Object encoded_dir = ENCODE_FILE (dir); AEDesc defLocAed; -#ifdef MAC_OSX - FSRef defLoc; - status = FSPathMakeRef(SDATA(ENCODE_FILE(dir)), &defLoc, NULL); -#else - FSSpec defLoc; - status = posix_pathname_to_fsspec (SDATA (ENCODE_FILE (dir)), &defLoc); -#endif + + status = AECreateDesc (TYPE_FILE_NAME, SDATA (encoded_dir), + SBYTES (encoded_dir), &defLocAed); if (status == noErr) { -#ifdef MAC_OSX - AECreateDesc(typeFSRef, &defLoc, sizeof(FSRef), &defLocAed); -#else - AECreateDesc(typeFSS, &defLoc, sizeof(FSSpec), &defLocAed); -#endif NavCustomControl(dialogRef, kNavCtlSetLocation, (void*) &defLocAed); AEDisposeDesc(&defLocAed); } @@ -4262,41 +4254,36 @@ case kNavUserActionSaveAs: { NavReplyRecord reply; - AEDesc aed; -#ifdef MAC_OSX - FSRef fsRef; -#else - FSSpec fs; -#endif + Size len; + status = NavDialogGetReply(dialogRef, &reply); - -#ifdef MAC_OSX - AECoerceDesc(&reply.selection, typeFSRef, &aed); - AEGetDescData(&aed, (void *) &fsRef, sizeof (FSRef)); - FSRefMakePath(&fsRef, (UInt8 *) filename, sizeof (filename)); + if (status != noErr) + break; + status = AEGetNthPtr (&reply.selection, 1, TYPE_FILE_NAME, + NULL, NULL, filename, + sizeof (filename) - 1, &len); + if (status == noErr) + { + len = min (len, sizeof (filename) - 1); + filename[len] = '\0'; + if (reply.saveFileName) + { + /* If it was a saved file, we need to add the file name */ + if (len && len < sizeof (filename) - 1 + && filename[len-1] != '/') + filename[len++] = '/'; + CFStringGetCString(reply.saveFileName, filename+len, + sizeof (filename) - len, +#if MAC_OSX + kCFStringEncodingUTF8 #else - AECoerceDesc (&reply.selection, typeFSS, &aed); - AEGetDescData (&aed, (void *) &fs, sizeof (FSSpec)); - fsspec_to_posix_pathname (&fs, filename, sizeof (filename) - 1); + CFStringGetSystemEncoding () #endif - AEDisposeDesc(&aed); - if (reply.saveFileName) - { - /* If it was a saved file, we need to add the file name */ - int len = strlen(filename); - if (len && filename[len-1] != '/') - filename[len++] = '/'; - CFStringGetCString(reply.saveFileName, filename+len, - sizeof (filename) - len, -#if MAC_OSX - kCFStringEncodingUTF8 -#else - CFStringGetSystemEncoding () -#endif - ); + ); + } + file = DECODE_FILE (make_unibyte_string (filename, + strlen (filename))); } - file = DECODE_FILE (make_unibyte_string (filename, - strlen (filename))); NavDisposeReply(&reply); } break;