aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/composite
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/composite')
-rw-r--r--xorg-server/composite/compalloc.c8
-rw-r--r--xorg-server/composite/compext.c4
-rw-r--r--xorg-server/composite/compinit.c21
-rw-r--r--xorg-server/composite/compint.h3
-rw-r--r--xorg-server/composite/compoverlay.c4
-rw-r--r--xorg-server/composite/compwindow.c7
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)],