There were several reasons why redisplay optimisations weren't kicking in
for gutters. This should fix the worst two offenders - extent changes in
the buffer and having more than one gutter on a frame. This should cause
the general flickering people have been seeing. I would be interested to
know if it doesn't
andy
2000-03-04 Andy Piper <andy(a)xemacs.org>
* window.h (struct window): add gutter_extent_modiff.
* window.c (allocate_window): zero out gutter_extent_modiff.
* redisplay.h: declare sync_display_line_structs.
* redisplay.c (add_glyph_rune): add a better comment.
* redisplay-output.c (sync_display_line_structs): made non-static.
(compare_runes): remove unneccesary glyph cachel access.
* gutter.h: declare gutter_extent_signal_changed_region_maybe.
* gutter.c (output_gutter): don't output the gutter if extent
changes only involve extents in buffers. use 4 sets of display
lines.
(gutter_extent_signal_changed_region_maybe): new function. Mark
extents in gutters as changed.
(update_frame_gutters): use 4 sets of display lines.
(reset_gutter_display_lines): ditto.
(free_frame_gutters): ditto.
(redraw_exposed_gutter): force output of gutters.
* frame.h (struct frame): add 4 sets of gutter display lines.
* extents.c: (extent_changed_for_redisplay): signal changes to
extents in strings in the gutter as well as extents in buffers.
--------------------------------------------------------------
Dr Andy Piper
Senior Consultant Architect, BEA Systems Ltd