From d421d4d8fccc7f49bceae903014413c15ce6b097 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Sat, 19 Apr 2008 01:24:47 +0000 Subject: [PATCH] (create_apple_event) [TARGET_API_MAC_CARBON]: Make function non-static. (create_apple_event_from_event_ref) [TARGET_API_MAC_CARBON]: Remove function. (create_apple_event_from_drag_ref) [TARGET_API_MAC_CARBON]: Move to mactoolbox.c. (mac_event_parameters_to_lisp) [TARGET_API_MAC_CARBON]: New function. --- src/mac.c | 151 ++++++++++++++++++++------------------------------------------ 1 file changed, 49 insertions(+), 102 deletions(-) diff --git a/src/mac.c b/src/mac.c index 0ae233f048e..22f34747ea8 100644 --- a/src/mac.c +++ b/src/mac.c @@ -817,7 +817,7 @@ init_coercion_handler () } #if TARGET_API_MAC_CARBON -static OSErr +OSErr create_apple_event (class, id, result) AEEventClass class; AEEventID id; @@ -842,129 +842,76 @@ create_apple_event (class, id, result) return err; } -OSStatus -create_apple_event_from_event_ref (event, num_params, names, types, result) +Lisp_Object +mac_event_parameters_to_lisp (event, num_params, names, types) EventRef event; UInt32 num_params; const EventParamName *names; const EventParamType *types; - AppleEvent *result; { OSStatus err; - UInt32 i, size; + Lisp_Object result = Qnil; + UInt32 i; + ByteCount size; +#ifdef MAC_OSX CFStringRef string; CFDataRef data; - char *buf = NULL; - - err = create_apple_event (0, 0, result); /* Dummy class and ID. */ - if (err != noErr) - return err; - - for (i = 0; i < num_params; i++) - switch (types[i]) - { -#ifdef MAC_OSX - case typeCFStringRef: - err = GetEventParameter (event, names[i], typeCFStringRef, NULL, - sizeof (CFStringRef), NULL, &string); - if (err != noErr) - break; - data = CFStringCreateExternalRepresentation (NULL, string, - kCFStringEncodingUTF8, - '?'); - if (data == NULL) - break; - AEPutParamPtr (result, names[i], typeUTF8Text, - CFDataGetBytePtr (data), CFDataGetLength (data)); - CFRelease (data); - break; #endif - - default: - err = GetEventParameter (event, names[i], types[i], NULL, - 0, &size, NULL); - if (err != noErr) - break; - buf = xrealloc (buf, size); - err = GetEventParameter (event, names[i], types[i], NULL, - size, NULL, buf); - if (err == noErr) - AEPutParamPtr (result, names[i], types[i], buf, size); - break; - } - if (buf) - xfree (buf); - - return noErr; -} - -OSErr -create_apple_event_from_drag_ref (drag, num_types, types, result) - DragRef drag; - UInt32 num_types; - const FlavorType *types; - AppleEvent *result; -{ - OSErr err; - UInt16 num_items; - AppleEvent items; - long index; char *buf = NULL; - err = CountDragItems (drag, &num_items); - if (err != noErr) - return err; - err = AECreateList (NULL, 0, false, &items); - if (err != noErr) - return err; - - for (index = 1; index <= num_items; index++) + for (i = 0; i < num_params; i++) { - ItemReference item; - DescType desc_type = typeNull; - Size size; + EventParamName name = names[i]; + EventParamType type = types[i]; - err = GetDragItemReferenceNumber (drag, index, &item); - if (err == noErr) + switch (type) { - int i; +#ifdef MAC_OSX + case typeCFStringRef: + err = GetEventParameter (event, name, typeCFStringRef, NULL, + sizeof (CFStringRef), NULL, &string); + if (err != noErr) + break; + data = CFStringCreateExternalRepresentation (NULL, string, + kCFStringEncodingUTF8, + '?'); + if (data == NULL) + break; + name = EndianU32_NtoB (name); + type = EndianU32_NtoB (typeUTF8Text); + result = + Fcons (Fcons (make_unibyte_string ((char *) &name, 4), + Fcons (make_unibyte_string ((char *) &type, 4), + make_unibyte_string (CFDataGetBytePtr (data), + CFDataGetLength (data)))), + result); + CFRelease (data); + break; +#endif - for (i = 0; i < num_types; i++) + default: + err = GetEventParameter (event, name, type, NULL, 0, &size, NULL); + if (err != noErr) + break; + buf = xrealloc (buf, size); + err = GetEventParameter (event, name, type, NULL, size, NULL, buf); + if (err == noErr) { - err = GetFlavorDataSize (drag, item, types[i], &size); - if (err == noErr) - { - buf = xrealloc (buf, size); - err = GetFlavorData (drag, item, types[i], buf, &size, 0); - } - if (err == noErr) - { - desc_type = types[i]; - break; - } + name = EndianU32_NtoB (name); + type = EndianU32_NtoB (type); + result = + Fcons (Fcons (make_unibyte_string ((char *) &name, 4), + Fcons (make_unibyte_string ((char *) &type, 4), + make_unibyte_string (buf, size))), + result); } + break; } - err = AEPutPtr (&items, index, desc_type, - desc_type != typeNull ? buf : NULL, - desc_type != typeNull ? size : 0); - if (err != noErr) - break; } if (buf) xfree (buf); - if (err == noErr) - { - err = create_apple_event (0, 0, result); /* Dummy class and ID. */ - if (err == noErr) - err = AEPutParamDesc (result, keyDirectObject, &items); - if (err != noErr) - AEDisposeDesc (result); - } - - AEDisposeDesc (&items); - - return err; + return result; } #endif /* TARGET_API_MAC_CARBON */ -- 2.11.4.GIT