composite: Don't backfill non-bg-None windows
If there's a defined background then backfilling is a waste of effort, since exposure processing will paint that in for us. But note that we have to backfill if any children are bg=None to preserve semantics with non-composited servers. Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
d2064fbb68
commit
6dd775f57d
|
@ -472,6 +472,17 @@ compUnredirectOneSubwindow (WindowPtr pParent, WindowPtr pWin)
|
|||
return Success;
|
||||
}
|
||||
|
||||
static int
|
||||
bgNoneVisitWindow(WindowPtr pWin, void *null)
|
||||
{
|
||||
if (pWin->backgroundState != BackgroundPixmap)
|
||||
return WT_WALKCHILDREN;
|
||||
if (pWin->background.pixmap != None)
|
||||
return WT_WALKCHILDREN;
|
||||
|
||||
return WT_STOPWALKING;
|
||||
}
|
||||
|
||||
static PixmapPtr
|
||||
compNewPixmap (WindowPtr pWin, int x, int y, int w, int h)
|
||||
{
|
||||
|
@ -487,7 +498,18 @@ compNewPixmap (WindowPtr pWin, int x, int y, int w, int h)
|
|||
|
||||
pPixmap->screen_x = x;
|
||||
pPixmap->screen_y = y;
|
||||
|
||||
|
||||
/*
|
||||
* If there's no bg=None in the tree, we're done.
|
||||
*
|
||||
* We could optimize this more by collection the regions of all the
|
||||
* bg=None subwindows and feeding that in as the clip for the
|
||||
* CopyArea below, but since window trees are shallow these days it
|
||||
* might not be worth the effort.
|
||||
*/
|
||||
if (TraverseTree(pWin, bgNoneVisitWindow, NULL) == WT_NOMATCH)
|
||||
return pPixmap;
|
||||
|
||||
if (pParent->drawable.depth == pWin->drawable.depth)
|
||||
{
|
||||
GCPtr pGC = GetScratchGC (pWin->drawable.depth, pScreen);
|
||||
|
|
Loading…
Reference in New Issue
Block a user