Mercurial > emacs
comparison src/macterm.c @ 81656:fb6a1213c5e8
[USE_MAC_TSM] (mac_handle_text_input_event):
Check WINDOWP before using XWINDOW. Consolidate return statements.
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Thu, 28 Jun 2007 10:08:41 +0000 |
parents | bcf93d8a866b |
children | b98604865ea0 0ece58f6e0aa 988f1edc9674 |
comparison
equal
deleted
inserted
replaced
81655:170a5ecefd82 | 81656:fb6a1213c5e8 |
---|---|
11162 mac_handle_text_input_event (next_handler, event, data) | 11162 mac_handle_text_input_event (next_handler, event, data) |
11163 EventHandlerCallRef next_handler; | 11163 EventHandlerCallRef next_handler; |
11164 EventRef event; | 11164 EventRef event; |
11165 void *data; | 11165 void *data; |
11166 { | 11166 { |
11167 OSStatus result, err = noErr; | 11167 OSStatus err, result; |
11168 Lisp_Object id_key = Qnil; | 11168 Lisp_Object id_key = Qnil; |
11169 int num_params; | 11169 int num_params; |
11170 const EventParamName *names; | 11170 const EventParamName *names; |
11171 const EventParamType *types; | 11171 const EventParamType *types; |
11172 static UInt32 seqno_uaia = 0; | 11172 static UInt32 seqno_uaia = 0; |
11223 names = names_uaia; | 11223 names = names_uaia; |
11224 types = types_uaia; | 11224 types = types_uaia; |
11225 SetEventParameter (event, EVENT_PARAM_TEXT_INPUT_SEQUENCE_NUMBER, | 11225 SetEventParameter (event, EVENT_PARAM_TEXT_INPUT_SEQUENCE_NUMBER, |
11226 typeUInt32, sizeof (UInt32), &seqno_uaia); | 11226 typeUInt32, sizeof (UInt32), &seqno_uaia); |
11227 seqno_uaia++; | 11227 seqno_uaia++; |
11228 result = noErr; | |
11228 break; | 11229 break; |
11229 | 11230 |
11230 case kEventTextInputUnicodeForKeyEvent: | 11231 case kEventTextInputUnicodeForKeyEvent: |
11231 { | 11232 { |
11232 EventRef kbd_event; | 11233 EventRef kbd_event; |
11240 typeUInt32, NULL, | 11241 typeUInt32, NULL, |
11241 sizeof (UInt32), NULL, &modifiers); | 11242 sizeof (UInt32), NULL, &modifiers); |
11242 if (err == noErr && mac_mapped_modifiers (modifiers)) | 11243 if (err == noErr && mac_mapped_modifiers (modifiers)) |
11243 /* There're mapped modifier keys. Process it in | 11244 /* There're mapped modifier keys. Process it in |
11244 do_keystroke. */ | 11245 do_keystroke. */ |
11245 return eventNotHandledErr; | 11246 break; |
11246 if (err == noErr) | 11247 if (err == noErr) |
11247 err = GetEventParameter (kbd_event, kEventParamKeyUnicodes, | 11248 err = GetEventParameter (kbd_event, kEventParamKeyUnicodes, |
11248 typeUnicodeText, NULL, 0, &actual_size, | 11249 typeUnicodeText, NULL, 0, &actual_size, |
11249 NULL); | 11250 NULL); |
11250 if (err == noErr && actual_size == sizeof (UniChar)) | 11251 if (err == noErr && actual_size == sizeof (UniChar)) |
11279 & (meta_modifier | alt_modifier | 11280 & (meta_modifier | alt_modifier |
11280 | hyper_modifier | super_modifier)); | 11281 | hyper_modifier | super_modifier)); |
11281 XSETFRAME (read_socket_inev->frame_or_window, f); | 11282 XSETFRAME (read_socket_inev->frame_or_window, f); |
11282 } | 11283 } |
11283 } | 11284 } |
11284 return eventNotHandledErr; | 11285 break; |
11285 } | 11286 } |
11286 } | 11287 } |
11288 if (err == noErr) | |
11289 { | |
11290 /* Non-ASCII keystrokes without mapped modifiers are | |
11291 processed at the Lisp level. */ | |
11292 id_key = Qunicode_for_key_event; | |
11293 num_params = sizeof (names_ufke) / sizeof (names_ufke[0]); | |
11294 names = names_ufke; | |
11295 types = types_ufke; | |
11296 result = noErr; | |
11297 } | |
11287 } | 11298 } |
11288 /* Non-ASCII keystrokes without mapped modifiers are processed | |
11289 at the Lisp level. */ | |
11290 id_key = Qunicode_for_key_event; | |
11291 num_params = sizeof (names_ufke) / sizeof (names_ufke[0]); | |
11292 names = names_ufke; | |
11293 types = types_ufke; | |
11294 break; | 11299 break; |
11295 | 11300 |
11296 case kEventTextInputOffsetToPos: | 11301 case kEventTextInputOffsetToPos: |
11297 { | 11302 { |
11298 struct frame *f; | 11303 struct frame *f; |
11299 struct window *w; | 11304 struct window *w; |
11300 Point p; | 11305 Point p; |
11301 | 11306 |
11302 if (!OVERLAYP (Vmac_ts_active_input_overlay)) | 11307 if (!OVERLAYP (Vmac_ts_active_input_overlay)) |
11303 return eventNotHandledErr; | 11308 break; |
11304 | 11309 |
11305 /* Strictly speaking, this is not always correct because | 11310 /* Strictly speaking, this is not always correct because |
11306 previous events may change some states about display. */ | 11311 previous events may change some states about display. */ |
11307 if (NILP (Foverlay_get (Vmac_ts_active_input_overlay, Qbefore_string))) | 11312 if (!NILP (Foverlay_get (Vmac_ts_active_input_overlay, Qbefore_string))) |
11313 { | |
11314 /* Active input area is displayed around the current point. */ | |
11315 f = SELECTED_FRAME (); | |
11316 w = XWINDOW (f->selected_window); | |
11317 } | |
11318 else if (WINDOWP (echo_area_window)) | |
11308 { | 11319 { |
11309 /* Active input area is displayed in the echo area. */ | 11320 /* Active input area is displayed in the echo area. */ |
11310 w = XWINDOW (echo_area_window); | 11321 w = XWINDOW (echo_area_window); |
11311 f = WINDOW_XFRAME (w); | 11322 f = WINDOW_XFRAME (w); |
11312 } | 11323 } |
11313 else | 11324 else |
11314 { | 11325 break; |
11315 /* Active input area is displayed around the current point. */ | |
11316 f = SELECTED_FRAME (); | |
11317 w = XWINDOW (f->selected_window); | |
11318 } | |
11319 | 11326 |
11320 p.h = (WINDOW_TO_FRAME_PIXEL_X (w, w->cursor.x) | 11327 p.h = (WINDOW_TO_FRAME_PIXEL_X (w, w->cursor.x) |
11321 + WINDOW_LEFT_FRINGE_WIDTH (w) | 11328 + WINDOW_LEFT_FRINGE_WIDTH (w) |
11322 + f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f)); | 11329 + f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f)); |
11323 p.v = (WINDOW_TO_FRAME_PIXEL_Y (w, w->cursor.y) | 11330 p.v = (WINDOW_TO_FRAME_PIXEL_Y (w, w->cursor.y) |
11324 + FONT_BASE (FRAME_FONT (f)) | 11331 + FONT_BASE (FRAME_FONT (f)) |
11325 + f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f)); | 11332 + f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f)); |
11326 err = SetEventParameter (event, kEventParamTextInputReplyPoint, | 11333 err = SetEventParameter (event, kEventParamTextInputReplyPoint, |
11327 typeQDPoint, sizeof (typeQDPoint), &p); | 11334 typeQDPoint, sizeof (typeQDPoint), &p); |
11335 if (err == noErr) | |
11336 result = noErr; | |
11328 } | 11337 } |
11329 break; | 11338 break; |
11330 | 11339 |
11331 default: | 11340 default: |
11332 abort (); | 11341 abort (); |
11334 | 11343 |
11335 if (!NILP (id_key)) | 11344 if (!NILP (id_key)) |
11336 err = mac_store_event_ref_as_apple_event (0, 0, Qtext_input, id_key, | 11345 err = mac_store_event_ref_as_apple_event (0, 0, Qtext_input, id_key, |
11337 event, num_params, | 11346 event, num_params, |
11338 names, types); | 11347 names, types); |
11339 if (err == noErr) | |
11340 result = noErr; | |
11341 | |
11342 return result; | 11348 return result; |
11343 } | 11349 } |
11344 #endif | 11350 #endif |
11345 #endif /* TARGET_API_MAC_CARBON */ | 11351 #endif /* TARGET_API_MAC_CARBON */ |
11346 | 11352 |