Borders and unmap with Composite

Keith Packard <[email protected]>
Newsgroups gmane.comp.freedesktop.xserver
Message-ID <[email protected]>
The Composite extension provides no names for the off-screen storage that 
windows are placed in, right now I'm using the redirected window in 
IncludeInferiors mode which mostly works.  The exception is that this does 
not provide any way to get at the border contents.  I mostly don't care as 
only insane applications use borders, and the Automatic update mode does 
manage the borders correctly (as it can point at the pixmap directly).

However, it does produce quite visible artifacts on the screen when using 
twm.  And, we all know how important twm is :-)

If this were the only problem, I'd be tempted to ignore it.

However, I've discovered a visual artifact that I think I can solve at the 
same time.

When a redirected window is mapped, an off-screen pixmap is automatically
created of the right size.  Conversely, when the window is unmapped, the 
pixmap is automatically destroyed.  Creation doesn't really pose any 
problems; when the compositing manager gets around to looking at the 
mapped window the contents will be all ready (hmm, might be nice to find a 
way to wait for the window to get painted, but I digress...).

Unmap, on the other hand, automatically destroys the pixmap.  If the 
compositing manager is in the middle of constructing the screen image and 
hasn't yet seen the UnmapNotify event, it will attempt to construct the 
screen image including the now unmapped window.  The result is a visual 
flash on the screen -- the translucent effects related to the window (aka 
the shadow) is drawn, but the window contents are not.

I think I have an easy fix -- allow the compositing manager to name the 
pixmap used for off-screen compositing and destroy it when it's done using 
it.  This way, it will have a name for the object holding the border 
contents so they can be drawn, and also the pixmap will hang around after 
the window is unmapped so the old contents can be used in constructing the 
screen image -- no more flash.

While integrating the compositing manager with the window manager would 
eliminate flashing associated with managed windows, it will not eliminate 
flashing from override redirect windows, while this naming scheme will.

This seem reasonable?  It should take almost 5 minutes to implement...

-keith
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.