Duchier-Denys@cs.yale.edu (Denys Duchier) (01/17/90)
I was hacking epoch to handle motion events, and I noticed that I was
getting quite a bit of cursor flickering when the point was in a non
left most window. After puzzling over this for a long time, I found
that `this_line_bufpos' was always 0 when the point was in such a
window, thus disabling certain optimizations (in particular, not to do
anything when nothing happened). I think I found the culprit:
in file "xdisp.c" function `display_text_line':
if (hpos == (XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0)
&& val.vpos)
{
this_line_bufpos = start;
this_line_buffer = bf_cur;
this_line_vpos = point_vpos;
this_line_start_hpos = hpos;
this_line_endpos = bf_s1 + bf_s2 + 1 - lastpos;
}
else
this_line_bufpos = 0;
this will always fail when the w->left != 0 (I think). I `fixed' it as
follows:
if ((hpos - XFASTINT (w->left)) == (XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0)
&& val.vpos)
{
this_line_bufpos = start;
this_line_buffer = bf_cur;
this_line_vpos = point_vpos;
this_line_start_hpos = hpos;
this_line_endpos = bf_s1 + bf_s2 + 1 - lastpos;
}
else
this_line_bufpos = 0;
was this a real bug? is this a real fix? anybody knows? it seems to
work, but the display code is rather hard to understand, so I'm really
not sure. I still get flickering when the same buffer appears in
several windows, but that's probably a different problem.
--Denys