aboutsummaryrefslogtreecommitdiffstats
path: root/src/mac.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mac.c')
-rw-r--r--src/mac.c125
1 files changed, 98 insertions, 27 deletions
diff --git a/src/mac.c b/src/mac.c
index 444320322c3..f7fcbe9ac88 100644
--- a/src/mac.c
+++ b/src/mac.c
@@ -272,7 +272,7 @@ static Lisp_Object Qundecoded_file_name;
272 272
273static Lisp_Object 273static Lisp_Object
274mac_aelist_to_lisp (desc_list) 274mac_aelist_to_lisp (desc_list)
275 AEDescList *desc_list; 275 const AEDescList *desc_list;
276{ 276{
277 OSErr err; 277 OSErr err;
278 long count; 278 long count;
@@ -337,7 +337,7 @@ mac_aelist_to_lisp (desc_list)
337 337
338Lisp_Object 338Lisp_Object
339mac_aedesc_to_lisp (desc) 339mac_aedesc_to_lisp (desc)
340 AEDesc *desc; 340 const AEDesc *desc;
341{ 341{
342 OSErr err = noErr; 342 OSErr err = noErr;
343 DescType desc_type = desc->descriptorType; 343 DescType desc_type = desc->descriptorType;
@@ -665,33 +665,46 @@ init_coercion_handler ()
665} 665}
666 666
667#if TARGET_API_MAC_CARBON 667#if TARGET_API_MAC_CARBON
668OSErr 668static OSErr
669create_apple_event_from_event_ref (event, num_params, names, types, result) 669create_apple_event (class, id, result)
670 EventRef event; 670 AEEventClass class;
671 UInt32 num_params; 671 AEEventID id;
672 EventParamName *names;
673 EventParamType *types;
674 AppleEvent *result; 672 AppleEvent *result;
675{ 673{
676 OSErr err; 674 OSErr err;
677 static const ProcessSerialNumber psn = {0, kCurrentProcess}; 675 static const ProcessSerialNumber psn = {0, kCurrentProcess};
678 AEAddressDesc address_desc; 676 AEAddressDesc address_desc;
679 UInt32 i, size;
680 CFStringRef string;
681 CFDataRef data;
682 char *buf;
683 677
684 err = AECreateDesc (typeProcessSerialNumber, &psn, 678 err = AECreateDesc (typeProcessSerialNumber, &psn,
685 sizeof (ProcessSerialNumber), &address_desc); 679 sizeof (ProcessSerialNumber), &address_desc);
686 if (err == noErr) 680 if (err == noErr)
687 { 681 {
688 err = AECreateAppleEvent (0, 0, /* Dummy class and ID. */ 682 err = AECreateAppleEvent (class, id,
689 &address_desc, /* NULL is not allowed 683 &address_desc, /* NULL is not allowed
690 on Mac OS Classic. */ 684 on Mac OS Classic. */
691 kAutoGenerateReturnID, 685 kAutoGenerateReturnID,
692 kAnyTransactionID, result); 686 kAnyTransactionID, result);
693 AEDisposeDesc (&address_desc); 687 AEDisposeDesc (&address_desc);
694 } 688 }
689
690 return err;
691}
692
693OSErr
694create_apple_event_from_event_ref (event, num_params, names, types, result)
695 EventRef event;
696 UInt32 num_params;
697 EventParamName *names;
698 EventParamType *types;
699 AppleEvent *result;
700{
701 OSErr err;
702 UInt32 i, size;
703 CFStringRef string;
704 CFDataRef data;
705 char *buf = NULL;
706
707 err = create_apple_event (0, 0, result); /* Dummy class and ID. */
695 if (err != noErr) 708 if (err != noErr)
696 return err; 709 return err;
697 710
@@ -721,19 +734,88 @@ create_apple_event_from_event_ref (event, num_params, names, types, result)
721 0, &size, NULL); 734 0, &size, NULL);
722 if (err != noErr) 735 if (err != noErr)
723 break; 736 break;
724 buf = xmalloc (size); 737 buf = xrealloc (buf, size);
725 err = GetEventParameter (event, names[i], types[i], NULL, 738 err = GetEventParameter (event, names[i], types[i], NULL,
726 size, NULL, buf); 739 size, NULL, buf);
727 if (err == noErr) 740 if (err == noErr)
728 AEPutParamPtr (result, names[i], types[i], buf, size); 741 AEPutParamPtr (result, names[i], types[i], buf, size);
729 xfree (buf);
730 break; 742 break;
731 } 743 }
744 if (buf)
745 xfree (buf);
732 746
733 return noErr; 747 return noErr;
734} 748}
735#endif
736 749
750OSErr
751create_apple_event_from_drag_ref (drag, num_types, types, result)
752 DragRef drag;
753 UInt32 num_types;
754 FlavorType *types;
755 AppleEvent *result;
756{
757 OSErr err;
758 UInt16 num_items;
759 AppleEvent items;
760 long index;
761 char *buf = NULL;
762
763 err = CountDragItems (drag, &num_items);
764 if (err != noErr)
765 return err;
766 err = AECreateList (NULL, 0, false, &items);
767 if (err != noErr)
768 return err;
769
770 for (index = 1; index <= num_items; index++)
771 {
772 ItemReference item;
773 DescType desc_type = typeNull;
774 Size size;
775
776 err = GetDragItemReferenceNumber (drag, index, &item);
777 if (err == noErr)
778 {
779 int i;
780
781 for (i = 0; i < num_types; i++)
782 {
783 err = GetFlavorDataSize (drag, item, types[i], &size);
784 if (err == noErr)
785 {
786 buf = xrealloc (buf, size);
787 err = GetFlavorData (drag, item, types[i], buf, &size, 0);
788 }
789 if (err == noErr)
790 {
791 desc_type = types[i];
792 break;
793 }
794 }
795 }
796 err = AEPutPtr (&items, index, desc_type,
797 desc_type != typeNull ? buf : NULL,
798 desc_type != typeNull ? size : 0);
799 if (err != noErr)
800 break;
801 }
802 if (buf)
803 xfree (buf);
804
805 if (err == noErr)
806 {
807 err = create_apple_event (0, 0, result); /* Dummy class and ID. */
808 if (err == noErr)
809 err = AEPutParamDesc (result, keyDirectObject, &items);
810 if (err != noErr)
811 AEDisposeDesc (result);
812 }
813
814 AEDisposeDesc (&items);
815
816 return err;
817}
818#endif /* TARGET_API_MAC_CARBON */
737 819
738/*********************************************************************** 820/***********************************************************************
739 Conversion between Lisp and Core Foundation objects 821 Conversion between Lisp and Core Foundation objects
@@ -4686,16 +4768,6 @@ On successful conversion, return the result string, else return nil. */)
4686#endif /* TARGET_API_MAC_CARBON */ 4768#endif /* TARGET_API_MAC_CARBON */
4687 4769
4688 4770
4689DEFUN ("mac-clear-font-name-table", Fmac_clear_font_name_table, Smac_clear_font_name_table, 0, 0, 0,
4690 doc: /* Clear the font name table. */)
4691 ()
4692{
4693 check_mac ();
4694 mac_clear_font_name_table ();
4695 return Qnil;
4696}
4697
4698
4699static Lisp_Object 4771static Lisp_Object
4700mac_get_system_locale () 4772mac_get_system_locale ()
4701{ 4773{
@@ -5167,7 +5239,6 @@ syms_of_mac ()
5167 defsubr (&Smac_get_preference); 5239 defsubr (&Smac_get_preference);
5168 defsubr (&Smac_code_convert_string); 5240 defsubr (&Smac_code_convert_string);
5169#endif 5241#endif
5170 defsubr (&Smac_clear_font_name_table);
5171 5242
5172 defsubr (&Smac_set_file_creator); 5243 defsubr (&Smac_set_file_creator);
5173 defsubr (&Smac_set_file_type); 5244 defsubr (&Smac_set_file_type);