summaryrefslogtreecommitdiff
path: root/composite
diff options
context:
space:
mode:
authorDavid Reveman <davidr@novell.com>2008-06-23 22:52:43 -0400
committerDavid Reveman <davidr@novell.com>2008-10-30 03:36:56 -0400
commit9b5b102163b4eaa1b70647354fcab4f6e461c94c (patch)
tree724a6917662f448b531348b27c8ae28a1a06b587 /composite
parentdbffd0d44a33dcc84898c7a891d7ba212f65cbb8 (diff)
Fix panoramix overlay window support.
Diffstat (limited to 'composite')
-rw-r--r--composite/compext.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/composite/compext.c b/composite/compext.c
index 6e5d97a53..b8907266c 100644
--- a/composite/compext.c
+++ b/composite/compext.c
@@ -494,8 +494,7 @@ ProcCompositeGetOverlayWindow (ClientPtr client)
#ifdef PANORAMIX
if (!noPanoramiXExtension)
{
- static PanoramiXRes *overlayWin = NULL;
- PanoramiXRes *win;
+ PanoramiXRes *win, *overlayWin = NULL;
int i;
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
@@ -505,8 +504,18 @@ ProcCompositeGetOverlayWindow (ClientPtr client)
return BadWindow;
}
- FOR_NSCREENS(i) {
- rc = dixLookupResource((pointer *)&pWin, stuff->window,
+ cs = GetCompScreen(screenInfo.screens[0]);
+ if (!cs->pOverlayWin)
+ {
+ if(!(overlayWin = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
+ return BadAlloc;
+
+ overlayWin->type = XRT_WINDOW;
+ overlayWin->u.win.root = FALSE;
+ }
+
+ FOR_NSCREENS_BACKWARD(i) {
+ rc = dixLookupResource((pointer *)&pWin, win->info[i].id,
RT_WINDOW, client,
DixGetAttrAccess);
if (rc != Success)
@@ -546,14 +555,8 @@ ProcCompositeGetOverlayWindow (ClientPtr client)
}
}
- if (!overlayWin)
+ if (overlayWin)
{
- if(!(overlayWin = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
- return BadAlloc;
-
- overlayWin->type = XRT_WINDOW;
- overlayWin->u.win.root = FALSE;
-
FOR_NSCREENS(i) {
cs = GetCompScreen(screenInfo.screens[i]);
overlayWin->info[i].id = cs->pOverlayWin->drawable.id;
@@ -562,10 +565,12 @@ ProcCompositeGetOverlayWindow (ClientPtr client)
AddResource(overlayWin->info[0].id, XRT_WINDOW, overlayWin);
}
+ cs = GetCompScreen(screenInfo.screens[0]);
+
rep.type = X_Reply;
rep.sequenceNumber = client->sequence;
rep.length = 0;
- rep.overlayWin = overlayWin->info[0].id;
+ rep.overlayWin = cs->pOverlayWin->drawable.id;
if (client->swapped)
{
@@ -656,8 +661,8 @@ ProcCompositeReleaseOverlayWindow (ClientPtr client)
return BadWindow;
}
- FOR_NSCREENS(i) {
- pWin = (WindowPtr) LookupIDByType (stuff->window, RT_WINDOW);
+ FOR_NSCREENS_BACKWARD(i) {
+ pWin = (WindowPtr) LookupIDByType (win->info[i].id, RT_WINDOW);
if (!pWin)
{
client->errorValue = stuff->window;