emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

'struct window' cleanup #5 [Re: 'struct window' cleanup #4]


From: Dmitry Antipov
Subject: 'struct window' cleanup #5 [Re: 'struct window' cleanup #4]
Date: Tue, 03 Jul 2012 09:54:56 +0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120614 Thunderbird/13.0.1

On 07/02/2012 09:33 PM, Eli Zaretskii wrote:

Shouldn't we test w->window_end_valid for being non-zero, before we
trust the value of w->window_end_vpos?  Zero for a vertical position
is perfectly valid, so if i is zero, you can err here.

The core idea is to have window_end_vpos (and window_end_pos) equal to -1
for just created window (i.e. pointer returned by make_window).  For such
a window, window_end_valid is always 0, and passing such a window to
main redisplay routines is an error (so there are 4 debugging checks
commented with "Just initialized windows should not pass here"). If the
window is completely initialized, window_end_vpos may be 0 and
window_end_valid may be 0 or 1.

If the "invalid" value is going to be -1, then why did you initialize
with zero above?

See above.

Bother: doesn't the comparison with w->buffer test for a specific
buffer, rather than just non-nil value?  The corresponding assignment,
viz.:

    if (accurate_p)
      {
-      w->window_end_valid = w->buffer;
+      w->window_end_valid = 1;
        w->update_mode_line = 0;
      }

seems to handle the case when the display is "accurate".  Perhaps use
a different value, like 2, for this situation?

I tried a lot, but never hits the situation where window buffer was changed
on the way from mark_window_display_accurate_1 to note_mouse_highlight (buffer
text may be changed, of course). So I suppose that w->window_end_valid = 
w->buffer
is just a synonym for w->window_end_valid = Qt.

Dmitry

Attachment: window_cleanup_5.patch
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]