Mercurial > emacs
comparison src/macselect.c @ 67457:819dc1a5c256
Include keymap.h.
(mac_ready_for_apple_events): New variable.
(Vmac_apple_event_map, Qmac_apple_event_class)
(Qmac_apple_event_id): New variables.
(syms_of_macselect): Initialize them.
(Qundefined, mac_store_apple_event): Add externs.
(struct apple_event_binding): New struct.
(find_event_binding_fun, find_event_binding)
(mac_find_apple_event_spec, defer_apple_events)
(mac_handle_apple_event, init_apple_event_handler)
(copy_scrap_flavor_data): New functions.
(Fmac_process_deferred_apple_events): New defun.
(syms_of_macselect): Defsubr it.
(mac_store_services_event): Fix extern.
(mac_handle_service_event): Don't allocate Lisp objects during
asynchronous input processing. Use mac_store_services_event
instead of mac_store_application_menu_event.
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Sat, 10 Dec 2005 01:49:44 +0000 |
parents | fefea1491def |
children | e9ee2ee1d26e |
comparison
equal
deleted
inserted
replaced
67456:2efa50cbb7cd | 67457:819dc1a5c256 |
---|---|
21 #include <config.h> | 21 #include <config.h> |
22 | 22 |
23 #include "lisp.h" | 23 #include "lisp.h" |
24 #include "macterm.h" | 24 #include "macterm.h" |
25 #include "blockinput.h" | 25 #include "blockinput.h" |
26 #include "keymap.h" | |
26 | 27 |
27 #if !TARGET_API_MAC_CARBON | 28 #if !TARGET_API_MAC_CARBON |
28 #include <Endian.h> | 29 #include <Endian.h> |
29 typedef int ScrapRef; | 30 typedef int ScrapRef; |
30 typedef ResType ScrapFlavorType; | 31 typedef ResType ScrapFlavorType; |
906 | 907 |
907 return result; | 908 return result; |
908 } | 909 } |
909 | 910 |
910 | 911 |
912 int mac_ready_for_apple_events = 0; | |
913 static Lisp_Object Vmac_apple_event_map; | |
914 static Lisp_Object Qmac_apple_event_class, Qmac_apple_event_id; | |
915 static struct | |
916 { | |
917 AppleEvent *buf; | |
918 int size, count; | |
919 } deferred_apple_events; | |
920 extern Lisp_Object Qundefined; | |
921 extern OSErr mac_store_apple_event P_ ((Lisp_Object, Lisp_Object, | |
922 const AEDesc *)); | |
923 | |
924 struct apple_event_binding | |
925 { | |
926 UInt32 code; /* Apple event class or ID. */ | |
927 Lisp_Object key, binding; | |
928 }; | |
929 | |
930 static void | |
931 find_event_binding_fun (key, binding, args, data) | |
932 Lisp_Object key, binding, args; | |
933 void *data; | |
934 { | |
935 struct apple_event_binding *event_binding = | |
936 (struct apple_event_binding *)data; | |
937 Lisp_Object code_string; | |
938 | |
939 if (!SYMBOLP (key)) | |
940 return; | |
941 code_string = Fget (key, args); | |
942 if (STRINGP (code_string) && SBYTES (code_string) == 4 | |
943 && (EndianU32_BtoN (*((UInt32 *) SDATA (code_string))) | |
944 == event_binding->code)) | |
945 { | |
946 event_binding->key = key; | |
947 event_binding->binding = binding; | |
948 } | |
949 } | |
950 | |
951 static void | |
952 find_event_binding (keymap, event_binding, class_p) | |
953 Lisp_Object keymap; | |
954 struct apple_event_binding *event_binding; | |
955 int class_p; | |
956 { | |
957 if (event_binding->code == 0) | |
958 event_binding->binding = | |
959 access_keymap (keymap, event_binding->key, 0, 1, 0); | |
960 else | |
961 { | |
962 event_binding->binding = Qnil; | |
963 map_keymap (keymap, find_event_binding_fun, | |
964 class_p ? Qmac_apple_event_class : Qmac_apple_event_id, | |
965 event_binding, 0); | |
966 } | |
967 } | |
968 | |
969 void | |
970 mac_find_apple_event_spec (class, id, class_key, id_key, binding) | |
971 AEEventClass class; | |
972 AEEventID id; | |
973 Lisp_Object *class_key, *id_key, *binding; | |
974 { | |
975 struct apple_event_binding event_binding; | |
976 Lisp_Object keymap; | |
977 | |
978 *binding = Qnil; | |
979 | |
980 keymap = get_keymap (Vmac_apple_event_map, 0, 0); | |
981 if (NILP (keymap)) | |
982 return; | |
983 | |
984 event_binding.code = class; | |
985 event_binding.key = *class_key; | |
986 event_binding.binding = Qnil; | |
987 find_event_binding (keymap, &event_binding, 1); | |
988 *class_key = event_binding.key; | |
989 keymap = get_keymap (event_binding.binding, 0, 0); | |
990 if (NILP (keymap)) | |
991 return; | |
992 | |
993 event_binding.code = id; | |
994 event_binding.key = *id_key; | |
995 event_binding.binding = Qnil; | |
996 find_event_binding (keymap, &event_binding, 0); | |
997 *id_key = event_binding.key; | |
998 *binding = event_binding.binding; | |
999 } | |
1000 | |
1001 static OSErr | |
1002 defer_apple_events (apple_event, reply) | |
1003 const AppleEvent *apple_event, *reply; | |
1004 { | |
1005 OSErr err; | |
1006 | |
1007 err = AESuspendTheCurrentEvent (apple_event); | |
1008 | |
1009 /* Mac OS 10.3 Xcode manual says AESuspendTheCurrentEvent makes | |
1010 copies of the Apple event and the reply, but Mac OS 10.4 Xcode | |
1011 manual says it doesn't. Anyway we create copies of them and save | |
1012 it in `deferred_apple_events'. */ | |
1013 if (err == noErr) | |
1014 { | |
1015 if (deferred_apple_events.buf == NULL) | |
1016 { | |
1017 deferred_apple_events.size = 16; | |
1018 deferred_apple_events.count = 0; | |
1019 deferred_apple_events.buf = | |
1020 xmalloc (sizeof (AppleEvent) * deferred_apple_events.size); | |
1021 if (deferred_apple_events.buf == NULL) | |
1022 err = memFullErr; | |
1023 } | |
1024 else if (deferred_apple_events.count == deferred_apple_events.size) | |
1025 { | |
1026 AppleEvent *newbuf; | |
1027 | |
1028 deferred_apple_events.size *= 2; | |
1029 newbuf = xrealloc (deferred_apple_events.buf, | |
1030 sizeof (AppleEvent) * deferred_apple_events.size); | |
1031 if (newbuf) | |
1032 deferred_apple_events.buf = newbuf; | |
1033 else | |
1034 err = memFullErr; | |
1035 } | |
1036 } | |
1037 | |
1038 if (err == noErr) | |
1039 { | |
1040 int count = deferred_apple_events.count; | |
1041 | |
1042 AEDuplicateDesc (apple_event, deferred_apple_events.buf + count); | |
1043 AEDuplicateDesc (reply, deferred_apple_events.buf + count + 1); | |
1044 deferred_apple_events.count += 2; | |
1045 } | |
1046 | |
1047 return err; | |
1048 } | |
1049 | |
1050 static pascal OSErr | |
1051 mac_handle_apple_event (apple_event, reply, refcon) | |
1052 const AppleEvent *apple_event; | |
1053 AppleEvent *reply; | |
1054 SInt32 refcon; | |
1055 { | |
1056 OSErr err; | |
1057 AEEventClass event_class; | |
1058 AEEventID event_id; | |
1059 Lisp_Object class_key, id_key, binding; | |
1060 | |
1061 /* We can't handle an Apple event that requests a reply, but this | |
1062 seems to be too restrictive. */ | |
1063 #if 0 | |
1064 if (reply->descriptorType != typeNull) | |
1065 return errAEEventNotHandled; | |
1066 #endif | |
1067 | |
1068 if (!mac_ready_for_apple_events) | |
1069 { | |
1070 err = defer_apple_events (apple_event, reply); | |
1071 if (err != noErr) | |
1072 return errAEEventNotHandled; | |
1073 return noErr; | |
1074 } | |
1075 | |
1076 err = AEGetAttributePtr (apple_event, keyEventClassAttr, typeType, NULL, | |
1077 &event_class, sizeof (AEEventClass), NULL); | |
1078 if (err == noErr) | |
1079 err = AEGetAttributePtr (apple_event, keyEventIDAttr, typeType, NULL, | |
1080 &event_id, sizeof (AEEventID), NULL); | |
1081 if (err == noErr) | |
1082 { | |
1083 mac_find_apple_event_spec (event_class, event_id, | |
1084 &class_key, &id_key, &binding); | |
1085 if (!NILP (binding) && !EQ (binding, Qundefined)) | |
1086 { | |
1087 if (INTEGERP (binding)) | |
1088 return XINT (binding); | |
1089 err = mac_store_apple_event (class_key, id_key, apple_event); | |
1090 if (err == noErr) | |
1091 return noErr; | |
1092 } | |
1093 } | |
1094 return errAEEventNotHandled; | |
1095 } | |
1096 | |
1097 void | |
1098 init_apple_event_handler () | |
1099 { | |
1100 OSErr err; | |
1101 long result; | |
1102 | |
1103 /* Make sure we have Apple events before starting. */ | |
1104 err = Gestalt (gestaltAppleEventsAttr, &result); | |
1105 if (err != noErr) | |
1106 abort (); | |
1107 | |
1108 if (!(result & (1 << gestaltAppleEventsPresent))) | |
1109 abort (); | |
1110 | |
1111 err = AEInstallEventHandler (typeWildCard, typeWildCard, | |
1112 #if TARGET_API_MAC_CARBON | |
1113 NewAEEventHandlerUPP (mac_handle_apple_event), | |
1114 #else | |
1115 NewAEEventHandlerProc (mac_handle_apple_event), | |
1116 #endif | |
1117 0L, false); | |
1118 if (err != noErr) | |
1119 abort (); | |
1120 } | |
1121 | |
1122 DEFUN ("mac-process-deferred-apple-events", Fmac_process_deferred_apple_events, Smac_process_deferred_apple_events, 0, 0, 0, | |
1123 doc: /* Process Apple events that are deferred at the startup time. */) | |
1124 () | |
1125 { | |
1126 OSErr err; | |
1127 Lisp_Object result = Qnil; | |
1128 long i, count; | |
1129 AppleEvent apple_event, reply; | |
1130 AEKeyword keyword; | |
1131 | |
1132 if (mac_ready_for_apple_events) | |
1133 return Qnil; | |
1134 | |
1135 BLOCK_INPUT; | |
1136 mac_ready_for_apple_events = 1; | |
1137 if (deferred_apple_events.buf) | |
1138 { | |
1139 for (i = 0; i < deferred_apple_events.count; i += 2) | |
1140 { | |
1141 AEResumeTheCurrentEvent (deferred_apple_events.buf + i, | |
1142 deferred_apple_events.buf + i + 1, | |
1143 ((AEEventHandlerUPP) | |
1144 kAEUseStandardDispatch), 0); | |
1145 AEDisposeDesc (deferred_apple_events.buf + i); | |
1146 AEDisposeDesc (deferred_apple_events.buf + i + 1); | |
1147 } | |
1148 xfree (deferred_apple_events.buf); | |
1149 bzero (&deferred_apple_events, sizeof (deferred_apple_events)); | |
1150 | |
1151 result = Qt; | |
1152 } | |
1153 UNBLOCK_INPUT; | |
1154 | |
1155 return result; | |
1156 } | |
1157 | |
1158 | |
911 #ifdef MAC_OSX | 1159 #ifdef MAC_OSX |
912 void | 1160 void |
913 init_service_handler () | 1161 init_service_handler () |
914 { | 1162 { |
915 EventTypeSpec specs[] = {{kEventClassService, kEventServiceGetTypes}, | 1163 EventTypeSpec specs[] = {{kEventClassService, kEventServiceGetTypes}, |
918 {kEventClassService, kEventServicePerform}}; | 1166 {kEventClassService, kEventServicePerform}}; |
919 InstallApplicationEventHandler (NewEventHandlerUPP (mac_handle_service_event), | 1167 InstallApplicationEventHandler (NewEventHandlerUPP (mac_handle_service_event), |
920 GetEventTypeCount (specs), specs, NULL, NULL); | 1168 GetEventTypeCount (specs), specs, NULL, NULL); |
921 } | 1169 } |
922 | 1170 |
923 extern void mac_store_services_event P_ ((EventRef)); | 1171 extern OSErr mac_store_services_event P_ ((EventRef)); |
1172 | |
1173 static OSStatus | |
1174 copy_scrap_flavor_data (from_scrap, to_scrap, flavor_type) | |
1175 ScrapRef from_scrap, to_scrap; | |
1176 ScrapFlavorType flavor_type; | |
1177 { | |
1178 OSStatus err; | |
1179 Size size, size_allocated; | |
1180 char *buf = NULL; | |
1181 | |
1182 err = GetScrapFlavorSize (from_scrap, flavor_type, &size); | |
1183 if (err == noErr) | |
1184 buf = xmalloc (size); | |
1185 while (buf) | |
1186 { | |
1187 size_allocated = size; | |
1188 err = GetScrapFlavorData (from_scrap, flavor_type, &size, buf); | |
1189 if (err != noErr) | |
1190 { | |
1191 xfree (buf); | |
1192 buf = NULL; | |
1193 } | |
1194 else if (size_allocated < size) | |
1195 { | |
1196 char *newbuf = xrealloc (buf, size); | |
1197 | |
1198 if (newbuf) | |
1199 buf = newbuf; | |
1200 else | |
1201 { | |
1202 xfree (buf); | |
1203 buf = NULL; | |
1204 } | |
1205 } | |
1206 else | |
1207 break; | |
1208 } | |
1209 if (err == noErr) | |
1210 if (buf == NULL) | |
1211 err = memFullErr; | |
1212 else | |
1213 { | |
1214 err = PutScrapFlavor (to_scrap, flavor_type, kScrapFlavorMaskNone, | |
1215 size, buf); | |
1216 xfree (buf); | |
1217 } | |
1218 | |
1219 return err; | |
1220 } | |
924 | 1221 |
925 static OSStatus | 1222 static OSStatus |
926 mac_handle_service_event (call_ref, event, data) | 1223 mac_handle_service_event (call_ref, event, data) |
927 EventHandlerCallRef call_ref; | 1224 EventHandlerCallRef call_ref; |
928 EventRef event; | 1225 EventRef event; |
929 void *data; | 1226 void *data; |
930 { | 1227 { |
931 OSStatus err = noErr; | 1228 OSStatus err = noErr; |
932 ScrapRef cur_scrap; | 1229 ScrapRef cur_scrap, specific_scrap; |
1230 UInt32 event_kind = GetEventKind (event); | |
1231 CFMutableArrayRef copy_types, paste_types; | |
1232 CFStringRef type; | |
1233 Lisp_Object rest; | |
1234 ScrapFlavorType flavor_type; | |
933 | 1235 |
934 /* Check if Vmac_services_selection is a valid selection that has a | 1236 /* Check if Vmac_services_selection is a valid selection that has a |
935 corresponding scrap. */ | 1237 corresponding scrap. */ |
936 if (!SYMBOLP (Vmac_services_selection)) | 1238 if (!SYMBOLP (Vmac_services_selection)) |
937 err = eventNotHandledErr; | 1239 err = eventNotHandledErr; |
938 else | 1240 else |
939 err = get_scrap_from_symbol (Vmac_services_selection, 0, &cur_scrap); | 1241 err = get_scrap_from_symbol (Vmac_services_selection, 0, &cur_scrap); |
940 if (!(err == noErr && cur_scrap)) | 1242 if (!(err == noErr && cur_scrap)) |
941 return eventNotHandledErr; | 1243 return eventNotHandledErr; |
942 | 1244 |
943 switch (GetEventKind (event)) | 1245 switch (event_kind) |
944 { | 1246 { |
945 case kEventServiceGetTypes: | 1247 case kEventServiceGetTypes: |
1248 /* Set paste types. */ | |
1249 err = GetEventParameter (event, kEventParamServicePasteTypes, | |
1250 typeCFMutableArrayRef, NULL, | |
1251 sizeof (CFMutableArrayRef), NULL, | |
1252 &paste_types); | |
1253 if (err != noErr) | |
1254 break; | |
1255 | |
1256 for (rest = Vselection_converter_alist; CONSP (rest); | |
1257 rest = XCDR (rest)) | |
1258 if (CONSP (XCAR (rest)) && SYMBOLP (XCAR (XCAR (rest))) | |
1259 && (flavor_type = | |
1260 get_flavor_type_from_symbol (XCAR (XCAR (rest))))) | |
1261 { | |
1262 type = CreateTypeStringWithOSType (flavor_type); | |
1263 if (type) | |
1264 { | |
1265 CFArrayAppendValue (paste_types, type); | |
1266 CFRelease (type); | |
1267 } | |
1268 } | |
1269 | |
1270 /* Set copy types. */ | |
1271 err = GetEventParameter (event, kEventParamServiceCopyTypes, | |
1272 typeCFMutableArrayRef, NULL, | |
1273 sizeof (CFMutableArrayRef), NULL, | |
1274 ©_types); | |
1275 if (err != noErr) | |
1276 break; | |
1277 | |
1278 if (NILP (Fx_selection_owner_p (Vmac_services_selection))) | |
1279 break; | |
1280 else | |
1281 goto copy_all_flavors; | |
1282 | |
1283 case kEventServiceCopy: | |
1284 err = GetEventParameter (event, kEventParamScrapRef, | |
1285 typeScrapRef, NULL, | |
1286 sizeof (ScrapRef), NULL, &specific_scrap); | |
1287 if (err != noErr | |
1288 || NILP (Fx_selection_owner_p (Vmac_services_selection))) | |
1289 { | |
1290 err = eventNotHandledErr; | |
1291 break; | |
1292 } | |
1293 | |
1294 copy_all_flavors: | |
946 { | 1295 { |
947 CFMutableArrayRef copy_types, paste_types; | 1296 UInt32 count, i; |
948 CFStringRef type; | 1297 ScrapFlavorInfo *flavor_info = NULL; |
949 Lisp_Object rest; | 1298 ScrapFlavorFlags flags; |
950 ScrapFlavorType flavor_type; | 1299 |
951 | 1300 err = GetScrapFlavorCount (cur_scrap, &count); |
952 /* Set paste types. */ | |
953 err = GetEventParameter (event, kEventParamServicePasteTypes, | |
954 typeCFMutableArrayRef, NULL, | |
955 sizeof (CFMutableArrayRef), NULL, | |
956 &paste_types); | |
957 if (err == noErr) | 1301 if (err == noErr) |
958 for (rest = Vselection_converter_alist; CONSP (rest); | 1302 flavor_info = xmalloc (sizeof (ScrapFlavorInfo) * count); |
959 rest = XCDR (rest)) | 1303 if (flavor_info) |
960 if (CONSP (XCAR (rest)) && SYMBOLP (XCAR (XCAR (rest))) | 1304 { |
961 && (flavor_type = | 1305 err = GetScrapFlavorInfoList (cur_scrap, &count, flavor_info); |
962 get_flavor_type_from_symbol (XCAR (XCAR (rest))))) | 1306 if (err != noErr) |
963 { | 1307 { |
964 type = CreateTypeStringWithOSType (flavor_type); | 1308 xfree (flavor_info); |
965 if (type) | 1309 flavor_info = NULL; |
1310 } | |
1311 } | |
1312 if (flavor_info == NULL) | |
1313 break; | |
1314 | |
1315 for (i = 0; i < count; i++) | |
1316 { | |
1317 flavor_type = flavor_info[i].flavorType; | |
1318 err = GetScrapFlavorFlags (cur_scrap, flavor_type, &flags); | |
1319 if (err == noErr && !(flags & kScrapFlavorMaskSenderOnly)) | |
1320 { | |
1321 if (event_kind == kEventServiceCopy) | |
1322 err = copy_scrap_flavor_data (cur_scrap, specific_scrap, | |
1323 flavor_type); | |
1324 else /* event_kind == kEventServiceGetTypes */ | |
966 { | 1325 { |
967 CFArrayAppendValue (paste_types, type); | 1326 type = CreateTypeStringWithOSType (flavor_type); |
968 CFRelease (type); | 1327 if (type) |
1328 { | |
1329 CFArrayAppendValue (copy_types, type); | |
1330 CFRelease (type); | |
1331 } | |
969 } | 1332 } |
970 } | 1333 } |
971 | 1334 } |
972 /* Set copy types. */ | 1335 xfree (flavor_info); |
973 err = GetEventParameter (event, kEventParamServiceCopyTypes, | |
974 typeCFMutableArrayRef, NULL, | |
975 sizeof (CFMutableArrayRef), NULL, | |
976 ©_types); | |
977 if (err == noErr | |
978 && !NILP (Fx_selection_owner_p (Vmac_services_selection))) | |
979 for (rest = get_scrap_target_type_list (cur_scrap); | |
980 CONSP (rest) && SYMBOLP (XCAR (rest)); rest = XCDR (rest)) | |
981 { | |
982 flavor_type = get_flavor_type_from_symbol (XCAR (rest)); | |
983 if (flavor_type) | |
984 { | |
985 type = CreateTypeStringWithOSType (flavor_type); | |
986 if (type) | |
987 { | |
988 CFArrayAppendValue (copy_types, type); | |
989 CFRelease (type); | |
990 } | |
991 } | |
992 } | |
993 } | |
994 break; | |
995 | |
996 case kEventServiceCopy: | |
997 { | |
998 ScrapRef specific_scrap; | |
999 Lisp_Object rest, data; | |
1000 | |
1001 err = GetEventParameter (event, kEventParamScrapRef, | |
1002 typeScrapRef, NULL, | |
1003 sizeof (ScrapRef), NULL, &specific_scrap); | |
1004 if (err == noErr | |
1005 && !NILP (Fx_selection_owner_p (Vmac_services_selection))) | |
1006 for (rest = get_scrap_target_type_list (cur_scrap); | |
1007 CONSP (rest) && SYMBOLP (XCAR (rest)); rest = XCDR (rest)) | |
1008 { | |
1009 data = get_scrap_string (cur_scrap, XCAR (rest)); | |
1010 if (STRINGP (data)) | |
1011 err = put_scrap_string (specific_scrap, XCAR (rest), data); | |
1012 } | |
1013 else | |
1014 err = eventNotHandledErr; | |
1015 } | 1336 } |
1016 break; | 1337 break; |
1017 | 1338 |
1018 case kEventServicePaste: | 1339 case kEventServicePaste: |
1019 case kEventServicePerform: | 1340 case kEventServicePerform: |
1020 { | 1341 { |
1021 ScrapRef specific_scrap; | |
1022 Lisp_Object rest, data; | |
1023 int data_exists_p = 0; | 1342 int data_exists_p = 0; |
1024 | 1343 |
1025 err = GetEventParameter (event, kEventParamScrapRef, typeScrapRef, | 1344 err = GetEventParameter (event, kEventParamScrapRef, typeScrapRef, |
1026 NULL, sizeof (ScrapRef), NULL, | 1345 NULL, sizeof (ScrapRef), NULL, |
1027 &specific_scrap); | 1346 &specific_scrap); |
1031 for (rest = Vselection_converter_alist; CONSP (rest); | 1350 for (rest = Vselection_converter_alist; CONSP (rest); |
1032 rest = XCDR (rest)) | 1351 rest = XCDR (rest)) |
1033 { | 1352 { |
1034 if (! (CONSP (XCAR (rest)) && SYMBOLP (XCAR (XCAR (rest))))) | 1353 if (! (CONSP (XCAR (rest)) && SYMBOLP (XCAR (XCAR (rest))))) |
1035 continue; | 1354 continue; |
1036 data = get_scrap_string (specific_scrap, XCAR (XCAR (rest))); | 1355 flavor_type = get_flavor_type_from_symbol (XCAR (XCAR (rest))); |
1037 if (STRINGP (data)) | 1356 if (flavor_type == 0) |
1038 { | 1357 continue; |
1039 err = put_scrap_string (cur_scrap, XCAR (XCAR (rest)), | 1358 err = copy_scrap_flavor_data (specific_scrap, cur_scrap, |
1040 data); | 1359 flavor_type); |
1041 if (err != noErr) | 1360 if (err == noErr) |
1042 break; | 1361 data_exists_p = 1; |
1043 data_exists_p = 1; | |
1044 } | |
1045 } | 1362 } |
1046 if (err == noErr) | 1363 if (!data_exists_p) |
1047 if (data_exists_p) | 1364 err = eventNotHandledErr; |
1048 mac_store_application_menu_event (event); | 1365 else |
1049 else | 1366 err = mac_store_services_event (event); |
1050 err = eventNotHandledErr; | |
1051 } | 1367 } |
1052 break; | 1368 break; |
1053 } | 1369 } |
1054 | 1370 |
1371 if (err != noErr) | |
1372 err = eventNotHandledErr; | |
1055 return err; | 1373 return err; |
1056 } | 1374 } |
1057 #endif | 1375 #endif |
1058 | 1376 |
1059 | 1377 |
1063 defsubr (&Sx_get_selection_internal); | 1381 defsubr (&Sx_get_selection_internal); |
1064 defsubr (&Sx_own_selection_internal); | 1382 defsubr (&Sx_own_selection_internal); |
1065 defsubr (&Sx_disown_selection_internal); | 1383 defsubr (&Sx_disown_selection_internal); |
1066 defsubr (&Sx_selection_owner_p); | 1384 defsubr (&Sx_selection_owner_p); |
1067 defsubr (&Sx_selection_exists_p); | 1385 defsubr (&Sx_selection_exists_p); |
1386 defsubr (&Smac_process_deferred_apple_events); | |
1068 | 1387 |
1069 Vselection_alist = Qnil; | 1388 Vselection_alist = Qnil; |
1070 staticpro (&Vselection_alist); | 1389 staticpro (&Vselection_alist); |
1071 | 1390 |
1072 DEFVAR_LISP ("selection-converter-alist", &Vselection_converter_alist, | 1391 DEFVAR_LISP ("selection-converter-alist", &Vselection_converter_alist, |
1104 other programs. But, if this variable is set, it is used for the | 1423 other programs. But, if this variable is set, it is used for the |
1105 next communication only. After the communication, this variable is | 1424 next communication only. After the communication, this variable is |
1106 set to nil. */); | 1425 set to nil. */); |
1107 Vnext_selection_coding_system = Qnil; | 1426 Vnext_selection_coding_system = Qnil; |
1108 | 1427 |
1428 DEFVAR_LISP ("mac-apple-event-map", &Vmac_apple_event_map, | |
1429 doc: /* Keymap for Apple events handled by Emacs. */); | |
1430 Vmac_apple_event_map = Fmake_sparse_keymap (Qnil); | |
1431 | |
1109 #ifdef MAC_OSX | 1432 #ifdef MAC_OSX |
1110 DEFVAR_LISP ("mac-services-selection", &Vmac_services_selection, | 1433 DEFVAR_LISP ("mac-services-selection", &Vmac_services_selection, |
1111 doc: /* Selection name for communication via Services menu. */); | 1434 doc: /* Selection name for communication via Services menu. */); |
1112 Vmac_services_selection = intern ("PRIMARY"); | 1435 Vmac_services_selection = intern ("PRIMARY"); |
1113 #endif | 1436 #endif |
1123 Qmac_scrap_name = intern ("mac-scrap-name"); | 1446 Qmac_scrap_name = intern ("mac-scrap-name"); |
1124 staticpro (&Qmac_scrap_name); | 1447 staticpro (&Qmac_scrap_name); |
1125 | 1448 |
1126 Qmac_ostype = intern ("mac-ostype"); | 1449 Qmac_ostype = intern ("mac-ostype"); |
1127 staticpro (&Qmac_ostype); | 1450 staticpro (&Qmac_ostype); |
1451 | |
1452 Qmac_apple_event_class = intern ("mac-apple-event-class"); | |
1453 staticpro (&Qmac_apple_event_class); | |
1454 | |
1455 Qmac_apple_event_id = intern ("mac-apple-event-id"); | |
1456 staticpro (&Qmac_apple_event_id); | |
1128 } | 1457 } |
1129 | 1458 |
1130 /* arch-tag: f3c91ad8-99e0-4bd6-9eef-251b2f848732 | 1459 /* arch-tag: f3c91ad8-99e0-4bd6-9eef-251b2f848732 |
1131 (do not change this comment) */ | 1460 (do not change this comment) */ |