Signed-off-by: Adam Jackson <a...@redhat.com> --- dix/window.c | 69 ++++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 37 deletions(-)
diff --git a/dix/window.c b/dix/window.c index ea3920c869..55290577d9 100644 --- a/dix/window.c +++ b/dix/window.c @@ -1589,7 +1589,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client) for the tile to be rotated, and the correct function selected. */ if (((vmaskCopy & (CWBorderPixel | CWBorderPixmap)) || borderRelative) - && pWin->viewable && HasBorder(pWin)) { + && pWin->paintable && HasBorder(pWin)) { RegionRec exposed; RegionNull(&exposed); @@ -2163,7 +2163,7 @@ ReflectStackChange(WindowPtr pWin, WindowPtr pSib, VTKind kind) { /* Note that pSib might be NULL */ - Bool WasViewable = (Bool) pWin->viewable; + Bool WasPaintable = (Bool) pWin->paintable; Bool anyMarked; WindowPtr pFirstChange; WindowPtr pLayerWin; @@ -2175,7 +2175,7 @@ ReflectStackChange(WindowPtr pWin, WindowPtr pSib, VTKind kind) pFirstChange = MoveWindowInStack(pWin, pSib); - if (WasViewable) { + if (WasPaintable) { anyMarked = (*pScreen->MarkOverlappedWindows) (pWin, pFirstChange, &pLayerWin); if (pLayerWin != pWin) @@ -2614,7 +2614,7 @@ RealizeTree(WindowPtr pWin) pChild = pWin; while (1) { if (pChild->mapped) { - pChild->realized = TRUE; + pChild->realized = pChild->parent->realized; pChild->viewable = (pChild->drawable.class == InputOutput); pChild->paintable = (pChild->drawable.class == InputOutput); (*Realize) (pChild); @@ -2692,7 +2692,7 @@ MapWindow(WindowPtr pWin, ClientPtr client) if (SubStrSend(pWin, pParent)) DeliverMapNotify(pWin); - if (!pParent->realized) + if (!pParent->realized && !pParent->paintable) return Success; RealizeTree(pWin); if (pWin->viewable) { @@ -2763,7 +2763,7 @@ MapSubwindows(WindowPtr pParent, ClientPtr client) if (!pFirstMapped) pFirstMapped = pWin; - if (pParent->realized) { + if (pParent->realized || pParent->paintable) { RealizeTree(pWin); if (pWin->viewable) { anyMarked |= (*pScreen->MarkOverlappedWindows) (pWin, pWin, @@ -2861,7 +2861,7 @@ UnmapWindow(WindowPtr pWin, Bool fromConfigure) { WindowPtr pParent; Bool wasRealized = (Bool) pWin->realized; - Bool wasViewable = (Bool) pWin->viewable; + Bool wasPaintable = pWin->paintable; ScreenPtr pScreen = pWin->drawable.pScreen; WindowPtr pLayerWin = pWin; @@ -2869,7 +2869,7 @@ UnmapWindow(WindowPtr pWin, Bool fromConfigure) return Success; if (SubStrSend(pWin, pParent)) DeliverUnmapNotify(pWin, fromConfigure); - if (wasViewable && !fromConfigure) { + if (wasPaintable && !fromConfigure) { pWin->valdata = UnmapValData; (*pScreen->MarkOverlappedWindows) (pWin, pWin->nextSib, &pLayerWin); (*pScreen->MarkWindow) (pLayerWin->parent); @@ -2877,13 +2877,11 @@ UnmapWindow(WindowPtr pWin, Bool fromConfigure) pWin->mapped = FALSE; if (wasRealized) UnrealizeTree(pWin, fromConfigure); - if (wasViewable) { - if (!fromConfigure) { - (*pScreen->ValidateTree) (pLayerWin->parent, pWin, VTUnmap); - (*pScreen->HandleExposures) (pLayerWin->parent); - if (pScreen->PostValidateTree) - (*pScreen->PostValidateTree) (pLayerWin->parent, pWin, VTUnmap); - } + if (wasPaintable && !fromConfigure) { + (*pScreen->ValidateTree) (pLayerWin->parent, pWin, VTUnmap); + (*pScreen->HandleExposures) (pLayerWin->parent); + if (pScreen->PostValidateTree) + (*pScreen->PostValidateTree) (pLayerWin->parent, pWin, VTUnmap); } if (wasRealized && !fromConfigure) { WindowsRestructured(); @@ -2903,7 +2901,7 @@ UnmapSubwindows(WindowPtr pWin) { WindowPtr pChild, pHead; Bool wasRealized = (Bool) pWin->realized; - Bool wasViewable = (Bool) pWin->viewable; + Bool wasPaintable = pWin->paintable; Bool anyMarked = FALSE; Mask parentNotify; WindowPtr pLayerWin = NULL; @@ -2914,7 +2912,7 @@ UnmapSubwindows(WindowPtr pWin) parentNotify = SubSend(pWin); pHead = RealChildHead(pWin); - if (wasViewable) + if (wasPaintable) pLayerWin = (*pScreen->GetLayerWindow) (pWin); for (pChild = pWin->lastChild; pChild != pHead; pChild = pChild->prevSib) { @@ -2930,31 +2928,28 @@ UnmapSubwindows(WindowPtr pWin) UnrealizeTree(pChild, FALSE); } } - if (wasViewable) { - if (anyMarked) { - if (pLayerWin->parent == pWin) - (*pScreen->MarkWindow) (pWin); - else { - WindowPtr ptmp; + if (wasPaintable && anyMarked) { + if (pLayerWin->parent == pWin) + (*pScreen->MarkWindow) (pWin); + else { + WindowPtr ptmp; - (*pScreen->MarkOverlappedWindows) (pWin, pLayerWin, NULL); - (*pScreen->MarkWindow) (pLayerWin->parent); + (*pScreen->MarkOverlappedWindows) (pWin, pLayerWin, NULL); + (*pScreen->MarkWindow) (pLayerWin->parent); - /* Windows between pWin and pLayerWin may not have been marked */ - ptmp = pWin; + /* Windows between pWin and pLayerWin may not have been marked */ + ptmp = pWin; - while (ptmp != pLayerWin->parent) { - (*pScreen->MarkWindow) (ptmp); - ptmp = ptmp->parent; - } - pHead = pWin->firstChild; + while (ptmp != pLayerWin->parent) { + (*pScreen->MarkWindow) (ptmp); + ptmp = ptmp->parent; } - (*pScreen->ValidateTree) (pLayerWin->parent, pHead, VTUnmap); - (*pScreen->HandleExposures) (pLayerWin->parent); - if (pScreen->PostValidateTree) - (*pScreen->PostValidateTree) (pLayerWin->parent, pHead, - VTUnmap); + pHead = pWin->firstChild; } + (*pScreen->ValidateTree) (pLayerWin->parent, pHead, VTUnmap); + (*pScreen->HandleExposures) (pLayerWin->parent); + if (pScreen->PostValidateTree) + (*pScreen->PostValidateTree) (pLayerWin->parent, pHead, VTUnmap); } if (wasRealized) { WindowsRestructured(); -- 2.17.0 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel