+2000-07-12 Gerd Moellmann <gerd@gnu.org>
+
+ * xdisp.c (try_window_reusing_current_matrix, try_window_id):
+ Before scrolling, turn off a mouse-highlight in the window
+ being scrolled.
+
+ * xterm.c (x_update_window_end): Add parameter
+ MOUSE_FACE_OVERWRITTEN_P. If set, arrange for a mouse-highlight
+ redisplay in XTframe_up_to_date.
+ (x_clear_mouse_face): New function.
+ (x_redisplay_interface): Add pointer to x_clear_mouse_face.
+
+ * dispnew.c (make_current): Preserve the mouse_face_p flag of the
+ current glyph row.
+ (update_window_line): Add parameter MOUSE_FACE_OVERWRITTEN_P. Set
+ it when any row is written to that contains glyphs highlighted in
+ mouse-face.
+ (update_window): Call the window update end hook with new
+ parameter MOUSE_FACE_OVERWRITTEN_P.
+ (direct_output_for_insert): Give up if row contains mouse-face.
+
+ * dispextern.h (struct redisplay_interface): Add parameter
+ MOUSE_FACE_OVERWRITTEN_P to update_window_end_hook function.
+ (clear_mouse_face): New function pointer member.
+
2000-07-11 Stefan Monnier <monnier@cs.yale.edu>
* syntax.c (back_comment): Use one switch rather than a few `if's.
void (*update_window_begin_hook) P_ ((struct window *w));
/* Function to call after window W has been updated in window-based
- redisplay. CURSOR_ON_P non-zero means switch cursor on. */
- void (*update_window_end_hook) P_ ((struct window *w, int cursor_on_p));
+ redisplay. CURSOR_ON_P non-zero means switch cursor on.
+ MOUSE_FACE_OVERWRITTEN_P non-zero means that some lines in W
+ that contained glyphs in mouse-face were overwritten, so we
+ have to update the mouse hightlight. */
+ void (*update_window_end_hook) P_ ((struct window *w, int cursor_on_p,
+ int mouse_face_overwritten_p));
/* Move cursor to row/column position VPOS/HPOS, pixel coordinates
Y/X. HPOS/VPOS are window-relative row and column numbers and X/Y
/* Flush the display of frame F. For X, this is XFlush. */
void (*flush_display) P_ ((struct frame *f));
+ /* Clear the mouse hightlight in windwo W, if there is any. */
+ void (*clear_mouse_face) P_ ((struct window *w));
+
/* Set *LEFT and *RIGHT to the left and right overhang of GLYPH on
frame F. */
void (*get_glyph_overhangs) P_ ((struct glyph *glyph, struct frame *f,