Mercurial > hg > xemacs-beta
diff src/frame.c @ 4968:4d35e52790f8
fix crash in glyph-cachels
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-02-03 Ben Wing <ben@xemacs.org>
* frame.c (Fmake_frame):
* glyphs.c:
* glyphs.c (NUM_PRECACHED_GLYPHS):
* glyphs.c (get_glyph_cachel_index):
* glyphs.c (FROB):
* glyphs.c (mark_glyph_cachels_as_not_updated):
* redisplay.c (regenerate_window):
* redisplay.c (redisplay_window):
When creating a frame, call reset_glyph_cachels on the minibuffer
window as well as the root window. Fixes a crash due to other
glyphs (e.g. the gutter glyph) getting in the glyph cachel before
the pre-cached glyphs that are supposed to have fixed indices
(continuation-glyph, truncation-glyph, etc.).
Add a bunch of asserts to make sure that the glyph cachels always
properly contain the pre-cached glyphs.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 03 Feb 2010 21:06:14 -0600 |
parents | 0d4c9d0f6a8d |
children | 16112448d484 |
line wrap: on
line diff
--- a/src/frame.c Wed Feb 03 20:51:18 2010 -0600 +++ b/src/frame.c Wed Feb 03 21:06:14 2010 -0600 @@ -585,6 +585,8 @@ update_frame_window_mirror (f); + /* #### Do we need to be calling reset_face_cachels here, and then again + down below? */ if (initialized && !DEVICE_STREAM_P (d)) { if (!NILP (f->minibuffer_window)) @@ -642,8 +644,19 @@ things. */ init_frame_toolbars (f); #endif + /* Added this assert recently (2-1-10); seems there should be only + two windows, root and minibufer. Probably we should just be + calling reset_*_cachels on the root window directly instead of the + selected window, but I want to make sure they are always the + same. --ben */ + assert (EQ (FRAME_SELECTED_WINDOW (f), f->root_window)); reset_face_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f))); reset_glyph_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f))); + if (!NILP (f->minibuffer_window)) + { + reset_face_cachels (XWINDOW (f->minibuffer_window)); + reset_glyph_cachels (XWINDOW (f->minibuffer_window)); + } change_frame_size (f, f->height, f->width, 0); }