diff options
Diffstat (limited to 'xorg-server/composite')
-rw-r--r-- | xorg-server/composite/compalloc.c | 8 | ||||
-rw-r--r-- | xorg-server/composite/compext.c | 4 | ||||
-rw-r--r-- | xorg-server/composite/compinit.c | 21 | ||||
-rw-r--r-- | xorg-server/composite/compint.h | 3 | ||||
-rw-r--r-- | xorg-server/composite/compoverlay.c | 4 | ||||
-rw-r--r-- | xorg-server/composite/compwindow.c | 7 |
6 files changed, 34 insertions, 13 deletions
diff --git a/xorg-server/composite/compalloc.c b/xorg-server/composite/compalloc.c index 9ed50becd..97869ebd6 100644 --- a/xorg-server/composite/compalloc.c +++ b/xorg-server/composite/compalloc.c @@ -156,7 +156,7 @@ compRedirectWindow(ClientPtr pClient, WindowPtr pWin, int update) return BadAccess; /* - * Allocate per-client per-window structure + * Allocate per-client per-window structure * The client *could* allocate multiple, but while supported, * it is not expected to be common */ @@ -353,7 +353,7 @@ compRedirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update) if (ccw->update == CompositeRedirectManual) return BadAccess; /* - * Allocate per-client per-window structure + * Allocate per-client per-window structure * The client *could* allocate multiple, but while supported, * it is not expected to be common */ @@ -401,7 +401,7 @@ compRedirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update) return BadAlloc; if (ccw->update == CompositeRedirectManual) { csw->update = CompositeRedirectManual; - /* + /* * tell damage extension that damage events for this client are * critical output */ @@ -430,7 +430,7 @@ compFreeClientSubwindows(WindowPtr pWin, XID id) *prev = ccw->next; if (ccw->update == CompositeRedirectManual) { - /* + /* * tell damage extension that damage events for this client are * critical output */ diff --git a/xorg-server/composite/compext.c b/xorg-server/composite/compext.c index 94a1db245..4448197da 100644 --- a/xorg-server/composite/compext.c +++ b/xorg-server/composite/compext.c @@ -298,7 +298,7 @@ ProcCompositeGetOverlayWindow(ClientPtr client) VERIFY_WINDOW(pWin, stuff->window, client, DixGetAttrAccess); pScreen = pWin->drawable.pScreen; - /* + /* * Create an OverlayClient structure to mark this client's * interest in the overlay window */ @@ -348,7 +348,7 @@ ProcCompositeReleaseOverlayWindow(ClientPtr client) REQUEST_SIZE_MATCH(xCompositeReleaseOverlayWindowReq); VERIFY_WINDOW(pWin, stuff->window, client, DixGetAttrAccess); - /* + /* * Has client queried a reference to the overlay window * on this screen? If not, generate an error. */ diff --git a/xorg-server/composite/compinit.c b/xorg-server/composite/compinit.c index 111c16e5d..3ac075a46 100644 --- a/xorg-server/composite/compinit.c +++ b/xorg-server/composite/compinit.c @@ -78,6 +78,7 @@ compCloseScreen(ScreenPtr pScreen) pScreen->PositionWindow = cs->PositionWindow; pScreen->GetImage = cs->GetImage; + pScreen->GetSpans = cs->GetSpans; pScreen->SourceValidate = cs->SourceValidate; free(cs); @@ -151,6 +152,21 @@ compGetImage(DrawablePtr pDrawable, } static void +compGetSpans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, + int nspans, char *pdstStart) +{ + ScreenPtr pScreen = pDrawable->pScreen; + CompScreenPtr cs = GetCompScreen(pScreen); + + pScreen->GetSpans = cs->GetSpans; + if (pDrawable->type == DRAWABLE_WINDOW) + compPaintChildrenToWindow((WindowPtr) pDrawable); + (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart); + cs->GetSpans = pScreen->GetSpans; + pScreen->GetSpans = compGetSpans; +} + +static void compSourceValidate(DrawablePtr pDrawable, int x, int y, int width, int height, unsigned int subWindowMode) @@ -193,7 +209,7 @@ compFindVisuallessDepth(ScreenPtr pScreen, int d) } } /* - * If there isn't one, then it's gonna be hard to have + * If there isn't one, then it's gonna be hard to have * an associated visual */ return 0; @@ -432,6 +448,9 @@ compScreenInit(ScreenPtr pScreen) cs->GetImage = pScreen->GetImage; pScreen->GetImage = compGetImage; + cs->GetSpans = pScreen->GetSpans; + pScreen->GetSpans = compGetSpans; + cs->SourceValidate = pScreen->SourceValidate; pScreen->SourceValidate = compSourceValidate; diff --git a/xorg-server/composite/compint.h b/xorg-server/composite/compint.h index 56b76c540..09241f2a2 100644 --- a/xorg-server/composite/compint.h +++ b/xorg-server/composite/compint.h @@ -76,7 +76,7 @@ /* * enable this for debugging - + #define COMPOSITE_DEBUG */ @@ -168,6 +168,7 @@ typedef struct _CompScreen { CompOverlayClientPtr pOverlayClients; GetImageProcPtr GetImage; + GetSpansProcPtr GetSpans; SourceValidateProcPtr SourceValidate; } CompScreenRec, *CompScreenPtr; diff --git a/xorg-server/composite/compoverlay.c b/xorg-server/composite/compoverlay.c index 7781a554f..2fce26dab 100644 --- a/xorg-server/composite/compoverlay.c +++ b/xorg-server/composite/compoverlay.c @@ -56,7 +56,7 @@ #include "panoramiXsrv.h" #endif -/* +/* * Delete the given overlay client list element from its screen list. */ void @@ -114,7 +114,7 @@ compCreateOverlayClient(ScreenPtr pScreen, ClientPtr pClient) pOc->pNext = cs->pOverlayClients; cs->pOverlayClients = pOc; - /* + /* * Create a resource for this element so it can be deleted * when the client goes away. */ diff --git a/xorg-server/composite/compwindow.c b/xorg-server/composite/compwindow.c index 9a6b2dae8..77bdfa23c 100644 --- a/xorg-server/composite/compwindow.c +++ b/xorg-server/composite/compwindow.c @@ -567,10 +567,11 @@ compCreateWindow(WindowPtr pWin) if (pWin->parent && ret) { CompSubwindowsPtr csw = GetCompSubwindows(pWin->parent); CompClientWindowPtr ccw; + PixmapPtr parent_pixmap = (*pScreen->GetWindowPixmap)(pWin->parent); + PixmapPtr window_pixmap = (*pScreen->GetWindowPixmap)(pWin); - (*pScreen->SetWindowPixmap) (pWin, - (*pScreen->GetWindowPixmap) (pWin-> - parent)); + if (window_pixmap != parent_pixmap) + (*pScreen->SetWindowPixmap) (pWin, parent_pixmap); if (csw) for (ccw = csw->clients; ccw; ccw = ccw->next) compRedirectWindow(clients[CLIENT_ID(ccw->id)], |