# HG changeset patch # User YAMAMOTO Mitsuharu # Date 1135392645 0 # Node ID 114d965dfb60b3c23237e3051ad9403b020e1f0a # Parent 8c306a35f0b07cc2ff6ae45ba016795ba9e1f50a Don't include sys/param.h. (init_coercion_handler): Add extern. [MAC_OS8] (main): Call init_coercion_handler. (mac_initialize) [MAC_OSX]: Likewise. [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Use coercion of Apple event data for translation from/to file names. diff -r 8c306a35f0b0 -r 114d965dfb60 src/macterm.c --- a/src/macterm.c Sat Dec 24 02:50:34 2005 +0000 +++ b/src/macterm.c Sat Dec 24 02:50:45 2005 +0000 @@ -68,7 +68,6 @@ #include #include #include -#include #include "charset.h" #include "coding.h" @@ -8201,6 +8200,7 @@ extern void mac_find_apple_event_spec P_ ((AEEventClass, AEEventID, Lisp_Object *, Lisp_Object *, Lisp_Object *)); +extern OSErr init_coercion_handler P_ ((void)); #if TARGET_API_MAC_CARBON /* Drag and Drop */ @@ -9207,25 +9207,25 @@ result = GetFlavorFlags (theDrag, theItem, flavorTypeHFS, &theFlags); if (result == noErr) { -#ifdef MAC_OSX - FSRef fref; -#endif - char unix_path_name[MAXPATHLEN]; - - GetFlavorData (theDrag, theItem, flavorTypeHFS, &data, &size, 0L); -#ifdef MAC_OSX - /* Use Carbon routines, otherwise it converts the file name - to /Macintosh HD/..., which is not correct. */ - FSpMakeFSRef (&data.fileSpec, &fref); - if (! FSRefMakePath (&fref, unix_path_name, sizeof (unix_path_name))); -#else - if (fsspec_to_posix_pathname (&data.fileSpec, unix_path_name, - sizeof (unix_path_name) - 1) == noErr) -#endif - /* x-dnd functions expect undecoded filenames. */ - file_list = Fcons (make_unibyte_string (unix_path_name, - strlen (unix_path_name)), - file_list); + OSErr err; + AEDesc desc; + + err = GetFlavorData (theDrag, theItem, flavorTypeHFS, + &data, &size, 0L); + if (err == noErr) + err = AECoercePtr (typeFSS, &data.fileSpec, sizeof (FSSpec), + TYPE_FILE_NAME, &desc); + if (err == noErr) + { + Lisp_Object file; + + /* x-dnd functions expect undecoded filenames. */ + file = make_uninit_string (AEGetDescDataSize (&desc)); + err = AEGetDescData (&desc, SDATA (file), SBYTES (file)); + if (err == noErr) + file_list = Fcons (file, file_list); + AEDisposeDesc (&desc); + } } } /* If there are items in the list, construct an event and post it to @@ -9317,6 +9317,8 @@ init_environ (); + init_coercion_handler (); + initialize_applescript (); init_apple_event_handler (); @@ -10705,6 +10707,8 @@ #endif /* USE_CARBON_EVENTS */ #ifdef MAC_OSX + init_coercion_handler (); + init_apple_event_handler (); if (!inhibit_window_system)