Subject: Re: bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display

From: Bruno Félix Rezende Ribeiro <[email-masked]>
Date: Wed, 05 Nov 2014 19:38:52 -0200

Eli Zaretskii wrote:>> Date: Tue, 04 Nov 2014 19:09:07 -0200

> If we want to make sure Emacs indeed redraws its frame in your case 
> (rather than X reusing its own copy of the screen, as Andreas points 
> out), please put a breakpoint in expose_frame, and see if it breaks 
> when you invoke xrefresh.

Yes, it does.

> Does it?  We were talking all along about the simplest situation,
> when the Emacs frame has only one window and thus a single mode line,
> and the clipped text line is the last line of that window.  But this
> is by no means so in general.  Here, try this:
> 
> emacs -Q C-x d /dev RET C-x 2 C-x o C-v
> 
> At this point, you should see the lower of the 2 windows selected, 
> with its contents scrolled, such that each of the 2 windows showing
> 2 different places in /dev's directory listing.
> 
> Now invoke xrefresh to clean up the mode lines and start with a
> "clean slate".

I don't need to.  The 'C-x o' command repaints the corrupted mode-line
and the one of the lower window doesn't get corrupt with scrolling,
even with other frame sizes --- including full-screen.  Scrolling the
upper window will corrupt its mode-line again, though.

> Finally, type inside Emacs:
> 
> M-: (set-window-vscroll nil 5 t) RET
> 
> How many mode lines did that corrupt?

Immediately after the command, completely the lower one, and only
slightly the upper one.

> If both mode lines become corrupted, does xrefresh succeed in fixing 
> that?

It *does* succeed in fixing the lower mode-line (the current one).
The upper one continues slightly corrupted until it becomes the
current one (eg. by 'C-x o'), in which case it becomes fine until next
scrolling.

> Bonus points for repeating the above after setting mode-line-format
> to nil.  I expect you to see that the 2 windows corrupt each other
> in that case.

Indeed.  The upper one is corrupting the first line of the lower one.
However, scrolling the lower one redraws that line and it doesn't get
corrupted again until scrolling the upper window.

-- 
 ,= ,-_-. =.  Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF]
((_/)o o(\_)) There is no system but GNU;
 `-'(. .)`-'  GNU Linux-Libre is one of its official kernels;
     \_/      All software must be free as in freedom;