Mercurial > emacs
comparison src/macterm.c @ 71504:2b4e59cd1121
(Qeql): Add extern.
(x_set_mouse_pixel_position) [MAC_OSX]: Use CGWarpMouseCursorPosition.
(fm_style_face_attributes_alist) [USE_ATSUI]: New variable.
(syms_of_macterm) [USE_ATSUI]: Initialize and staticpro it.
Change keys of Vmac_atsu_font_table from strings to numbers.
(fm_style_to_face_attributes) [USE_ATSUI]: New function.
(init_font_name_table) [USE_ATSUI]: Use it.
(saved_ts_script_language_on_focus) [USE_MAC_TSM]: New variable.
(syms_of_macterm) [USE_MAC_TSM]: Initialize and staticpro it.
[USE_MAC_TSM] (mac_tsm_resume): Restore script and language codes
only when saved_ts_script_language_on_focus coincides with
Vmac_ts_script_language_on_focus.
[USE_MAC_TSM] (mac_tsm_suspend): Save value of
Vmac_ts_script_language_on_focus to saved_ts_script_language_on_focus.
(XTread_socket) [USE_MAC_TSM]: Add Mac OS Classic support.
[USE_MAC_TSM] (mac_handle_text_input_event, init_tsm): Likewise.
| author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
|---|---|
| date | Wed, 28 Jun 2006 08:31:32 +0000 |
| parents | 4df3a065ee9b |
| children | a6c0f6b0c790 b19aaf4ab0ee 138ce2701550 |
comparison
equal
deleted
inserted
replaced
| 71503:fa67beba36e1 | 71504:2b4e59cd1121 |
|---|---|
| 193 #else | 193 #else |
| 194 static int input_signal_count; | 194 static int input_signal_count; |
| 195 #endif | 195 #endif |
| 196 | 196 |
| 197 extern Lisp_Object Vsystem_name; | 197 extern Lisp_Object Vsystem_name; |
| 198 | |
| 199 extern Lisp_Object Qeql; | |
| 198 | 200 |
| 199 /* A mask of extra modifier bits to put into every keyboard char. */ | 201 /* A mask of extra modifier bits to put into every keyboard char. */ |
| 200 | 202 |
| 201 extern EMACS_INT extra_keyboard_modifiers; | 203 extern EMACS_INT extra_keyboard_modifiers; |
| 202 | 204 |
| 6029 void | 6031 void |
| 6030 x_set_mouse_pixel_position (f, pix_x, pix_y) | 6032 x_set_mouse_pixel_position (f, pix_x, pix_y) |
| 6031 struct frame *f; | 6033 struct frame *f; |
| 6032 int pix_x, pix_y; | 6034 int pix_x, pix_y; |
| 6033 { | 6035 { |
| 6034 #if 0 /* MAC_TODO: CursorDeviceMoveTo is non-Carbon */ | 6036 #ifdef MAC_OSX |
| 6037 Point p; | |
| 6038 CGPoint point; | |
| 6039 | |
| 6040 BLOCK_INPUT; | |
| 6041 SetPortWindowPort (FRAME_MAC_WINDOW (f)); | |
| 6042 p.h = pix_x; | |
| 6043 p.v = pix_y; | |
| 6044 LocalToGlobal (&p); | |
| 6045 point.x = p.h; | |
| 6046 point.y = p.v; | |
| 6047 CGWarpMouseCursorPosition (point); | |
| 6048 UNBLOCK_INPUT; | |
| 6049 #else | |
| 6050 #if 0 /* MAC_TODO: LMSetMouseLocation and CursorDeviceMoveTo are non-Carbon */ | |
| 6035 BLOCK_INPUT; | 6051 BLOCK_INPUT; |
| 6036 | 6052 |
| 6037 XWarpPointer (FRAME_X_DISPLAY (f), None, FRAME_X_WINDOW (f), | 6053 XWarpPointer (FRAME_X_DISPLAY (f), None, FRAME_X_WINDOW (f), |
| 6038 0, 0, 0, 0, pix_x, pix_y); | 6054 0, 0, 0, 0, pix_x, pix_y); |
| 6039 UNBLOCK_INPUT; | 6055 UNBLOCK_INPUT; |
| 6056 #endif | |
| 6040 #endif | 6057 #endif |
| 6041 } | 6058 } |
| 6042 | 6059 |
| 6043 /* focus shifting, raising and lowering. */ | 6060 /* focus shifting, raising and lowering. */ |
| 6044 | 6061 |
| 6895 for Mac OS Classic is created. */ | 6912 for Mac OS Classic is created. */ |
| 6896 static Lisp_Object fm_font_family_alist; | 6913 static Lisp_Object fm_font_family_alist; |
| 6897 #if USE_ATSUI | 6914 #if USE_ATSUI |
| 6898 /* Hash table linking font family names to ATSU font IDs. */ | 6915 /* Hash table linking font family names to ATSU font IDs. */ |
| 6899 static Lisp_Object atsu_font_id_hash; | 6916 static Lisp_Object atsu_font_id_hash; |
| 6917 /* Alist linking Font Manager style to face attributes. */ | |
| 6918 static Lisp_Object fm_style_face_attributes_alist; | |
| 6900 static Lisp_Object Vmac_atsu_font_table; | 6919 static Lisp_Object Vmac_atsu_font_table; |
| 6901 extern Lisp_Object QCfamily, QCweight, QCslant, Qnormal, Qbold, Qitalic; | 6920 extern Lisp_Object QCfamily, QCweight, QCslant, Qnormal, Qbold, Qitalic; |
| 6902 #endif | 6921 #endif |
| 6903 | 6922 |
| 6904 /* Alist linking character set strings to Mac text encoding and Emacs | 6923 /* Alist linking character set strings to Mac text encoding and Emacs |
| 7129 add_font_name_table_entry (mac_to_x_fontname (name, 0, bold, charset)); | 7148 add_font_name_table_entry (mac_to_x_fontname (name, 0, bold, charset)); |
| 7130 add_font_name_table_entry (mac_to_x_fontname (name, 0, italic | bold, | 7149 add_font_name_table_entry (mac_to_x_fontname (name, 0, italic | bold, |
| 7131 charset)); | 7150 charset)); |
| 7132 } | 7151 } |
| 7133 } | 7152 } |
| 7153 | |
| 7154 #if USE_ATSUI | |
| 7155 static Lisp_Object | |
| 7156 fm_style_to_face_attributes (fm_style) | |
| 7157 FMFontStyle fm_style; | |
| 7158 { | |
| 7159 Lisp_Object tem; | |
| 7160 | |
| 7161 fm_style &= (bold | italic); | |
| 7162 tem = assq_no_quit (make_number (fm_style), | |
| 7163 fm_style_face_attributes_alist); | |
| 7164 if (!NILP (tem)) | |
| 7165 return XCDR (tem); | |
| 7166 | |
| 7167 tem = list4 (QCweight, fm_style & bold ? Qbold : Qnormal, | |
| 7168 QCslant, fm_style & italic ? Qitalic : Qnormal); | |
| 7169 fm_style_face_attributes_alist = | |
| 7170 Fcons (Fcons (make_number (fm_style), tem), | |
| 7171 fm_style_face_attributes_alist); | |
| 7172 | |
| 7173 return tem; | |
| 7174 } | |
| 7175 #endif | |
| 7134 | 7176 |
| 7135 /* Sets up the table font_name_table to contain the list of all fonts | 7177 /* Sets up the table font_name_table to contain the list of all fonts |
| 7136 in the system the first time the table is used so that the Resource | 7178 in the system the first time the table is used so that the Resource |
| 7137 Manager need not be accessed every time this information is | 7179 Manager need not be accessed every time this information is |
| 7138 needed. */ | 7180 needed. */ |
| 7198 FMFontStyle style = normal; | 7240 FMFontStyle style = normal; |
| 7199 | 7241 |
| 7200 decode_mac_font_name (name, name_len + 1, Qnil); | 7242 decode_mac_font_name (name, name_len + 1, Qnil); |
| 7201 family = make_unibyte_string (name, name_len); | 7243 family = make_unibyte_string (name, name_len); |
| 7202 FMGetFontFamilyInstanceFromFont (font_ids[i], &ff, &style); | 7244 FMGetFontFamilyInstanceFromFont (font_ids[i], &ff, &style); |
| 7203 Fputhash (make_unibyte_string ((char *)(font_ids + i), | 7245 Fputhash ((font_ids[i] > MOST_POSITIVE_FIXNUM |
| 7204 sizeof (ATSUFontID)), | 7246 ? make_float (font_ids[i]) |
| 7247 : make_number (font_ids[i])), | |
| 7205 Fcons (QCfamily, | 7248 Fcons (QCfamily, |
| 7206 list5 (family, | 7249 Fcons (family, |
| 7207 QCweight, | 7250 fm_style_to_face_attributes (style))), |
| 7208 style & bold ? Qbold : Qnormal, | |
| 7209 QCslant, | |
| 7210 style & italic ? Qitalic : Qnormal)), | |
| 7211 Vmac_atsu_font_table); | 7251 Vmac_atsu_font_table); |
| 7212 if (*name != '.' | 7252 if (*name != '.' |
| 7213 && hash_lookup (h, family, &hash_code) < 0) | 7253 && hash_lookup (h, family, &hash_code) < 0) |
| 7214 { | 7254 { |
| 7215 add_mac_font_name (name, 0, normal, "iso10646-1"); | 7255 add_mac_font_name (name, 0, normal, "iso10646-1"); |
| 8511 static Lisp_Object Qtext_input; | 8551 static Lisp_Object Qtext_input; |
| 8512 static Lisp_Object Qupdate_active_input_area, Qunicode_for_key_event; | 8552 static Lisp_Object Qupdate_active_input_area, Qunicode_for_key_event; |
| 8513 static Lisp_Object Vmac_ts_active_input_overlay; | 8553 static Lisp_Object Vmac_ts_active_input_overlay; |
| 8514 extern Lisp_Object Qbefore_string; | 8554 extern Lisp_Object Qbefore_string; |
| 8515 static Lisp_Object Vmac_ts_script_language_on_focus; | 8555 static Lisp_Object Vmac_ts_script_language_on_focus; |
| 8556 static Lisp_Object saved_ts_script_language_on_focus; | |
| 8516 static ScriptLanguageRecord saved_ts_language; | 8557 static ScriptLanguageRecord saved_ts_language; |
| 8517 static Component saved_ts_component; | 8558 static Component saved_ts_component; |
| 8518 #endif | 8559 #endif |
| 8519 #endif | 8560 #endif |
| 8520 extern int mac_ready_for_apple_events; | 8561 extern int mac_ready_for_apple_events; |
| 8873 | 8914 |
| 8874 err = ActivateTSMDocument (tsm_document_id); | 8915 err = ActivateTSMDocument (tsm_document_id); |
| 8875 | 8916 |
| 8876 if (err == noErr) | 8917 if (err == noErr) |
| 8877 { | 8918 { |
| 8878 if (EQ (Vmac_ts_script_language_on_focus, Qt)) | 8919 if (EQ (Vmac_ts_script_language_on_focus, Qt) |
| 8920 && EQ (saved_ts_script_language_on_focus, Qt)) | |
| 8879 slptr = &saved_ts_language; | 8921 slptr = &saved_ts_language; |
| 8880 else if (CONSP (Vmac_ts_script_language_on_focus) | 8922 else if (CONSP (Vmac_ts_script_language_on_focus) |
| 8881 && INTEGERP (XCAR (Vmac_ts_script_language_on_focus)) | 8923 && INTEGERP (XCAR (Vmac_ts_script_language_on_focus)) |
| 8882 && INTEGERP (XCDR (Vmac_ts_script_language_on_focus))) | 8924 && INTEGERP (XCDR (Vmac_ts_script_language_on_focus)) |
| 8925 && CONSP (saved_ts_script_language_on_focus) | |
| 8926 && EQ (XCAR (saved_ts_script_language_on_focus), | |
| 8927 XCAR (Vmac_ts_script_language_on_focus)) | |
| 8928 && EQ (XCDR (saved_ts_script_language_on_focus), | |
| 8929 XCDR (Vmac_ts_script_language_on_focus))) | |
| 8883 { | 8930 { |
| 8884 slrec.fScript = XINT (XCAR (Vmac_ts_script_language_on_focus)); | 8931 slrec.fScript = XINT (XCAR (Vmac_ts_script_language_on_focus)); |
| 8885 slrec.fLanguage = XINT (XCDR (Vmac_ts_script_language_on_focus)); | 8932 slrec.fLanguage = XINT (XCDR (Vmac_ts_script_language_on_focus)); |
| 8886 slptr = &slrec; | 8933 slptr = &slrec; |
| 8887 } | 8934 } |
| 8909 static OSStatus | 8956 static OSStatus |
| 8910 mac_tsm_suspend () | 8957 mac_tsm_suspend () |
| 8911 { | 8958 { |
| 8912 OSStatus err; | 8959 OSStatus err; |
| 8913 ScriptLanguageRecord slrec, *slptr = NULL; | 8960 ScriptLanguageRecord slrec, *slptr = NULL; |
| 8961 | |
| 8962 saved_ts_script_language_on_focus = Vmac_ts_script_language_on_focus; | |
| 8914 | 8963 |
| 8915 if (EQ (Vmac_ts_script_language_on_focus, Qt)) | 8964 if (EQ (Vmac_ts_script_language_on_focus, Qt)) |
| 8916 { | 8965 { |
| 8917 err = GetTextServiceLanguage (&saved_ts_language); | 8966 err = GetTextServiceLanguage (&saved_ts_language); |
| 8918 if (err == noErr) | 8967 if (err == noErr) |
| 9558 static EventParamType types_uaia[] = | 9607 static EventParamType types_uaia[] = |
| 9559 {typeComponentInstance, | 9608 {typeComponentInstance, |
| 9560 typeLongInteger, | 9609 typeLongInteger, |
| 9561 typeIntlWritingCode, | 9610 typeIntlWritingCode, |
| 9562 typeLongInteger, | 9611 typeLongInteger, |
| 9612 #ifdef MAC_OSX | |
| 9563 typeUnicodeText, | 9613 typeUnicodeText, |
| 9614 #else | |
| 9615 typeChar, | |
| 9616 #endif | |
| 9564 typeTextRangeArray, | 9617 typeTextRangeArray, |
| 9565 typeTextRangeArray, | 9618 typeTextRangeArray, |
| 9566 typeOffsetArray, | 9619 typeOffsetArray, |
| 9567 typeTextRange, | 9620 typeTextRange, |
| 9568 typeUInt32, | 9621 typeUInt32, |
| 10644 typeUInt32, NULL, | 10697 typeUInt32, NULL, |
| 10645 sizeof (UInt32), NULL, &modifiers); | 10698 sizeof (UInt32), NULL, &modifiers); |
| 10646 #endif | 10699 #endif |
| 10647 mapped_modifiers &= modifiers; | 10700 mapped_modifiers &= modifiers; |
| 10648 | 10701 |
| 10649 #if USE_CARBON_EVENTS && defined (MAC_OSX) | 10702 #if USE_CARBON_EVENTS && (defined (MAC_OSX) || USE_MAC_TSM) |
| 10650 /* When using Carbon Events, we need to pass raw keyboard | 10703 /* When using Carbon Events, we need to pass raw keyboard |
| 10651 events to the TSM ourselves. If TSM handles it, it | 10704 events to the TSM ourselves. If TSM handles it, it |
| 10652 will pass back noErr, otherwise it will pass back | 10705 will pass back noErr, otherwise it will pass back |
| 10653 "eventNotHandledErr" and we can process it | 10706 "eventNotHandledErr" and we can process it |
| 10654 normally. */ | 10707 normally. */ |
| 11300 | 11353 |
| 11301 #if USE_MAC_TSM | 11354 #if USE_MAC_TSM |
| 11302 static void | 11355 static void |
| 11303 init_tsm () | 11356 init_tsm () |
| 11304 { | 11357 { |
| 11358 #ifdef MAC_OSX | |
| 11305 static InterfaceTypeList types = {kUnicodeDocument}; | 11359 static InterfaceTypeList types = {kUnicodeDocument}; |
| 11360 #else | |
| 11361 static InterfaceTypeList types = {kTextService}; | |
| 11362 #endif | |
| 11306 | 11363 |
| 11307 NewTSMDocument (sizeof (types) / sizeof (types[0]), types, | 11364 NewTSMDocument (sizeof (types) / sizeof (types[0]), types, |
| 11308 &tsm_document_id, 0); | 11365 &tsm_document_id, 0); |
| 11309 } | 11366 } |
| 11310 #endif | 11367 #endif |
| 11488 fm_font_family_alist = Qnil; | 11545 fm_font_family_alist = Qnil; |
| 11489 | 11546 |
| 11490 #if USE_ATSUI | 11547 #if USE_ATSUI |
| 11491 staticpro (&atsu_font_id_hash); | 11548 staticpro (&atsu_font_id_hash); |
| 11492 atsu_font_id_hash = Qnil; | 11549 atsu_font_id_hash = Qnil; |
| 11550 | |
| 11551 staticpro (&fm_style_face_attributes_alist); | |
| 11552 fm_style_face_attributes_alist = Qnil; | |
| 11553 #endif | |
| 11554 | |
| 11555 #if USE_MAC_TSM | |
| 11556 staticpro (&saved_ts_script_language_on_focus); | |
| 11557 saved_ts_script_language_on_focus = Qnil; | |
| 11493 #endif | 11558 #endif |
| 11494 | 11559 |
| 11495 /* We don't yet support this, but defining this here avoids whining | 11560 /* We don't yet support this, but defining this here avoids whining |
| 11496 from cus-start.el and other places, like "M-x set-variable". */ | 11561 from cus-start.el and other places, like "M-x set-variable". */ |
| 11497 DEFVAR_BOOL ("x-use-underline-position-properties", | 11562 DEFVAR_BOOL ("x-use-underline-position-properties", |
| 11600 Fcons (list3 (build_string ("mac-roman"), | 11665 Fcons (list3 (build_string ("mac-roman"), |
| 11601 make_number (smRoman), Qnil), Qnil); | 11666 make_number (smRoman), Qnil), Qnil); |
| 11602 | 11667 |
| 11603 #if USE_ATSUI | 11668 #if USE_ATSUI |
| 11604 DEFVAR_LISP ("mac-atsu-font-table", &Vmac_atsu_font_table, | 11669 DEFVAR_LISP ("mac-atsu-font-table", &Vmac_atsu_font_table, |
| 11605 doc: /* Hash table of ATSU font IDs vs plist of attributes and values. | 11670 doc: /* Hash table of ATSU font IDs vs plist of attributes and values. */); |
| 11606 Each font ID is represented as a four-byte string in native byte | |
| 11607 order. */); | |
| 11608 Vmac_atsu_font_table = | 11671 Vmac_atsu_font_table = |
| 11609 make_hash_table (Qequal, make_number (DEFAULT_HASH_SIZE), | 11672 make_hash_table (Qeql, make_number (DEFAULT_HASH_SIZE), |
| 11610 make_float (DEFAULT_REHASH_SIZE), | 11673 make_float (DEFAULT_REHASH_SIZE), |
| 11611 make_float (DEFAULT_REHASH_THRESHOLD), | 11674 make_float (DEFAULT_REHASH_THRESHOLD), |
| 11612 Qnil, Qnil, Qnil); | 11675 Qnil, Qnil, Qnil); |
| 11613 #endif | 11676 #endif |
| 11614 #if USE_MAC_TSM | 11677 #if USE_MAC_TSM |
