diff options
| author | YAMAMOTO Mitsuharu | 2006-05-07 08:07:13 +0000 |
|---|---|---|
| committer | YAMAMOTO Mitsuharu | 2006-05-07 08:07:13 +0000 |
| commit | 68c767a32da050ab672162669b2b68ad30d16f5d (patch) | |
| tree | f2b43e37edac1b008e52a6b0ae1eed393a884b2f | |
| parent | a6d7a7754dbf5bff35cabab2d8c73241098a3a87 (diff) | |
| download | emacs-68c767a32da050ab672162669b2b68ad30d16f5d.tar.gz emacs-68c767a32da050ab672162669b2b68ad30d16f5d.zip | |
(XLoadQueryFont) [USE_ATSUI]: Set FMFontFamily value
to font->mac_fontnum.
[USE_MAC_FONT_PANEL] (mac_set_font_info_for_selection): New function.
(x_new_focus_frame) [USE_MAC_FONT_PANEL]: Use it.
(QCfamily, QCweight, QCslant, Qnormal, Qbold, Qitalic): Add extern.
(QWindow) [MAC_OSX]: Likewise.
(Qfont) [USE_MAC_FONT_PANEL]: Likewise.
(Vmac_atsu_font_table) [USE_ATSUI]: New variable.
(syms_of_macterm) [USE_ATSUI]: Defvar it.
(Qtoolbar_switch_mode) [MAC_OSX]: New variable.
(Qpanel_closed, Qselection) [USE_MAC_FONT_PANEL]: Likewise.
(syms_of_macterm): Intern and staticpro them.
(init_font_name_table) [USE_ATSUI]: Set data to Vmac_atsu_font_table.
[TARGET_API_MAC_CARBON] (mac_store_event_ref_as_apple_event): New
function.
[USE_CARBON_EVENTS] (mac_handle_command_event): Use it.
[MAC_OSX] (mac_store_services_event): Likewise.
[USE_CARBON_EVENTS] (mac_handle_window_event) [MAC_OSX]: Handle
kEventWindowToolbarSwitchMode event.
(install_window_handler) [USE_CARBON_EVENTS && MAC_OSX]: Register it.
[MAC_OSX] (mac_store_services_event): Change return type to OSStatus.
[USE_MAC_FONT_PANEL] (mac_handle_font_event): New function.
(install_window_handler) [USE_MAC_FONT_PANEL]: Install it.
(XTread_socket): Select window on mouse click if x_focus_frame is NULL.
| -rw-r--r-- | src/macterm.c | 342 |
1 files changed, 272 insertions, 70 deletions
diff --git a/src/macterm.c b/src/macterm.c index 535d433bb37..5382f7f3160 100644 --- a/src/macterm.c +++ b/src/macterm.c | |||
| @@ -4097,6 +4097,11 @@ x_new_focus_frame (dpyinfo, frame) | |||
| 4097 | pending_autoraise_frame = dpyinfo->x_focus_frame; | 4097 | pending_autoraise_frame = dpyinfo->x_focus_frame; |
| 4098 | else | 4098 | else |
| 4099 | pending_autoraise_frame = 0; | 4099 | pending_autoraise_frame = 0; |
| 4100 | |||
| 4101 | #if USE_MAC_FONT_PANEL | ||
| 4102 | if (frame) | ||
| 4103 | mac_set_font_info_for_selection (frame); | ||
| 4104 | #endif | ||
| 4100 | } | 4105 | } |
| 4101 | 4106 | ||
| 4102 | x_frame_rehighlight (dpyinfo); | 4107 | x_frame_rehighlight (dpyinfo); |
| @@ -6867,6 +6872,8 @@ static Lisp_Object fm_font_family_alist; | |||
| 6867 | #if USE_ATSUI | 6872 | #if USE_ATSUI |
| 6868 | /* Hash table linking font family names to ATSU font IDs. */ | 6873 | /* Hash table linking font family names to ATSU font IDs. */ |
| 6869 | static Lisp_Object atsu_font_id_hash; | 6874 | static Lisp_Object atsu_font_id_hash; |
| 6875 | static Lisp_Object Vmac_atsu_font_table; | ||
| 6876 | extern Lisp_Object QCfamily, QCweight, QCslant, Qnormal, Qbold, Qitalic; | ||
| 6870 | #endif | 6877 | #endif |
| 6871 | 6878 | ||
| 6872 | /* Alist linking character set strings to Mac text encoding and Emacs | 6879 | /* Alist linking character set strings to Mac text encoding and Emacs |
| @@ -7162,8 +7169,21 @@ init_font_name_table () | |||
| 7162 | NULL, NULL); | 7169 | NULL, NULL); |
| 7163 | if (err == noErr) | 7170 | if (err == noErr) |
| 7164 | { | 7171 | { |
| 7172 | FMFontFamily ff; | ||
| 7173 | FMFontStyle style = normal; | ||
| 7174 | |||
| 7165 | decode_mac_font_name (name, name_len + 1, Qnil); | 7175 | decode_mac_font_name (name, name_len + 1, Qnil); |
| 7166 | family = make_unibyte_string (name, name_len); | 7176 | family = make_unibyte_string (name, name_len); |
| 7177 | FMGetFontFamilyInstanceFromFont (font_ids[i], &ff, &style); | ||
| 7178 | Fputhash (make_unibyte_string ((char *)(font_ids + i), | ||
| 7179 | sizeof (ATSUFontID)), | ||
| 7180 | Fcons (QCfamily, | ||
| 7181 | list5 (family, | ||
| 7182 | QCweight, | ||
| 7183 | style & bold ? Qbold : Qnormal, | ||
| 7184 | QCslant, | ||
| 7185 | style & italic ? Qitalic : Qnormal)), | ||
| 7186 | Vmac_atsu_font_table); | ||
| 7167 | if (*name != '.' | 7187 | if (*name != '.' |
| 7168 | && hash_lookup (h, family, &hash_code) < 0) | 7188 | && hash_lookup (h, family, &hash_code) < 0) |
| 7169 | { | 7189 | { |
| @@ -7709,6 +7729,7 @@ XLoadQueryFont (Display *dpy, char *fontname) | |||
| 7709 | ATSUFontFeatureSelector selectors[] = {kAllTypeFeaturesOffSelector, | 7729 | ATSUFontFeatureSelector selectors[] = {kAllTypeFeaturesOffSelector, |
| 7710 | kDecomposeDiacriticsSelector}; | 7730 | kDecomposeDiacriticsSelector}; |
| 7711 | Lisp_Object font_id_cons; | 7731 | Lisp_Object font_id_cons; |
| 7732 | FMFontStyle style; | ||
| 7712 | 7733 | ||
| 7713 | font_id_cons = Fgethash (make_unibyte_string (family, strlen (family)), | 7734 | font_id_cons = Fgethash (make_unibyte_string (family, strlen (family)), |
| 7714 | atsu_font_id_hash, Qnil); | 7735 | atsu_font_id_hash, Qnil); |
| @@ -7727,7 +7748,11 @@ XLoadQueryFont (Display *dpy, char *fontname) | |||
| 7727 | return NULL; | 7748 | return NULL; |
| 7728 | err = ATSUSetAttributes (mac_style, sizeof (tags) / sizeof (tags[0]), | 7749 | err = ATSUSetAttributes (mac_style, sizeof (tags) / sizeof (tags[0]), |
| 7729 | tags, sizes, values); | 7750 | tags, sizes, values); |
| 7730 | fontnum = -1; | 7751 | if (err != noErr) |
| 7752 | return NULL; | ||
| 7753 | err = FMGetFontFamilyInstanceFromFont (font_id, &fontnum, &style); | ||
| 7754 | if (err != noErr) | ||
| 7755 | fontnum = -1; | ||
| 7731 | scriptcode = kTextEncodingMacUnicode; | 7756 | scriptcode = kTextEncodingMacUnicode; |
| 7732 | } | 7757 | } |
| 7733 | else | 7758 | else |
| @@ -7787,22 +7812,20 @@ XLoadQueryFont (Display *dpy, char *fontname) | |||
| 7787 | pcm_init (font->bounds.rows[0], 0x100); | 7812 | pcm_init (font->bounds.rows[0], 0x100); |
| 7788 | 7813 | ||
| 7789 | #if USE_CG_TEXT_DRAWING | 7814 | #if USE_CG_TEXT_DRAWING |
| 7790 | { | 7815 | if (fontnum != -1) |
| 7791 | FMFontFamily font_family; | 7816 | { |
| 7792 | FMFontStyle style; | 7817 | FMFontStyle style; |
| 7793 | ATSFontRef ats_font; | 7818 | ATSFontRef ats_font; |
| 7794 | 7819 | ||
| 7795 | err = FMGetFontFamilyInstanceFromFont (font_id, &font_family, &style); | 7820 | err = FMGetFontFromFontFamilyInstance (fontnum, fontface, |
| 7796 | if (err == noErr) | ||
| 7797 | err = FMGetFontFromFontFamilyInstance (font_family, fontface, | ||
| 7798 | &font_id, &style); | 7821 | &font_id, &style); |
| 7799 | /* Use CG text drawing if italic/bold is not synthesized. */ | 7822 | /* Use CG text drawing if italic/bold is not synthesized. */ |
| 7800 | if (err == noErr && style == fontface) | 7823 | if (err == noErr && style == fontface) |
| 7801 | { | 7824 | { |
| 7802 | ats_font = FMGetATSFontRefFromFont (font_id); | 7825 | ats_font = FMGetATSFontRefFromFont (font_id); |
| 7803 | font->cg_font = CGFontCreateWithPlatformFont (&ats_font); | 7826 | font->cg_font = CGFontCreateWithPlatformFont (&ats_font); |
| 7804 | } | 7827 | } |
| 7805 | } | 7828 | } |
| 7806 | 7829 | ||
| 7807 | if (font->cg_font) | 7830 | if (font->cg_font) |
| 7808 | { | 7831 | { |
| @@ -8291,6 +8314,42 @@ x_find_ccl_program (fontp) | |||
| 8291 | } | 8314 | } |
| 8292 | } | 8315 | } |
| 8293 | 8316 | ||
| 8317 | #if USE_MAC_FONT_PANEL | ||
| 8318 | OSStatus | ||
| 8319 | mac_set_font_info_for_selection (f) | ||
| 8320 | struct frame *f; | ||
| 8321 | { | ||
| 8322 | OSStatus err; | ||
| 8323 | |||
| 8324 | if (f == NULL) | ||
| 8325 | err = SetFontInfoForSelection (kFontSelectionATSUIType, 0, NULL, NULL); | ||
| 8326 | else | ||
| 8327 | { | ||
| 8328 | struct face *default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); | ||
| 8329 | XFontStruct *ascii_font = default_face->ascii_face->font; | ||
| 8330 | EventTargetRef target = GetWindowEventTarget (FRAME_MAC_WINDOW (f)); | ||
| 8331 | |||
| 8332 | if (ascii_font->mac_fontnum != -1) | ||
| 8333 | { | ||
| 8334 | FontSelectionQDStyle qd_style; | ||
| 8335 | |||
| 8336 | qd_style.version = kFontSelectionQDStyleVersionZero; | ||
| 8337 | qd_style.instance.fontFamily = ascii_font->mac_fontnum; | ||
| 8338 | qd_style.instance.fontStyle = ascii_font->mac_fontface; | ||
| 8339 | qd_style.size = ascii_font->mac_fontsize; | ||
| 8340 | qd_style.hasColor = false; | ||
| 8341 | |||
| 8342 | err = SetFontInfoForSelection (kFontSelectionQDType, | ||
| 8343 | 1, &qd_style, target); | ||
| 8344 | } | ||
| 8345 | else | ||
| 8346 | err = SetFontInfoForSelection (kFontSelectionATSUIType, | ||
| 8347 | 1, &ascii_font->mac_style, target); | ||
| 8348 | } | ||
| 8349 | |||
| 8350 | return err; | ||
| 8351 | } | ||
| 8352 | #endif | ||
| 8294 | 8353 | ||
| 8295 | 8354 | ||
| 8296 | /* The Mac Event loop code */ | 8355 | /* The Mac Event loop code */ |
| @@ -8378,6 +8437,14 @@ Point saved_menu_event_location; | |||
| 8378 | /* Apple Events */ | 8437 | /* Apple Events */ |
| 8379 | #if USE_CARBON_EVENTS | 8438 | #if USE_CARBON_EVENTS |
| 8380 | static Lisp_Object Qhicommand; | 8439 | static Lisp_Object Qhicommand; |
| 8440 | #ifdef MAC_OSX | ||
| 8441 | extern Lisp_Object Qwindow; | ||
| 8442 | static Lisp_Object Qtoolbar_switch_mode; | ||
| 8443 | #endif | ||
| 8444 | #if USE_MAC_FONT_PANEL | ||
| 8445 | extern Lisp_Object Qfont; | ||
| 8446 | static Lisp_Object Qpanel_closed, Qselection; | ||
| 8447 | #endif | ||
| 8381 | #endif | 8448 | #endif |
| 8382 | extern int mac_ready_for_apple_events; | 8449 | extern int mac_ready_for_apple_events; |
| 8383 | extern Lisp_Object Qundefined; | 8450 | extern Lisp_Object Qundefined; |
| @@ -8966,6 +9033,42 @@ mac_store_apple_event (class, id, desc) | |||
| 8966 | } | 9033 | } |
| 8967 | 9034 | ||
| 8968 | #if TARGET_API_MAC_CARBON | 9035 | #if TARGET_API_MAC_CARBON |
| 9036 | static OSStatus | ||
| 9037 | mac_store_event_ref_as_apple_event (class, id, class_key, id_key, | ||
| 9038 | event, num_params, names, types) | ||
| 9039 | AEEventClass class; | ||
| 9040 | AEEventID id; | ||
| 9041 | Lisp_Object class_key, id_key; | ||
| 9042 | EventRef event; | ||
| 9043 | UInt32 num_params; | ||
| 9044 | EventParamName *names; | ||
| 9045 | EventParamType *types; | ||
| 9046 | { | ||
| 9047 | OSStatus err = eventNotHandledErr; | ||
| 9048 | Lisp_Object binding; | ||
| 9049 | |||
| 9050 | mac_find_apple_event_spec (class, id, &class_key, &id_key, &binding); | ||
| 9051 | if (!NILP (binding) && !EQ (binding, Qundefined)) | ||
| 9052 | { | ||
| 9053 | if (INTEGERP (binding)) | ||
| 9054 | err = XINT (binding); | ||
| 9055 | else | ||
| 9056 | { | ||
| 9057 | AppleEvent apple_event; | ||
| 9058 | err = create_apple_event_from_event_ref (event, num_params, | ||
| 9059 | names, types, | ||
| 9060 | &apple_event); | ||
| 9061 | if (err == noErr) | ||
| 9062 | { | ||
| 9063 | mac_store_apple_event (class_key, id_key, &apple_event); | ||
| 9064 | AEDisposeDesc (&apple_event); | ||
| 9065 | } | ||
| 9066 | } | ||
| 9067 | } | ||
| 9068 | |||
| 9069 | return err; | ||
| 9070 | } | ||
| 9071 | |||
| 8969 | void | 9072 | void |
| 8970 | mac_store_drag_event (window, mouse_pos, modifiers, desc) | 9073 | mac_store_drag_event (window, mouse_pos, modifiers, desc) |
| 8971 | WindowRef window; | 9074 | WindowRef window; |
| @@ -8997,7 +9100,11 @@ mac_handle_command_event (next_handler, event, data) | |||
| 8997 | { | 9100 | { |
| 8998 | OSStatus result, err; | 9101 | OSStatus result, err; |
| 8999 | HICommand command; | 9102 | HICommand command; |
| 9000 | Lisp_Object class_key, id_key, binding; | 9103 | static EventParamName names[] = {kEventParamDirectObject, |
| 9104 | kEventParamKeyModifiers}; | ||
| 9105 | static EventParamType types[] = {typeHICommand, | ||
| 9106 | typeUInt32}; | ||
| 9107 | int num_params = sizeof (names) / sizeof (names[0]); | ||
| 9001 | 9108 | ||
| 9002 | result = CallNextEventHandler (next_handler, event); | 9109 | result = CallNextEventHandler (next_handler, event); |
| 9003 | if (result != eventNotHandledErr) | 9110 | if (result != eventNotHandledErr) |
| @@ -9011,32 +9118,10 @@ mac_handle_command_event (next_handler, event, data) | |||
| 9011 | 9118 | ||
| 9012 | /* A HICommand event is mapped to an Apple event whose event class | 9119 | /* A HICommand event is mapped to an Apple event whose event class |
| 9013 | symbol is `hicommand' and event ID is its command ID. */ | 9120 | symbol is `hicommand' and event ID is its command ID. */ |
| 9014 | class_key = Qhicommand; | 9121 | err = mac_store_event_ref_as_apple_event (0, command.commandID, |
| 9015 | mac_find_apple_event_spec (0, command.commandID, | 9122 | Qhicommand, Qnil, |
| 9016 | &class_key, &id_key, &binding); | 9123 | event, num_params, names, types); |
| 9017 | if (!NILP (binding) && !EQ (binding, Qundefined)) | 9124 | return err == noErr ? noErr : eventNotHandledErr; |
| 9018 | { | ||
| 9019 | if (INTEGERP (binding)) | ||
| 9020 | return XINT (binding); | ||
| 9021 | else | ||
| 9022 | { | ||
| 9023 | AppleEvent apple_event; | ||
| 9024 | static EventParamName names[] = {kEventParamDirectObject, | ||
| 9025 | kEventParamKeyModifiers}; | ||
| 9026 | static EventParamType types[] = {typeHICommand, | ||
| 9027 | typeUInt32}; | ||
| 9028 | err = create_apple_event_from_event_ref (event, 2, names, types, | ||
| 9029 | &apple_event); | ||
| 9030 | if (err == noErr) | ||
| 9031 | { | ||
| 9032 | mac_store_apple_event (class_key, id_key, &apple_event); | ||
| 9033 | AEDisposeDesc (&apple_event); | ||
| 9034 | return noErr; | ||
| 9035 | } | ||
| 9036 | } | ||
| 9037 | } | ||
| 9038 | |||
| 9039 | return eventNotHandledErr; | ||
| 9040 | } | 9125 | } |
| 9041 | 9126 | ||
| 9042 | static OSErr | 9127 | static OSErr |
| @@ -9139,6 +9224,33 @@ mac_handle_window_event (next_handler, event, data) | |||
| 9139 | return noErr; | 9224 | return noErr; |
| 9140 | 9225 | ||
| 9141 | break; | 9226 | break; |
| 9227 | |||
| 9228 | #ifdef MAC_OSX | ||
| 9229 | case kEventWindowToolbarSwitchMode: | ||
| 9230 | result = CallNextEventHandler (next_handler, event); | ||
| 9231 | { | ||
| 9232 | static EventParamName names[] = {kEventParamDirectObject, | ||
| 9233 | kEventParamWindowMouseLocation, | ||
| 9234 | kEventParamKeyModifiers, | ||
| 9235 | kEventParamMouseButton, | ||
| 9236 | kEventParamClickCount, | ||
| 9237 | kEventParamMouseChord}; | ||
| 9238 | static EventParamType types[] = {typeWindowRef, | ||
| 9239 | typeQDPoint, | ||
| 9240 | typeUInt32, | ||
| 9241 | typeMouseButton, | ||
| 9242 | typeUInt32, | ||
| 9243 | typeUInt32}; | ||
| 9244 | int num_params = sizeof (names) / sizeof (names[0]); | ||
| 9245 | |||
| 9246 | err = mac_store_event_ref_as_apple_event (0, 0, | ||
| 9247 | Qwindow, | ||
| 9248 | Qtoolbar_switch_mode, | ||
| 9249 | event, num_params, | ||
| 9250 | names, types); | ||
| 9251 | } | ||
| 9252 | return err == noErr ? noErr : result; | ||
| 9253 | #endif | ||
| 9142 | } | 9254 | } |
| 9143 | 9255 | ||
| 9144 | return eventNotHandledErr; | 9256 | return eventNotHandledErr; |
| @@ -9213,45 +9325,96 @@ mac_handle_mouse_event (next_handler, event, data) | |||
| 9213 | return eventNotHandledErr; | 9325 | return eventNotHandledErr; |
| 9214 | } | 9326 | } |
| 9215 | 9327 | ||
| 9328 | #if USE_MAC_FONT_PANEL | ||
| 9329 | static pascal OSStatus | ||
| 9330 | mac_handle_font_event (next_handler, event, data) | ||
| 9331 | EventHandlerCallRef next_handler; | ||
| 9332 | EventRef event; | ||
| 9333 | void *data; | ||
| 9334 | { | ||
| 9335 | OSStatus result, err; | ||
| 9336 | Lisp_Object id_key; | ||
| 9337 | int num_params; | ||
| 9338 | EventParamName *names; | ||
| 9339 | EventParamType *types; | ||
| 9340 | static EventParamName names_sel[] = {kEventParamATSUFontID, | ||
| 9341 | kEventParamATSUFontSize, | ||
| 9342 | kEventParamFMFontFamily, | ||
| 9343 | kEventParamFMFontSize, | ||
| 9344 | kEventParamFontColor}; | ||
| 9345 | static EventParamType types_sel[] = {typeATSUFontID, | ||
| 9346 | typeATSUSize, | ||
| 9347 | typeFMFontFamily, | ||
| 9348 | typeFMFontSize, | ||
| 9349 | typeFontColor}; | ||
| 9350 | |||
| 9351 | result = CallNextEventHandler (next_handler, event); | ||
| 9352 | if (result != eventNotHandledErr) | ||
| 9353 | return result; | ||
| 9354 | |||
| 9355 | switch (GetEventKind (event)) | ||
| 9356 | { | ||
| 9357 | case kEventFontPanelClosed: | ||
| 9358 | id_key = Qpanel_closed; | ||
| 9359 | num_params = 0; | ||
| 9360 | names = NULL; | ||
| 9361 | types = NULL; | ||
| 9362 | break; | ||
| 9363 | |||
| 9364 | case kEventFontSelection: | ||
| 9365 | id_key = Qselection; | ||
| 9366 | num_params = sizeof (names_sel) / sizeof (names_sel[0]); | ||
| 9367 | names = names_sel; | ||
| 9368 | types = types_sel; | ||
| 9369 | break; | ||
| 9370 | } | ||
| 9371 | |||
| 9372 | err = mac_store_event_ref_as_apple_event (0, 0, Qfont, id_key, | ||
| 9373 | event, num_params, | ||
| 9374 | names, types); | ||
| 9375 | |||
| 9376 | return err == noErr ? noErr : eventNotHandledErr; | ||
| 9377 | } | ||
| 9378 | #endif | ||
| 9379 | |||
| 9216 | #ifdef MAC_OSX | 9380 | #ifdef MAC_OSX |
| 9217 | OSErr | 9381 | OSStatus |
| 9218 | mac_store_services_event (event) | 9382 | mac_store_services_event (event) |
| 9219 | EventRef event; | 9383 | EventRef event; |
| 9220 | { | 9384 | { |
| 9221 | OSErr err; | 9385 | OSStatus err; |
| 9222 | AppleEvent apple_event; | ||
| 9223 | Lisp_Object id_key; | 9386 | Lisp_Object id_key; |
| 9387 | int num_params; | ||
| 9388 | EventParamName *names; | ||
| 9389 | EventParamType *types; | ||
| 9390 | static EventParamName names_pfm[] = {kEventParamServiceMessageName, | ||
| 9391 | kEventParamServiceUserData}; | ||
| 9392 | static EventParamType types_pfm[] = {typeCFStringRef, | ||
| 9393 | typeCFStringRef}; | ||
| 9224 | 9394 | ||
| 9225 | switch (GetEventKind (event)) | 9395 | switch (GetEventKind (event)) |
| 9226 | { | 9396 | { |
| 9227 | case kEventServicePaste: | 9397 | case kEventServicePaste: |
| 9228 | id_key = Qpaste; | 9398 | id_key = Qpaste; |
| 9229 | err = create_apple_event_from_event_ref (event, 0, NULL, NULL, | 9399 | num_params = 0; |
| 9230 | &apple_event); | 9400 | names = NULL; |
| 9401 | types = NULL; | ||
| 9231 | break; | 9402 | break; |
| 9232 | 9403 | ||
| 9233 | case kEventServicePerform: | 9404 | case kEventServicePerform: |
| 9234 | { | 9405 | id_key = Qperform; |
| 9235 | static EventParamName names[] = {kEventParamServiceMessageName, | 9406 | num_params = sizeof (names_pfm) / sizeof (names_pfm[0]); |
| 9236 | kEventParamServiceUserData}; | 9407 | names = names_pfm; |
| 9237 | static EventParamType types[] = {typeCFStringRef, | 9408 | types = types_pfm; |
| 9238 | typeCFStringRef}; | ||
| 9239 | |||
| 9240 | id_key = Qperform; | ||
| 9241 | err = create_apple_event_from_event_ref (event, 2, names, types, | ||
| 9242 | &apple_event); | ||
| 9243 | } | ||
| 9244 | break; | 9409 | break; |
| 9245 | 9410 | ||
| 9246 | default: | 9411 | default: |
| 9247 | abort (); | 9412 | abort (); |
| 9248 | } | 9413 | } |
| 9249 | 9414 | ||
| 9250 | if (err == noErr) | 9415 | err = mac_store_event_ref_as_apple_event (0, 0, Qservices, id_key, |
| 9251 | { | 9416 | event, num_params, |
| 9252 | mac_store_apple_event (Qservices, id_key, &apple_event); | 9417 | names, types); |
| 9253 | AEDisposeDesc (&apple_event); | ||
| 9254 | } | ||
| 9255 | 9418 | ||
| 9256 | return err; | 9419 | return err; |
| 9257 | } | 9420 | } |
| @@ -9271,15 +9434,28 @@ install_window_handler (window) | |||
| 9271 | {kEventClassWindow, kEventWindowShown}, | 9434 | {kEventClassWindow, kEventWindowShown}, |
| 9272 | {kEventClassWindow, kEventWindowHidden}, | 9435 | {kEventClassWindow, kEventWindowHidden}, |
| 9273 | {kEventClassWindow, kEventWindowExpanded}, | 9436 | {kEventClassWindow, kEventWindowExpanded}, |
| 9274 | {kEventClassWindow, kEventWindowCollapsed}}; | 9437 | {kEventClassWindow, kEventWindowCollapsed}, |
| 9438 | #ifdef MAC_OSX | ||
| 9439 | {kEventClassWindow, kEventWindowToolbarSwitchMode}, | ||
| 9440 | #endif | ||
| 9441 | }; | ||
| 9275 | EventTypeSpec specs_mouse[] = {{kEventClassMouse, kEventMouseWheelMoved}}; | 9442 | EventTypeSpec specs_mouse[] = {{kEventClassMouse, kEventMouseWheelMoved}}; |
| 9276 | static EventHandlerUPP handle_window_eventUPP = NULL; | 9443 | static EventHandlerUPP handle_window_eventUPP = NULL; |
| 9277 | static EventHandlerUPP handle_mouse_eventUPP = NULL; | 9444 | static EventHandlerUPP handle_mouse_eventUPP = NULL; |
| 9445 | #if USE_MAC_FONT_PANEL | ||
| 9446 | EventTypeSpec specs_font[] = {{kEventClassFont, kEventFontPanelClosed}, | ||
| 9447 | {kEventClassFont, kEventFontSelection}}; | ||
| 9448 | static EventHandlerUPP handle_font_eventUPP = NULL; | ||
| 9449 | #endif | ||
| 9278 | 9450 | ||
| 9279 | if (handle_window_eventUPP == NULL) | 9451 | if (handle_window_eventUPP == NULL) |
| 9280 | handle_window_eventUPP = NewEventHandlerUPP (mac_handle_window_event); | 9452 | handle_window_eventUPP = NewEventHandlerUPP (mac_handle_window_event); |
| 9281 | if (handle_mouse_eventUPP == NULL) | 9453 | if (handle_mouse_eventUPP == NULL) |
| 9282 | handle_mouse_eventUPP = NewEventHandlerUPP (mac_handle_mouse_event); | 9454 | handle_mouse_eventUPP = NewEventHandlerUPP (mac_handle_mouse_event); |
| 9455 | #if USE_MAC_FONT_PANEL | ||
| 9456 | if (handle_font_eventUPP == NULL) | ||
| 9457 | handle_font_eventUPP = NewEventHandlerUPP (mac_handle_font_event); | ||
| 9458 | #endif | ||
| 9283 | err = InstallWindowEventHandler (window, handle_window_eventUPP, | 9459 | err = InstallWindowEventHandler (window, handle_window_eventUPP, |
| 9284 | GetEventTypeCount (specs_window), | 9460 | GetEventTypeCount (specs_window), |
| 9285 | specs_window, NULL, NULL); | 9461 | specs_window, NULL, NULL); |
| @@ -9287,6 +9463,12 @@ install_window_handler (window) | |||
| 9287 | err = InstallWindowEventHandler (window, handle_mouse_eventUPP, | 9463 | err = InstallWindowEventHandler (window, handle_mouse_eventUPP, |
| 9288 | GetEventTypeCount (specs_mouse), | 9464 | GetEventTypeCount (specs_mouse), |
| 9289 | specs_mouse, NULL, NULL); | 9465 | specs_mouse, NULL, NULL); |
| 9466 | #if USE_MAC_FONT_PANEL | ||
| 9467 | if (err == noErr) | ||
| 9468 | err = InstallWindowEventHandler (window, handle_font_eventUPP, | ||
| 9469 | GetEventTypeCount (specs_font), | ||
| 9470 | specs_font, NULL, NULL); | ||
| 9471 | #endif | ||
| 9290 | #endif | 9472 | #endif |
| 9291 | if (err == noErr) | 9473 | if (err == noErr) |
| 9292 | err = install_drag_handler (window); | 9474 | err = install_drag_handler (window); |
| @@ -9748,7 +9930,8 @@ XTread_socket (sd, expected, hold_quit) | |||
| 9748 | break; | 9930 | break; |
| 9749 | 9931 | ||
| 9750 | case inContent: | 9932 | case inContent: |
| 9751 | if (window_ptr != FRAME_MAC_WINDOW (mac_focus_frame (dpyinfo))) | 9933 | if (dpyinfo->x_focus_frame == NULL |
| 9934 | || window_ptr != FRAME_MAC_WINDOW (dpyinfo->x_focus_frame)) | ||
| 9752 | SelectWindow (window_ptr); | 9935 | SelectWindow (window_ptr); |
| 9753 | else | 9936 | else |
| 9754 | { | 9937 | { |
| @@ -10844,6 +11027,13 @@ syms_of_macterm () | |||
| 10844 | #if USE_CARBON_EVENTS | 11027 | #if USE_CARBON_EVENTS |
| 10845 | Qhicommand = intern ("hicommand"); staticpro (&Qhicommand); | 11028 | Qhicommand = intern ("hicommand"); staticpro (&Qhicommand); |
| 10846 | #ifdef MAC_OSX | 11029 | #ifdef MAC_OSX |
| 11030 | Qtoolbar_switch_mode = intern ("toolbar-switch-mode"); | ||
| 11031 | staticpro (&Qtoolbar_switch_mode); | ||
| 11032 | #if USE_MAC_FONT_PANEL | ||
| 11033 | Qpanel_closed = intern ("panel-closed"); staticpro (&Qpanel_closed); | ||
| 11034 | Qselection = intern ("selection"); staticpro (&Qselection); | ||
| 11035 | #endif | ||
| 11036 | |||
| 10847 | Qservices = intern ("services"); staticpro (&Qservices); | 11037 | Qservices = intern ("services"); staticpro (&Qservices); |
| 10848 | Qpaste = intern ("paste"); staticpro (&Qpaste); | 11038 | Qpaste = intern ("paste"); staticpro (&Qpaste); |
| 10849 | Qperform = intern ("perform"); staticpro (&Qperform); | 11039 | Qperform = intern ("perform"); staticpro (&Qperform); |
| @@ -10884,7 +11074,7 @@ NOTE: Not supported on Mac yet. */); | |||
| 10884 | x_use_underline_position_properties = 0; | 11074 | x_use_underline_position_properties = 0; |
| 10885 | 11075 | ||
| 10886 | DEFVAR_LISP ("x-toolkit-scroll-bars", &Vx_toolkit_scroll_bars, | 11076 | DEFVAR_LISP ("x-toolkit-scroll-bars", &Vx_toolkit_scroll_bars, |
| 10887 | doc: /* If not nil, Emacs uses toolkit scroll bars. */); | 11077 | doc: /* If not nil, Emacs uses toolkit scroll bars. */); |
| 10888 | #ifdef USE_TOOLKIT_SCROLL_BARS | 11078 | #ifdef USE_TOOLKIT_SCROLL_BARS |
| 10889 | Vx_toolkit_scroll_bars = Qt; | 11079 | Vx_toolkit_scroll_bars = Qt; |
| 10890 | #else | 11080 | #else |
| @@ -10938,23 +11128,23 @@ mouse-3 and the command-key will register for mouse-2. */); | |||
| 10938 | 11128 | ||
| 10939 | #if USE_CARBON_EVENTS | 11129 | #if USE_CARBON_EVENTS |
| 10940 | DEFVAR_BOOL ("mac-wheel-button-is-mouse-2", &mac_wheel_button_is_mouse_2, | 11130 | DEFVAR_BOOL ("mac-wheel-button-is-mouse-2", &mac_wheel_button_is_mouse_2, |
| 10941 | doc: /* *Non-nil if the wheel button is mouse-2 and the right click mouse-3. | 11131 | doc: /* *Non-nil if the wheel button is mouse-2 and the right click mouse-3. |
| 10942 | Otherwise, the right click will be treated as mouse-2 and the wheel | 11132 | Otherwise, the right click will be treated as mouse-2 and the wheel |
| 10943 | button will be mouse-3. */); | 11133 | button will be mouse-3. */); |
| 10944 | mac_wheel_button_is_mouse_2 = 1; | 11134 | mac_wheel_button_is_mouse_2 = 1; |
| 10945 | 11135 | ||
| 10946 | DEFVAR_BOOL ("mac-pass-command-to-system", &mac_pass_command_to_system, | 11136 | DEFVAR_BOOL ("mac-pass-command-to-system", &mac_pass_command_to_system, |
| 10947 | doc: /* *Non-nil if command key presses are passed on to the Mac Toolbox. */); | 11137 | doc: /* *Non-nil if command key presses are passed on to the Mac Toolbox. */); |
| 10948 | mac_pass_command_to_system = 1; | 11138 | mac_pass_command_to_system = 1; |
| 10949 | 11139 | ||
| 10950 | DEFVAR_BOOL ("mac-pass-control-to-system", &mac_pass_control_to_system, | 11140 | DEFVAR_BOOL ("mac-pass-control-to-system", &mac_pass_control_to_system, |
| 10951 | doc: /* *Non-nil if control key presses are passed on to the Mac Toolbox. */); | 11141 | doc: /* *Non-nil if control key presses are passed on to the Mac Toolbox. */); |
| 10952 | mac_pass_control_to_system = 1; | 11142 | mac_pass_control_to_system = 1; |
| 10953 | 11143 | ||
| 10954 | #endif | 11144 | #endif |
| 10955 | 11145 | ||
| 10956 | DEFVAR_BOOL ("mac-allow-anti-aliasing", &mac_use_core_graphics, | 11146 | DEFVAR_BOOL ("mac-allow-anti-aliasing", &mac_use_core_graphics, |
| 10957 | doc: /* *If non-nil, allow anti-aliasing. | 11147 | doc: /* *If non-nil, allow anti-aliasing. |
| 10958 | The text will be rendered using Core Graphics text rendering which | 11148 | The text will be rendered using Core Graphics text rendering which |
| 10959 | may anti-alias the text. */); | 11149 | may anti-alias the text. */); |
| 10960 | #if USE_CG_DRAWING | 11150 | #if USE_CG_DRAWING |
| @@ -10967,7 +11157,7 @@ may anti-alias the text. */); | |||
| 10967 | creating the terminal frame on Mac OS 9 before loading | 11157 | creating the terminal frame on Mac OS 9 before loading |
| 10968 | term/mac-win.elc. */ | 11158 | term/mac-win.elc. */ |
| 10969 | DEFVAR_LISP ("mac-charset-info-alist", &Vmac_charset_info_alist, | 11159 | DEFVAR_LISP ("mac-charset-info-alist", &Vmac_charset_info_alist, |
| 10970 | doc: /* Alist of Emacs character sets vs text encodings and coding systems. | 11160 | doc: /* Alist of Emacs character sets vs text encodings and coding systems. |
| 10971 | Each entry should be of the form: | 11161 | Each entry should be of the form: |
| 10972 | 11162 | ||
| 10973 | (CHARSET-NAME TEXT-ENCODING CODING-SYSTEM) | 11163 | (CHARSET-NAME TEXT-ENCODING CODING-SYSTEM) |
| @@ -10978,6 +11168,18 @@ CODING_SYSTEM is a coding system corresponding to TEXT-ENCODING. */); | |||
| 10978 | Vmac_charset_info_alist = | 11168 | Vmac_charset_info_alist = |
| 10979 | Fcons (list3 (build_string ("mac-roman"), | 11169 | Fcons (list3 (build_string ("mac-roman"), |
| 10980 | make_number (smRoman), Qnil), Qnil); | 11170 | make_number (smRoman), Qnil), Qnil); |
| 11171 | |||
| 11172 | #if USE_ATSUI | ||
| 11173 | DEFVAR_LISP ("mac-atsu-font-table", &Vmac_atsu_font_table, | ||
| 11174 | doc: /* Hash table of ATSU font IDs vs plist of attributes and values. | ||
| 11175 | Each font ID is represented as a four-byte string in native byte | ||
| 11176 | order. */); | ||
| 11177 | Vmac_atsu_font_table = | ||
| 11178 | make_hash_table (Qequal, make_number (DEFAULT_HASH_SIZE), | ||
| 11179 | make_float (DEFAULT_REHASH_SIZE), | ||
| 11180 | make_float (DEFAULT_REHASH_THRESHOLD), | ||
| 11181 | Qnil, Qnil, Qnil); | ||
| 11182 | #endif | ||
| 10981 | } | 11183 | } |
| 10982 | 11184 | ||
| 10983 | /* arch-tag: f2259165-4454-4c04-a029-a133c8af7b5b | 11185 | /* arch-tag: f2259165-4454-4c04-a029-a133c8af7b5b |