diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 88 | ||||
| -rw-r--r-- | src/casetab.c | 5 | ||||
| -rw-r--r-- | src/charset.c | 9 | ||||
| -rw-r--r-- | src/charset.h | 3 | ||||
| -rw-r--r-- | src/coding.h | 2 | ||||
| -rw-r--r-- | src/data.c | 4 | ||||
| -rw-r--r-- | src/editfns.c | 10 | ||||
| -rw-r--r-- | src/fringe.c | 2 | ||||
| -rw-r--r-- | src/image.c | 36 | ||||
| -rw-r--r-- | src/lread.c | 39 | ||||
| -rw-r--r-- | src/macterm.c | 48 | ||||
| -rw-r--r-- | src/minibuf.c | 2 | ||||
| -rw-r--r-- | src/w32fns.c | 4 | ||||
| -rw-r--r-- | src/xterm.c | 49 |
14 files changed, 239 insertions, 62 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 213e7762485..61a10be80dd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,88 @@ | |||
| 1 | 2005-10-27 Chong Yidong <cyd@stupidchicken.com> | ||
| 2 | |||
| 3 | * data.c (Fmake_variable_frame_local): Add clarification to | ||
| 4 | docstring. | ||
| 5 | |||
| 6 | * fringe.c (update_window_fringes): Handle case where buffer ends | ||
| 7 | with a newline. | ||
| 8 | |||
| 9 | 2005-10-27 Kenichi Handa <handa@m17n.org> | ||
| 10 | |||
| 11 | * coding.h (DECODE_SYSTEM): Fix argument name; name->str. | ||
| 12 | |||
| 13 | 2005-10-24 Kenichi Handa <handa@m17n.org> | ||
| 14 | |||
| 15 | * charset.h (charset_mule_unicode_0100_24ff) | ||
| 16 | (charset_mule_unicode_2500_33ff, charset_mule_unicode_e000_ffff): | ||
| 17 | Extern them. | ||
| 18 | |||
| 19 | * charset.c (charset_mule_unicode_0100_24ff) | ||
| 20 | (charset_mule_unicode_2500_33ff, charset_mule_unicode_e000_ffff): | ||
| 21 | New variables. | ||
| 22 | (Fsetup_special_charsets): Initialize them. | ||
| 23 | |||
| 24 | * xterm.c (handle_one_xevent): Handle keysyms directly mapped to | ||
| 25 | supported Unicode characters. | ||
| 26 | |||
| 27 | 2005-10-25 Jason Rumney <jasonr@gnu.org> | ||
| 28 | |||
| 29 | * w32fns.c (w32_to_x_font): Avoid forcing font widths. | ||
| 30 | |||
| 31 | 2005-10-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> | ||
| 32 | |||
| 33 | * image.c [MAC_OS] (image_load_qt_1): Check image size. | ||
| 34 | Use GraphicsImportGetImageDescription instead of | ||
| 35 | GraphicsImportGetNaturalBounds. | ||
| 36 | [MAC_OSX] (image_load_quartz2d): Check image size. | ||
| 37 | [MAC_OS] (xpm_load_image): Likewise. | ||
| 38 | |||
| 39 | * macterm.c (last_mouse_glyph_frame): New var. | ||
| 40 | (note_mouse_movement): Say mouse moved if current frame differs | ||
| 41 | from last_mouse_glyph_frame, and update last_mouse_glyph_frame. | ||
| 42 | (XTmouse_position): Set last_mouse_glyph_frame. | ||
| 43 | (XTread_socket): Clear last_mouse_glyph_frame on mouse up/down event. | ||
| 44 | (mac_draw_string_common) [MAC_OSX && WORDS_BIG_ENDIAN]: Fix typo. | ||
| 45 | Use EndianU16_BtoN. | ||
| 46 | (mac_draw_string_common) [MAC_OSX]: Don't use ATSUClearLayoutControls. | ||
| 47 | (x_per_char_metric, XLoadQueryFont) | ||
| 48 | [MAC_OS_X_VERSION_MAX_ALLOWED < 1020]: Use device origins to get | ||
| 49 | glyph bounds. | ||
| 50 | (mac_to_x_fontname, mac_do_list_fonts) | ||
| 51 | (mac_initialize_display_info): Change screen resolutions to 72dpi. | ||
| 52 | |||
| 53 | 2005-10-25 Masatake YAMATO <jet@gyve.org> | ||
| 54 | |||
| 55 | * minibuf.c (Fdisplay_completion_list): Small doc fix. | ||
| 56 | |||
| 57 | 2005-10-24 Kim F. Storm <storm@cua.dk> | ||
| 58 | |||
| 59 | * xterm.c: Undo 2005-10-23 change. | ||
| 60 | (last_mouse_glyph_frame): New var. | ||
| 61 | (note_mouse_movement): Say mouse moved if current frame differs | ||
| 62 | from last_mouse_glyph_frame, and update last_mouse_glyph_frame. | ||
| 63 | (XTmouse_position): Set last_mouse_glyph_frame. | ||
| 64 | (handle_one_xevent): Clear last_mouse_glyph_frame [instead of | ||
| 65 | last_mouse_glyph] on mouse up/down event. | ||
| 66 | |||
| 67 | * editfns.c (Fcompare_buffer_substrings): Fix last change. | ||
| 68 | |||
| 69 | 2005-10-23 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 70 | |||
| 71 | * editfns.c (Fcompare_buffer_substrings): Handle multibyte chars. | ||
| 72 | |||
| 73 | 2005-10-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | ||
| 74 | |||
| 75 | * xterm.c (note_mouse_movement): Always call note_mouse_highlight | ||
| 76 | so tool tips don't interfere with press on tool bar button. | ||
| 77 | |||
| 78 | 2005-10-23 Richard M. Stallman <rms@gnu.org> | ||
| 79 | |||
| 80 | * casetab.c (Fset_case_table): Doc fix. | ||
| 81 | |||
| 82 | * lread.c (build_load_history): Replace STREAM arg with ENTIRE. | ||
| 83 | (readevalloop): Compute ENTIRE properly. | ||
| 84 | (syms_of_lread) <load-history>: Doc fix. | ||
| 85 | |||
| 1 | 2005-10-21 Richard M. Stallman <rms@gnu.org> | 86 | 2005-10-21 Richard M. Stallman <rms@gnu.org> |
| 2 | 87 | ||
| 3 | * lread.c (Fload): Simplify gcpro structure. | 88 | * lread.c (Fload): Simplify gcpro structure. |
| @@ -8,8 +93,7 @@ | |||
| 8 | 93 | ||
| 9 | 2005-10-21 Kenichi Handa <handa@m17n.org> | 94 | 2005-10-21 Kenichi Handa <handa@m17n.org> |
| 10 | 95 | ||
| 11 | * search.c (boyer_moore): Surround the '||' part of expression in | 96 | * search.c (boyer_moore): Add parens to fix and/or precedence bug. |
| 12 | `if' condition by parentheses explicitly. | ||
| 13 | 97 | ||
| 14 | 2005-10-20 Kim F. Storm <storm@cua.dk> | 98 | 2005-10-20 Kim F. Storm <storm@cua.dk> |
| 15 | 99 | ||
diff --git a/src/casetab.c b/src/casetab.c index 874bb7599f0..a1e8b5a68fb 100644 --- a/src/casetab.c +++ b/src/casetab.c | |||
| @@ -97,8 +97,9 @@ A case table is a char-table which maps characters | |||
| 97 | to their lower-case equivalents. It also has three \"extra\" slots | 97 | to their lower-case equivalents. It also has three \"extra\" slots |
| 98 | which may be additional char-tables or nil. | 98 | which may be additional char-tables or nil. |
| 99 | These slots are called UPCASE, CANONICALIZE and EQUIVALENCES. | 99 | These slots are called UPCASE, CANONICALIZE and EQUIVALENCES. |
| 100 | UPCASE maps each character to its upper-case equivalent; | 100 | UPCASE maps each non-upper-case character to its upper-case equivalent. |
| 101 | if lower and upper case characters are in 1-1 correspondence, | 101 | (The value in UPCASE for an upper-case character is never used.) |
| 102 | If lower and upper case characters are in 1-1 correspondence, | ||
| 102 | you may use nil and the upcase table will be deduced from DOWNCASE. | 103 | you may use nil and the upcase table will be deduced from DOWNCASE. |
| 103 | CANONICALIZE maps each character to a canonical equivalent; | 104 | CANONICALIZE maps each character to a canonical equivalent; |
| 104 | any two characters that are related by case-conversion have the same | 105 | any two characters that are related by case-conversion have the same |
diff --git a/src/charset.c b/src/charset.c index 3676c9b8a71..b4f84a9e785 100644 --- a/src/charset.c +++ b/src/charset.c | |||
| @@ -63,6 +63,9 @@ int charset_katakana_jisx0201; /* JISX0201.Kana (Japanese Katakana) */ | |||
| 63 | int charset_latin_jisx0201; /* JISX0201.Roman (Japanese Roman) */ | 63 | int charset_latin_jisx0201; /* JISX0201.Roman (Japanese Roman) */ |
| 64 | int charset_big5_1; /* Big5 Level 1 (Chinese Traditional) */ | 64 | int charset_big5_1; /* Big5 Level 1 (Chinese Traditional) */ |
| 65 | int charset_big5_2; /* Big5 Level 2 (Chinese Traditional) */ | 65 | int charset_big5_2; /* Big5 Level 2 (Chinese Traditional) */ |
| 66 | int charset_mule_unicode_0100_24ff; | ||
| 67 | int charset_mule_unicode_2500_33ff; | ||
| 68 | int charset_mule_unicode_e000_ffff; | ||
| 66 | 69 | ||
| 67 | Lisp_Object Qcharset_table; | 70 | Lisp_Object Qcharset_table; |
| 68 | 71 | ||
| @@ -1688,6 +1691,12 @@ DEFUN ("setup-special-charsets", Fsetup_special_charsets, | |||
| 1688 | charset_latin_jisx0201 = charset_id_internal ("latin-jisx0201"); | 1691 | charset_latin_jisx0201 = charset_id_internal ("latin-jisx0201"); |
| 1689 | charset_big5_1 = charset_id_internal ("chinese-big5-1"); | 1692 | charset_big5_1 = charset_id_internal ("chinese-big5-1"); |
| 1690 | charset_big5_2 = charset_id_internal ("chinese-big5-2"); | 1693 | charset_big5_2 = charset_id_internal ("chinese-big5-2"); |
| 1694 | charset_mule_unicode_0100_24ff | ||
| 1695 | = charset_id_internal ("mule-unicode-0100-24ff"); | ||
| 1696 | charset_mule_unicode_2500_33ff | ||
| 1697 | = charset_id_internal ("mule-unicode-2500-33ff"); | ||
| 1698 | charset_mule_unicode_e000_ffff | ||
| 1699 | = charset_id_internal ("mule-unicode-e000-ffff"); | ||
| 1691 | return Qnil; | 1700 | return Qnil; |
| 1692 | } | 1701 | } |
| 1693 | 1702 | ||
diff --git a/src/charset.h b/src/charset.h index a5cdca21bbb..b487e1d220e 100644 --- a/src/charset.h +++ b/src/charset.h | |||
| @@ -129,6 +129,9 @@ extern int charset_katakana_jisx0201; /* JISX0201.Kana (Japanese Katakana) */ | |||
| 129 | extern int charset_latin_jisx0201; /* JISX0201.Roman (Japanese Roman) */ | 129 | extern int charset_latin_jisx0201; /* JISX0201.Roman (Japanese Roman) */ |
| 130 | extern int charset_big5_1; /* Big5 Level 1 (Chinese Traditional) */ | 130 | extern int charset_big5_1; /* Big5 Level 1 (Chinese Traditional) */ |
| 131 | extern int charset_big5_2; /* Big5 Level 2 (Chinese Traditional) */ | 131 | extern int charset_big5_2; /* Big5 Level 2 (Chinese Traditional) */ |
| 132 | extern int charset_mule_unicode_0100_24ff; | ||
| 133 | extern int charset_mule_unicode_2500_33ff; | ||
| 134 | extern int charset_mule_unicode_e000_ffff; | ||
| 132 | 135 | ||
| 133 | /* Check if CH is an ASCII character or a base leading-code. | 136 | /* Check if CH is an ASCII character or a base leading-code. |
| 134 | Nowadays, any byte can be the first byte of a character in a | 137 | Nowadays, any byte can be the first byte of a character in a |
diff --git a/src/coding.h b/src/coding.h index 158ebbf289f..42e73a36430 100644 --- a/src/coding.h +++ b/src/coding.h | |||
| @@ -601,7 +601,7 @@ struct coding_system | |||
| 601 | 601 | ||
| 602 | /* Decode the string STR using the specified coding system | 602 | /* Decode the string STR using the specified coding system |
| 603 | for system functions, if any. */ | 603 | for system functions, if any. */ |
| 604 | #define DECODE_SYSTEM(name) \ | 604 | #define DECODE_SYSTEM(str) \ |
| 605 | (! NILP (Vlocale_coding_system) \ | 605 | (! NILP (Vlocale_coding_system) \ |
| 606 | && !EQ (Vlocale_coding_system, make_number (0)) \ | 606 | && !EQ (Vlocale_coding_system, make_number (0)) \ |
| 607 | ? code_convert_string_norecord (str, Vlocale_coding_system, 0) \ | 607 | ? code_convert_string_norecord (str, Vlocale_coding_system, 0) \ |
diff --git a/src/data.c b/src/data.c index cb6c7d2c85c..9bb90ad2d6e 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -1726,7 +1726,9 @@ it is in effect whenever the current buffer has no buffer-local binding. | |||
| 1726 | A frame-local binding is actually a frame parameter value; | 1726 | A frame-local binding is actually a frame parameter value; |
| 1727 | thus, any given frame has a local binding for VARIABLE if it has | 1727 | thus, any given frame has a local binding for VARIABLE if it has |
| 1728 | a value for the frame parameter named VARIABLE. Return VARIABLE. | 1728 | a value for the frame parameter named VARIABLE. Return VARIABLE. |
| 1729 | See `modify-frame-parameters' for how to set frame parameters. */) | 1729 | |
| 1730 | This function does not in itself create any frame-local bindings for | ||
| 1731 | VARIABLE. See `modify-frame-parameters' for how to set frame parameters. */) | ||
| 1730 | (variable) | 1732 | (variable) |
| 1731 | register Lisp_Object variable; | 1733 | register Lisp_Object variable; |
| 1732 | { | 1734 | { |
diff --git a/src/editfns.c b/src/editfns.c index c3982b10cea..e7b152726e3 100644 --- a/src/editfns.c +++ b/src/editfns.c | |||
| @@ -2472,9 +2472,9 @@ determines whether case is significant or ignored. */) | |||
| 2472 | { | 2472 | { |
| 2473 | register int begp1, endp1, begp2, endp2, temp; | 2473 | register int begp1, endp1, begp2, endp2, temp; |
| 2474 | register struct buffer *bp1, *bp2; | 2474 | register struct buffer *bp1, *bp2; |
| 2475 | register Lisp_Object *trt | 2475 | register Lisp_Object trt |
| 2476 | = (!NILP (current_buffer->case_fold_search) | 2476 | = (!NILP (current_buffer->case_fold_search) |
| 2477 | ? XCHAR_TABLE (current_buffer->case_canon_table)->contents : 0); | 2477 | ? current_buffer->case_canon_table : Qnil); |
| 2478 | int chars = 0; | 2478 | int chars = 0; |
| 2479 | int i1, i2, i1_byte, i2_byte; | 2479 | int i1, i2, i1_byte, i2_byte; |
| 2480 | 2480 | ||
| @@ -2593,10 +2593,10 @@ determines whether case is significant or ignored. */) | |||
| 2593 | i2++; | 2593 | i2++; |
| 2594 | } | 2594 | } |
| 2595 | 2595 | ||
| 2596 | if (trt) | 2596 | if (!NILP (trt)) |
| 2597 | { | 2597 | { |
| 2598 | c1 = XINT (trt[c1]); | 2598 | c1 = CHAR_TABLE_TRANSLATE (trt, c1); |
| 2599 | c2 = XINT (trt[c2]); | 2599 | c2 = CHAR_TABLE_TRANSLATE (trt, c2); |
| 2600 | } | 2600 | } |
| 2601 | if (c1 < c2) | 2601 | if (c1 < c2) |
| 2602 | return make_number (- 1 - chars); | 2602 | return make_number (- 1 - chars); |
diff --git a/src/fringe.c b/src/fringe.c index 25de5aa604e..34c58db3674 100644 --- a/src/fringe.c +++ b/src/fringe.c | |||
| @@ -861,7 +861,7 @@ update_window_fringes (w, keep_current_p) | |||
| 861 | 861 | ||
| 862 | if (!done_bot) | 862 | if (!done_bot) |
| 863 | { | 863 | { |
| 864 | if (MATRIX_ROW_END_CHARPOS (row) >= BUF_ZV (XBUFFER (w->buffer)) | 864 | if (row->ends_at_zv_p |
| 865 | && !MATRIX_ROW_PARTIALLY_VISIBLE_AT_BOTTOM_P (w, row)) | 865 | && !MATRIX_ROW_PARTIALLY_VISIBLE_AT_BOTTOM_P (w, row)) |
| 866 | row->indicate_eob_p = !NILP (boundary_bot), done_bot = 1; | 866 | row->indicate_eob_p = !NILP (boundary_bot), done_bot = 1; |
| 867 | else if (y + row->height >= yb) | 867 | else if (y + row->height >= yb) |
diff --git a/src/image.c b/src/image.c index 1996d8477e9..fb3cdecaa54 100644 --- a/src/image.c +++ b/src/image.c | |||
| @@ -2291,6 +2291,7 @@ image_load_qt_1 (f, img, type, fss, dh) | |||
| 2291 | GraphicsImportComponent gi; | 2291 | GraphicsImportComponent gi; |
| 2292 | Rect rect; | 2292 | Rect rect; |
| 2293 | int width, height; | 2293 | int width, height; |
| 2294 | ImageDescriptionHandle desc_handle; | ||
| 2294 | short draw_all_pixels; | 2295 | short draw_all_pixels; |
| 2295 | Lisp_Object specified_bg; | 2296 | Lisp_Object specified_bg; |
| 2296 | XColor color; | 2297 | XColor color; |
| @@ -2326,14 +2327,22 @@ image_load_qt_1 (f, img, type, fss, dh) | |||
| 2326 | goto error; | 2327 | goto error; |
| 2327 | } | 2328 | } |
| 2328 | } | 2329 | } |
| 2329 | err = GraphicsImportGetNaturalBounds (gi, &rect); | 2330 | err = GraphicsImportGetImageDescription (gi, &desc_handle); |
| 2330 | if (err != noErr) | 2331 | if (err != noErr || desc_handle == NULL) |
| 2331 | { | 2332 | { |
| 2332 | image_error ("Error reading `%s'", img->spec, Qnil); | 2333 | image_error ("Error reading `%s'", img->spec, Qnil); |
| 2333 | goto error; | 2334 | goto error; |
| 2334 | } | 2335 | } |
| 2335 | width = img->width = rect.right - rect.left; | 2336 | width = img->width = (*desc_handle)->width; |
| 2336 | height = img->height = rect.bottom - rect.top; | 2337 | height = img->height = (*desc_handle)->height; |
| 2338 | DisposeHandle ((Handle)desc_handle); | ||
| 2339 | |||
| 2340 | if (!check_image_size (f, width, height)) | ||
| 2341 | { | ||
| 2342 | image_error ("Invalid image size", Qnil, Qnil); | ||
| 2343 | goto error; | ||
| 2344 | } | ||
| 2345 | |||
| 2337 | err = GraphicsImportDoesDrawAllPixels (gi, &draw_all_pixels); | 2346 | err = GraphicsImportDoesDrawAllPixels (gi, &draw_all_pixels); |
| 2338 | #if 0 | 2347 | #if 0 |
| 2339 | /* Don't check the error code here. It may have an undocumented | 2348 | /* Don't check the error code here. It may have an undocumented |
| @@ -2535,6 +2544,15 @@ image_load_quartz2d (f, img, png_p) | |||
| 2535 | image_error ("Error reading image `%s'", img->spec, Qnil); | 2544 | image_error ("Error reading image `%s'", img->spec, Qnil); |
| 2536 | return 0; | 2545 | return 0; |
| 2537 | } | 2546 | } |
| 2547 | width = img->width = CGImageGetWidth (image); | ||
| 2548 | height = img->height = CGImageGetHeight (image); | ||
| 2549 | |||
| 2550 | if (!check_image_size (f, width, height)) | ||
| 2551 | { | ||
| 2552 | UNGCPRO; | ||
| 2553 | image_error ("Invalid image size", Qnil, Qnil); | ||
| 2554 | return 0; | ||
| 2555 | } | ||
| 2538 | 2556 | ||
| 2539 | if (png_p) | 2557 | if (png_p) |
| 2540 | { | 2558 | { |
| @@ -2548,8 +2566,7 @@ image_load_quartz2d (f, img, png_p) | |||
| 2548 | color.blue = BLUE16_FROM_ULONG (color.pixel); | 2566 | color.blue = BLUE16_FROM_ULONG (color.pixel); |
| 2549 | } | 2567 | } |
| 2550 | } | 2568 | } |
| 2551 | width = img->width = CGImageGetWidth (image); | 2569 | |
| 2552 | height = img->height = CGImageGetHeight (image); | ||
| 2553 | if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) | 2570 | if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
| 2554 | { | 2571 | { |
| 2555 | CGImageRelease (image); | 2572 | CGImageRelease (image); |
| @@ -4190,6 +4207,13 @@ xpm_load_image (f, img, contents, end) | |||
| 4190 | || width <= 0 || height <= 0 | 4207 | || width <= 0 || height <= 0 |
| 4191 | || num_colors <= 0 || chars_per_pixel <= 0) | 4208 | || num_colors <= 0 || chars_per_pixel <= 0) |
| 4192 | goto failure; | 4209 | goto failure; |
| 4210 | |||
| 4211 | if (!check_image_size (f, width, height)) | ||
| 4212 | { | ||
| 4213 | image_error ("Invalid image size", Qnil, Qnil); | ||
| 4214 | goto failure; | ||
| 4215 | } | ||
| 4216 | |||
| 4193 | expect (','); | 4217 | expect (','); |
| 4194 | 4218 | ||
| 4195 | XSETFRAME (frame, f); | 4219 | XSETFRAME (frame, f); |
diff --git a/src/lread.c b/src/lread.c index 43c7bf6cfc2..d51e6443288 100644 --- a/src/lread.c +++ b/src/lread.c | |||
| @@ -1199,33 +1199,34 @@ openp (path, str, suffixes, storeptr, predicate) | |||
| 1199 | 1199 | ||
| 1200 | /* Merge the list we've accumulated of globals from the current input source | 1200 | /* Merge the list we've accumulated of globals from the current input source |
| 1201 | into the load_history variable. The details depend on whether | 1201 | into the load_history variable. The details depend on whether |
| 1202 | the source has an associated file name or not. */ | 1202 | the source has an associated file name or not. |
| 1203 | |||
| 1204 | FILENAME is the file name that we are loading from. | ||
| 1205 | ENTIRE is 1 if loading that entire file, 0 if evaluating part of it. */ | ||
| 1203 | 1206 | ||
| 1204 | static void | 1207 | static void |
| 1205 | build_load_history (stream, source) | 1208 | build_load_history (filename, entire) |
| 1206 | FILE *stream; | 1209 | Lisp_Object filename; |
| 1207 | Lisp_Object source; | 1210 | int entire; |
| 1208 | { | 1211 | { |
| 1209 | register Lisp_Object tail, prev, newelt; | 1212 | register Lisp_Object tail, prev, newelt; |
| 1210 | register Lisp_Object tem, tem2; | 1213 | register Lisp_Object tem, tem2; |
| 1211 | register int foundit, loading; | 1214 | register int foundit = 0; |
| 1212 | |||
| 1213 | loading = stream || !NARROWED; | ||
| 1214 | 1215 | ||
| 1215 | tail = Vload_history; | 1216 | tail = Vload_history; |
| 1216 | prev = Qnil; | 1217 | prev = Qnil; |
| 1217 | foundit = 0; | 1218 | |
| 1218 | while (CONSP (tail)) | 1219 | while (CONSP (tail)) |
| 1219 | { | 1220 | { |
| 1220 | tem = XCAR (tail); | 1221 | tem = XCAR (tail); |
| 1221 | 1222 | ||
| 1222 | /* Find the feature's previous assoc list... */ | 1223 | /* Find the feature's previous assoc list... */ |
| 1223 | if (!NILP (Fequal (source, Fcar (tem)))) | 1224 | if (!NILP (Fequal (filename, Fcar (tem)))) |
| 1224 | { | 1225 | { |
| 1225 | foundit = 1; | 1226 | foundit = 1; |
| 1226 | 1227 | ||
| 1227 | /* If we're loading, remove it. */ | 1228 | /* If we're loading the entire file, remove old data. */ |
| 1228 | if (loading) | 1229 | if (entire) |
| 1229 | { | 1230 | { |
| 1230 | if (NILP (prev)) | 1231 | if (NILP (prev)) |
| 1231 | Vload_history = XCDR (tail); | 1232 | Vload_history = XCDR (tail); |
| @@ -1257,10 +1258,10 @@ build_load_history (stream, source) | |||
| 1257 | QUIT; | 1258 | QUIT; |
| 1258 | } | 1259 | } |
| 1259 | 1260 | ||
| 1260 | /* If we're loading, cons the new assoc onto the front of load-history, | 1261 | /* If we're loading an entire file, cons the new assoc onto the |
| 1261 | the most-recently-loaded position. Also do this if we didn't find | 1262 | front of load-history, the most-recently-loaded position. Also |
| 1262 | an existing member for the current source. */ | 1263 | do this if we didn't find an existing member for the file. */ |
| 1263 | if (loading || !foundit) | 1264 | if (entire || !foundit) |
| 1264 | Vload_history = Fcons (Fnreverse (Vcurrent_load_list), | 1265 | Vload_history = Fcons (Fnreverse (Vcurrent_load_list), |
| 1265 | Vload_history); | 1266 | Vload_history); |
| 1266 | } | 1267 | } |
| @@ -1415,7 +1416,9 @@ readevalloop (readcharfun, stream, sourcename, evalfun, | |||
| 1415 | } | 1416 | } |
| 1416 | } | 1417 | } |
| 1417 | 1418 | ||
| 1418 | build_load_history (stream, sourcename); | 1419 | build_load_history (sourcename, |
| 1420 | stream || (start == BEG && end == Z)); | ||
| 1421 | |||
| 1419 | UNGCPRO; | 1422 | UNGCPRO; |
| 1420 | 1423 | ||
| 1421 | unbind_to (count, Qnil); | 1424 | unbind_to (count, Qnil); |
| @@ -3897,8 +3900,8 @@ An element `(t . SYMBOL)' precedes an entry `(defun . FUNCTION)', | |||
| 3897 | and means that SYMBOL was an autoload before this file redefined it | 3900 | and means that SYMBOL was an autoload before this file redefined it |
| 3898 | as a function. | 3901 | as a function. |
| 3899 | 3902 | ||
| 3900 | For a preloaded file, the file name recorded is relative to the main Lisp | 3903 | During preloading, the file name recorded is relative to the main Lisp |
| 3901 | directory. These names are converted to absolute by `file-loadhist-lookup'. */); | 3904 | directory. These file names are converted to absolute at startup. */); |
| 3902 | Vload_history = Qnil; | 3905 | Vload_history = Qnil; |
| 3903 | 3906 | ||
| 3904 | DEFVAR_LISP ("load-file-name", &Vload_file_name, | 3907 | DEFVAR_LISP ("load-file-name", &Vload_file_name, |
diff --git a/src/macterm.c b/src/macterm.c index a4fe2342a63..70120bdf59d 100644 --- a/src/macterm.c +++ b/src/macterm.c | |||
| @@ -165,6 +165,7 @@ struct frame *pending_autoraise_frame; | |||
| 165 | /* Where the mouse was last time we reported a mouse event. */ | 165 | /* Where the mouse was last time we reported a mouse event. */ |
| 166 | 166 | ||
| 167 | static Rect last_mouse_glyph; | 167 | static Rect last_mouse_glyph; |
| 168 | static FRAME_PTR last_mouse_glyph_frame; | ||
| 168 | 169 | ||
| 169 | /* The scroll bar in which the last X motion event occurred. | 170 | /* The scroll bar in which the last X motion event occurred. |
| 170 | 171 | ||
| @@ -716,10 +717,10 @@ mac_draw_string_common (f, gc, x, y, buf, nchars, mode, bytes_per_char) | |||
| 716 | #ifndef WORDS_BIG_ENDIAN | 717 | #ifndef WORDS_BIG_ENDIAN |
| 717 | { | 718 | { |
| 718 | int i; | 719 | int i; |
| 719 | Unichar *text = (Unichar *)buf; | 720 | UniChar *text = (UniChar *)buf; |
| 720 | 721 | ||
| 721 | for (i = 0; i < nchars; i++) | 722 | for (i = 0; i < nchars; i++) |
| 722 | text[i] = buf[2*i] << 8 | buf[2*i+1]; | 723 | text[i] = EndianU16_BtoN (text[i]); |
| 723 | } | 724 | } |
| 724 | #endif | 725 | #endif |
| 725 | err = atsu_get_text_layout_with_text_ptr ((ConstUniCharArrayPtr)buf, | 726 | err = atsu_get_text_layout_with_text_ptr ((ConstUniCharArrayPtr)buf, |
| @@ -773,11 +774,18 @@ mac_draw_string_common (f, gc, x, y, buf, nchars, mode, bytes_per_char) | |||
| 773 | ATSUDrawText (text_layout, | 774 | ATSUDrawText (text_layout, |
| 774 | kATSUFromTextBeginning, kATSUToTextEnd, | 775 | kATSUFromTextBeginning, kATSUToTextEnd, |
| 775 | Long2Fix (x), Long2Fix (port_height - y)); | 776 | Long2Fix (x), Long2Fix (port_height - y)); |
| 776 | ATSUClearLayoutControls (text_layout, | ||
| 777 | sizeof (tags) / sizeof (tags[0]), | ||
| 778 | tags); | ||
| 779 | CGContextSynchronize (context); | 777 | CGContextSynchronize (context); |
| 780 | QDEndCGContext (port, &context); | 778 | QDEndCGContext (port, &context); |
| 779 | #if 0 | ||
| 780 | /* This doesn't work on Mac OS X 10.1. */ | ||
| 781 | ATSUClearLayoutControls (text_layout, | ||
| 782 | sizeof (tags) / sizeof (tags[0]), | ||
| 783 | tags); | ||
| 784 | #else | ||
| 785 | ATSUSetLayoutControls (text_layout, | ||
| 786 | sizeof (tags) / sizeof (tags[0]), | ||
| 787 | tags, sizes, values); | ||
| 788 | #endif | ||
| 781 | } | 789 | } |
| 782 | #endif | 790 | #endif |
| 783 | } | 791 | } |
| @@ -1666,8 +1674,12 @@ x_per_char_metric (font, char2b) | |||
| 1666 | if (err == noErr) | 1674 | if (err == noErr) |
| 1667 | err = ATSUGetGlyphBounds (text_layout, 0, 0, | 1675 | err = ATSUGetGlyphBounds (text_layout, 0, 0, |
| 1668 | kATSUFromTextBeginning, kATSUToTextEnd, | 1676 | kATSUFromTextBeginning, kATSUToTextEnd, |
| 1669 | kATSUseFractionalOrigins, 1, | 1677 | #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020 |
| 1670 | &glyph_bounds, NULL); | 1678 | kATSUseFractionalOrigins, |
| 1679 | #else | ||
| 1680 | kATSUseDeviceOrigins, | ||
| 1681 | #endif | ||
| 1682 | 1, &glyph_bounds, NULL); | ||
| 1671 | UNBLOCK_INPUT; | 1683 | UNBLOCK_INPUT; |
| 1672 | if (err != noErr) | 1684 | if (err != noErr) |
| 1673 | pcm = NULL; | 1685 | pcm = NULL; |
| @@ -3910,13 +3922,15 @@ note_mouse_movement (frame, pos) | |||
| 3910 | return 1; | 3922 | return 1; |
| 3911 | } | 3923 | } |
| 3912 | /* Has the mouse moved off the glyph it was on at the last sighting? */ | 3924 | /* Has the mouse moved off the glyph it was on at the last sighting? */ |
| 3913 | if (!PtInRect (*pos, &last_mouse_glyph)) | 3925 | if (frame != last_mouse_glyph_frame |
| 3926 | || !PtInRect (*pos, &last_mouse_glyph)) | ||
| 3914 | { | 3927 | { |
| 3915 | frame->mouse_moved = 1; | 3928 | frame->mouse_moved = 1; |
| 3916 | last_mouse_scroll_bar = Qnil; | 3929 | last_mouse_scroll_bar = Qnil; |
| 3917 | note_mouse_highlight (frame, pos->h, pos->v); | 3930 | note_mouse_highlight (frame, pos->h, pos->v); |
| 3918 | /* Remember which glyph we're now on. */ | 3931 | /* Remember which glyph we're now on. */ |
| 3919 | remember_mouse_glyph (frame, pos->h, pos->v, &last_mouse_glyph); | 3932 | remember_mouse_glyph (frame, pos->h, pos->v, &last_mouse_glyph); |
| 3933 | last_mouse_glyph_frame = frame; | ||
| 3920 | return 1; | 3934 | return 1; |
| 3921 | } | 3935 | } |
| 3922 | 3936 | ||
| @@ -4021,6 +4035,7 @@ XTmouse_position (fp, insist, bar_window, part, x, y, time) | |||
| 4021 | GetMouse (&mouse_pos); | 4035 | GetMouse (&mouse_pos); |
| 4022 | remember_mouse_glyph (f1, mouse_pos.h, mouse_pos.v, | 4036 | remember_mouse_glyph (f1, mouse_pos.h, mouse_pos.v, |
| 4023 | &last_mouse_glyph); | 4037 | &last_mouse_glyph); |
| 4038 | last_mouse_glyph_frame = f1; | ||
| 4024 | 4039 | ||
| 4025 | *bar_window = Qnil; | 4040 | *bar_window = Qnil; |
| 4026 | *part = 0; | 4041 | *part = 0; |
| @@ -6572,7 +6587,7 @@ mac_to_x_fontname (name, size, style, charset) | |||
| 6572 | 6587 | ||
| 6573 | sprintf (xf, "%s-%c-normal--%d-%d-%d-%d-m-%d-%s", | 6588 | sprintf (xf, "%s-%c-normal--%d-%d-%d-%d-m-%d-%s", |
| 6574 | style & bold ? "bold" : "medium", style & italic ? 'i' : 'r', | 6589 | style & bold ? "bold" : "medium", style & italic ? 'i' : 'r', |
| 6575 | size, size * 10, size ? 75 : 0, size ? 75 : 0, size * 10, charset); | 6590 | size, size * 10, size ? 72 : 0, size ? 72 : 0, size * 10, charset); |
| 6576 | 6591 | ||
| 6577 | result = xmalloc (strlen (foundry) + strlen (family) + strlen (xf) + 3 + 1); | 6592 | result = xmalloc (strlen (foundry) + strlen (family) + strlen (xf) + 3 + 1); |
| 6578 | sprintf (result, "-%s-%s-%s", foundry, family, xf); | 6593 | sprintf (result, "-%s-%s-%s", foundry, family, xf); |
| @@ -7061,7 +7076,7 @@ mac_do_list_fonts (pattern, maxnames) | |||
| 7061 | continue; | 7076 | continue; |
| 7062 | memcpy (scaled, font_name_table[i], former_len); | 7077 | memcpy (scaled, font_name_table[i], former_len); |
| 7063 | sprintf (scaled + former_len, | 7078 | sprintf (scaled + former_len, |
| 7064 | "-%d-%d-75-75-m-%d-%s", | 7079 | "-%d-%d-72-72-m-%d-%s", |
| 7065 | scl_val[XLFD_SCL_PIXEL_SIZE], | 7080 | scl_val[XLFD_SCL_PIXEL_SIZE], |
| 7066 | scl_val[XLFD_SCL_POINT_SIZE], | 7081 | scl_val[XLFD_SCL_POINT_SIZE], |
| 7067 | scl_val[XLFD_SCL_AVGWIDTH], | 7082 | scl_val[XLFD_SCL_AVGWIDTH], |
| @@ -7409,8 +7424,12 @@ XLoadQueryFont (Display *dpy, char *fontname) | |||
| 7409 | if (err == noErr) | 7424 | if (err == noErr) |
| 7410 | err = ATSUGetGlyphBounds (text_layout, 0, 0, | 7425 | err = ATSUGetGlyphBounds (text_layout, 0, 0, |
| 7411 | kATSUFromTextBeginning, kATSUToTextEnd, | 7426 | kATSUFromTextBeginning, kATSUToTextEnd, |
| 7412 | kATSUseFractionalOrigins, 1, | 7427 | #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020 |
| 7413 | &glyph_bounds, NULL); | 7428 | kATSUseFractionalOrigins, |
| 7429 | #else | ||
| 7430 | kATSUseDeviceOrigins, | ||
| 7431 | #endif | ||
| 7432 | 1, &glyph_bounds, NULL); | ||
| 7414 | if (err == noErr) | 7433 | if (err == noErr) |
| 7415 | { | 7434 | { |
| 7416 | xassert (glyph_bounds.lowerRight.x - glyph_bounds.lowerLeft.x | 7435 | xassert (glyph_bounds.lowerRight.x - glyph_bounds.lowerLeft.x |
| @@ -9501,6 +9520,7 @@ XTread_socket (sd, expected, hold_quit) | |||
| 9501 | != eventNotHandledErr) | 9520 | != eventNotHandledErr) |
| 9502 | break; | 9521 | break; |
| 9503 | #endif | 9522 | #endif |
| 9523 | last_mouse_glyph_frame = 0; | ||
| 9504 | 9524 | ||
| 9505 | if (dpyinfo->grabbed && last_mouse_frame | 9525 | if (dpyinfo->grabbed && last_mouse_frame |
| 9506 | && FRAME_LIVE_P (last_mouse_frame)) | 9526 | && FRAME_LIVE_P (last_mouse_frame)) |
| @@ -10230,8 +10250,8 @@ mac_initialize_display_info () | |||
| 10230 | main_device_handle = LMGetMainDevice(); | 10250 | main_device_handle = LMGetMainDevice(); |
| 10231 | 10251 | ||
| 10232 | dpyinfo->reference_count = 0; | 10252 | dpyinfo->reference_count = 0; |
| 10233 | dpyinfo->resx = 75.0; | 10253 | dpyinfo->resx = 72.0; |
| 10234 | dpyinfo->resy = 75.0; | 10254 | dpyinfo->resy = 72.0; |
| 10235 | dpyinfo->color_p = TestDeviceAttribute (main_device_handle, gdDevType); | 10255 | dpyinfo->color_p = TestDeviceAttribute (main_device_handle, gdDevType); |
| 10236 | #ifdef MAC_OSX | 10256 | #ifdef MAC_OSX |
| 10237 | /* HasDepth returns true if it is possible to have a 32 bit display, | 10257 | /* HasDepth returns true if it is possible to have a 32 bit display, |
diff --git a/src/minibuf.c b/src/minibuf.c index cdee2ad8300..71a0f15b72a 100644 --- a/src/minibuf.c +++ b/src/minibuf.c | |||
| @@ -2369,7 +2369,7 @@ properties of `highlight'. | |||
| 2369 | At the end, this runs the normal hook `completion-setup-hook'. | 2369 | At the end, this runs the normal hook `completion-setup-hook'. |
| 2370 | It can find the completion buffer in `standard-output'. | 2370 | It can find the completion buffer in `standard-output'. |
| 2371 | The optional second arg COMMON-SUBSTRING is a string. | 2371 | The optional second arg COMMON-SUBSTRING is a string. |
| 2372 | It is used to put faces, `completions-first-difference` and | 2372 | It is used to put faces, `completions-first-difference' and |
| 2373 | `completions-common-part' on the completion buffer. The | 2373 | `completions-common-part' on the completion buffer. The |
| 2374 | `completions-common-part' face is put on the common substring | 2374 | `completions-common-part' face is put on the common substring |
| 2375 | specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil, | 2375 | specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil, |
diff --git a/src/w32fns.c b/src/w32fns.c index 93469418137..e18ee3d43a9 100644 --- a/src/w32fns.c +++ b/src/w32fns.c | |||
| @@ -5284,9 +5284,13 @@ w32_to_x_font (lplogfont, lpxstr, len, specific_charset) | |||
| 5284 | strcpy (height_pixels, "*"); | 5284 | strcpy (height_pixels, "*"); |
| 5285 | strcpy (height_dpi, "*"); | 5285 | strcpy (height_dpi, "*"); |
| 5286 | } | 5286 | } |
| 5287 | |||
| 5288 | #if 0 /* Never put the width in the xfld. It fails on fonts with | ||
| 5289 | double-width characters. */ | ||
| 5287 | if (lplogfont->lfWidth) | 5290 | if (lplogfont->lfWidth) |
| 5288 | sprintf (width_pixels, "%u", lplogfont->lfWidth * 10); | 5291 | sprintf (width_pixels, "%u", lplogfont->lfWidth * 10); |
| 5289 | else | 5292 | else |
| 5293 | #endif | ||
| 5290 | strcpy (width_pixels, "*"); | 5294 | strcpy (width_pixels, "*"); |
| 5291 | 5295 | ||
| 5292 | _snprintf (lpxstr, len - 1, | 5296 | _snprintf (lpxstr, len - 1, |
diff --git a/src/xterm.c b/src/xterm.c index 2aa1095f27c..1adcb4fb4d1 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -248,6 +248,7 @@ static unsigned long ignore_next_mouse_click_timeout; | |||
| 248 | /* Where the mouse was last time we reported a mouse event. */ | 248 | /* Where the mouse was last time we reported a mouse event. */ |
| 249 | 249 | ||
| 250 | static XRectangle last_mouse_glyph; | 250 | static XRectangle last_mouse_glyph; |
| 251 | static FRAME_PTR last_mouse_glyph_frame; | ||
| 251 | static Lisp_Object last_mouse_press_frame; | 252 | static Lisp_Object last_mouse_press_frame; |
| 252 | 253 | ||
| 253 | /* The scroll bar in which the last X motion event occurred. | 254 | /* The scroll bar in which the last X motion event occurred. |
| @@ -3602,20 +3603,24 @@ note_mouse_movement (frame, event) | |||
| 3602 | frame->mouse_moved = 1; | 3603 | frame->mouse_moved = 1; |
| 3603 | last_mouse_scroll_bar = Qnil; | 3604 | last_mouse_scroll_bar = Qnil; |
| 3604 | note_mouse_highlight (frame, -1, -1); | 3605 | note_mouse_highlight (frame, -1, -1); |
| 3606 | last_mouse_glyph_frame = 0; | ||
| 3605 | return 1; | 3607 | return 1; |
| 3606 | } | 3608 | } |
| 3607 | 3609 | ||
| 3610 | |||
| 3608 | /* Has the mouse moved off the glyph it was on at the last sighting? */ | 3611 | /* Has the mouse moved off the glyph it was on at the last sighting? */ |
| 3609 | if (event->x < last_mouse_glyph.x | 3612 | if (frame != last_mouse_glyph_frame |
| 3610 | || event->x >= last_mouse_glyph.x + last_mouse_glyph.width | 3613 | || event->x < last_mouse_glyph.x |
| 3611 | || event->y < last_mouse_glyph.y | 3614 | || event->x >= last_mouse_glyph.x + last_mouse_glyph.width |
| 3612 | || event->y >= last_mouse_glyph.y + last_mouse_glyph.height) | 3615 | || event->y < last_mouse_glyph.y |
| 3616 | || event->y >= last_mouse_glyph.y + last_mouse_glyph.height) | ||
| 3613 | { | 3617 | { |
| 3614 | frame->mouse_moved = 1; | 3618 | frame->mouse_moved = 1; |
| 3615 | last_mouse_scroll_bar = Qnil; | 3619 | last_mouse_scroll_bar = Qnil; |
| 3616 | note_mouse_highlight (frame, event->x, event->y); | 3620 | note_mouse_highlight (frame, event->x, event->y); |
| 3617 | /* Remember which glyph we're now on. */ | 3621 | /* Remember which glyph we're now on. */ |
| 3618 | remember_mouse_glyph (frame, event->x, event->y, &last_mouse_glyph); | 3622 | remember_mouse_glyph (frame, event->x, event->y, &last_mouse_glyph); |
| 3623 | last_mouse_glyph_frame = frame; | ||
| 3619 | return 1; | 3624 | return 1; |
| 3620 | } | 3625 | } |
| 3621 | 3626 | ||
| @@ -3827,6 +3832,7 @@ XTmouse_position (fp, insist, bar_window, part, x, y, time) | |||
| 3827 | the frame are divided into. */ | 3832 | the frame are divided into. */ |
| 3828 | 3833 | ||
| 3829 | remember_mouse_glyph (f1, win_x, win_y, &last_mouse_glyph); | 3834 | remember_mouse_glyph (f1, win_x, win_y, &last_mouse_glyph); |
| 3835 | last_mouse_glyph_frame = f1; | ||
| 3830 | 3836 | ||
| 3831 | *bar_window = Qnil; | 3837 | *bar_window = Qnil; |
| 3832 | *part = 0; | 3838 | *part = 0; |
| @@ -6245,12 +6251,33 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit) | |||
| 6245 | { | 6251 | { |
| 6246 | inev.ie.kind = ASCII_KEYSTROKE_EVENT; | 6252 | inev.ie.kind = ASCII_KEYSTROKE_EVENT; |
| 6247 | inev.ie.code = keysym; | 6253 | inev.ie.code = keysym; |
| 6248 | goto done_keysym; | 6254 | goto done_keysym; |
| 6249 | } | 6255 | } |
| 6250 | 6256 | ||
| 6251 | /* Now non-ASCII. */ | 6257 | /* Keysyms directly mapped to supported Unicode characters. */ |
| 6252 | if (HASH_TABLE_P (Vx_keysym_table) | 6258 | if ((keysym >= 0x01000100 && keysym <= 0x010033ff) |
| 6253 | && (NATNUMP (c = Fgethash (make_number (keysym), | 6259 | || (keysym >= 0x0100e000 && keysym <= 0x0100ffff)) |
| 6260 | { | ||
| 6261 | int code, charset_id, c1, c2; | ||
| 6262 | |||
| 6263 | if (keysym < 0x01002500) | ||
| 6264 | charset_id = charset_mule_unicode_0100_24ff, | ||
| 6265 | code = (keysym & 0xFFFF) - 0x100; | ||
| 6266 | else if (keysym < 0x0100e000) | ||
| 6267 | charset_id = charset_mule_unicode_2500_33ff, | ||
| 6268 | code = (keysym & 0xFFFF) - 0x2500; | ||
| 6269 | else | ||
| 6270 | charset_id = charset_mule_unicode_e000_ffff, | ||
| 6271 | code = (keysym & 0xFFFF) - 0xe000; | ||
| 6272 | c1 = (code / 96) + 32, c2 = (code % 96) + 32; | ||
| 6273 | inev.ie.kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT; | ||
| 6274 | inev.ie.code = MAKE_CHAR (charset_id, c1, c2); | ||
| 6275 | goto done_keysym; | ||
| 6276 | } | ||
| 6277 | |||
| 6278 | /* Now non-ASCII. */ | ||
| 6279 | if (HASH_TABLE_P (Vx_keysym_table) | ||
| 6280 | && (NATNUMP (c = Fgethash (make_number (keysym), | ||
| 6254 | Vx_keysym_table, | 6281 | Vx_keysym_table, |
| 6255 | Qnil)))) | 6282 | Qnil)))) |
| 6256 | { | 6283 | { |
| @@ -6649,7 +6676,7 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit) | |||
| 6649 | int tool_bar_p = 0; | 6676 | int tool_bar_p = 0; |
| 6650 | 6677 | ||
| 6651 | bzero (&compose_status, sizeof (compose_status)); | 6678 | bzero (&compose_status, sizeof (compose_status)); |
| 6652 | bzero (&last_mouse_glyph, sizeof (last_mouse_glyph)); | 6679 | last_mouse_glyph_frame = 0; |
| 6653 | 6680 | ||
| 6654 | if (dpyinfo->grabbed | 6681 | if (dpyinfo->grabbed |
| 6655 | && last_mouse_frame | 6682 | && last_mouse_frame |