Bug #13794: Update MBE extension devPrivates to new interface.
This commit is contained in:
parent
ccf6636d2c
commit
17a9714a67
40
Xext/mbuf.c
40
Xext/mbuf.c
|
@ -61,8 +61,8 @@ in this Software without prior written authorization from The Open Group.
|
||||||
|
|
||||||
static int MultibufferEventBase;
|
static int MultibufferEventBase;
|
||||||
static int MultibufferErrorBase;
|
static int MultibufferErrorBase;
|
||||||
int MultibufferScreenIndex = -1;
|
static DevPrivateKey MultibufferScreenPrivKey = &MultibufferScreenPrivKey;
|
||||||
int MultibufferWindowIndex = -1;
|
static DevPrivateKey MultibufferWindowPrivKey = &MultibufferWindowPrivKey;
|
||||||
|
|
||||||
static void PerformDisplayRequest (
|
static void PerformDisplayRequest (
|
||||||
MultibuffersPtr * /* ppMultibuffers */,
|
MultibuffersPtr * /* ppMultibuffers */,
|
||||||
|
@ -200,27 +200,16 @@ MultibufferExtensionInit()
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
MultibufferScreenPtr pMultibufferScreen;
|
MultibufferScreenPtr pMultibufferScreen;
|
||||||
|
|
||||||
/*
|
|
||||||
* allocate private pointers in windows and screens. Allocating
|
|
||||||
* window privates may seem like an unnecessary expense, but every
|
|
||||||
* PositionWindow call must check to see if the window is
|
|
||||||
* multi-buffered; a resource lookup is too expensive.
|
|
||||||
*/
|
|
||||||
MultibufferScreenIndex = AllocateScreenPrivateIndex ();
|
|
||||||
if (MultibufferScreenIndex < 0)
|
|
||||||
return;
|
|
||||||
MultibufferWindowIndex = AllocateWindowPrivateIndex ();
|
|
||||||
for (i = 0; i < screenInfo.numScreens; i++)
|
for (i = 0; i < screenInfo.numScreens; i++)
|
||||||
{
|
{
|
||||||
pScreen = screenInfo.screens[i];
|
pScreen = screenInfo.screens[i];
|
||||||
if (!AllocateWindowPrivate (pScreen, MultibufferWindowIndex, 0) ||
|
if (!(pMultibufferScreen = (MultibufferScreenPtr) xalloc (sizeof (MultibufferScreenRec))))
|
||||||
!(pMultibufferScreen = (MultibufferScreenPtr) xalloc (sizeof (MultibufferScreenRec))))
|
|
||||||
{
|
{
|
||||||
for (j = 0; j < i; j++)
|
for (j = 0; j < i; j++)
|
||||||
xfree (screenInfo.screens[j]->devPrivates[MultibufferScreenIndex].ptr);
|
xfree (dixLookupPrivate(&screenInfo.screens[j]->devPrivates, MultibufferScreenPrivKey));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pScreen->devPrivates[MultibufferScreenIndex].ptr = (pointer) pMultibufferScreen;
|
dixSetPrivate(&pScreen->devPrivates, MultibufferScreenPrivKey, pMultibufferScreen);
|
||||||
/*
|
/*
|
||||||
* wrap PositionWindow to resize the pixmap when the window
|
* wrap PositionWindow to resize the pixmap when the window
|
||||||
* changes size
|
* changes size
|
||||||
|
@ -260,14 +249,11 @@ ExtensionEntry *extEntry;
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
MultibufferScreenPtr pMultibufferScreen;
|
MultibufferScreenPtr pMultibufferScreen;
|
||||||
|
|
||||||
if (MultibufferScreenIndex < 0)
|
|
||||||
return;
|
|
||||||
for (i = 0; i < screenInfo.numScreens; i++)
|
for (i = 0; i < screenInfo.numScreens; i++)
|
||||||
{
|
{
|
||||||
pScreen = screenInfo.screens[i];
|
pScreen = screenInfo.screens[i];
|
||||||
if (pScreen->devPrivates[MultibufferScreenIndex].ptr)
|
if ((pMultibufferScreen = (MultibufferScreenPtr)dixLookupPrivate(&pScreen->devPrivates, MultibufferScreenPrivKey)))
|
||||||
{
|
{
|
||||||
pMultibufferScreen = (MultibufferScreenPtr) pScreen->devPrivates[MultibufferScreenIndex].ptr;
|
|
||||||
pScreen->PositionWindow = pMultibufferScreen->PositionWindow;
|
pScreen->PositionWindow = pMultibufferScreen->PositionWindow;
|
||||||
xfree (pMultibufferScreen);
|
xfree (pMultibufferScreen);
|
||||||
}
|
}
|
||||||
|
@ -427,7 +413,7 @@ CreateImageBuffers (pWin, nbuf, ids, action, hint)
|
||||||
pMultibuffers->lastUpdate.milliseconds = 0;
|
pMultibuffers->lastUpdate.milliseconds = 0;
|
||||||
pMultibuffers->width = width;
|
pMultibuffers->width = width;
|
||||||
pMultibuffers->height = height;
|
pMultibuffers->height = height;
|
||||||
pWin->devPrivates[MultibufferWindowIndex].ptr = (pointer) pMultibuffers;
|
dixSetPrivate(&pWin->devPrivates, MultibufferWindowPrivKey, pMultibuffers);
|
||||||
if (pClearGC) FreeScratchGC(pClearGC);
|
if (pClearGC) FreeScratchGC(pClearGC);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
@ -487,7 +473,7 @@ ProcCreateImageBuffers (client)
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.length = 0;
|
rep.length = 0;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
rep.numberBuffer = ((MultibuffersPtr) (pWin->devPrivates[MultibufferWindowIndex].ptr))->numMultibuffer;
|
rep.numberBuffer = ((MultibuffersPtr) (dixLookupPrivate(&pWin->devPrivates, MultibufferWindowPrivKey)))->numMultibuffer;
|
||||||
if (client->swapped)
|
if (client->swapped)
|
||||||
{
|
{
|
||||||
swaps(&rep.sequenceNumber, n);
|
swaps(&rep.sequenceNumber, n);
|
||||||
|
@ -1236,7 +1222,7 @@ GetBufferPointer (pWin, i)
|
||||||
{
|
{
|
||||||
MultibuffersPtr pMultibuffers;
|
MultibuffersPtr pMultibuffers;
|
||||||
|
|
||||||
if (!(pMultibuffers = (MultibuffersPtr) pWin->devPrivates[MultibufferWindowIndex].ptr))
|
if (!(pMultibuffers = (MultibuffersPtr) dixLookupPrivate(&pWin->devPrivates, MultibufferWindowPrivKey)))
|
||||||
return NULL;
|
return NULL;
|
||||||
return (DrawablePtr) pMultibuffers->buffers[i].pPixmap;
|
return (DrawablePtr) pMultibuffers->buffers[i].pPixmap;
|
||||||
}
|
}
|
||||||
|
@ -1475,7 +1461,7 @@ DestroyImageBuffers (pWin)
|
||||||
{
|
{
|
||||||
FreeResourceByType (pWin->drawable.id, MultibuffersResType, FALSE);
|
FreeResourceByType (pWin->drawable.id, MultibuffersResType, FALSE);
|
||||||
/* Zero out the window's pointer to the buffers so they won't be reused */
|
/* Zero out the window's pointer to the buffers so they won't be reused */
|
||||||
pWin->devPrivates[MultibufferWindowIndex].ptr = NULL;
|
dixSetPrivate(&pWin->devPrivates, MultibufferWindowPrivKey, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1503,11 +1489,11 @@ MultibufferPositionWindow (pWin, x, y)
|
||||||
Bool clear;
|
Bool clear;
|
||||||
|
|
||||||
pScreen = pWin->drawable.pScreen;
|
pScreen = pWin->drawable.pScreen;
|
||||||
pMultibufferScreen = (MultibufferScreenPtr) pScreen->devPrivates[MultibufferScreenIndex].ptr;
|
pMultibufferScreen = (MultibufferScreenPtr) dixLookupPrivate(&pScreen->devPrivates, MultibufferScreenPrivKey);
|
||||||
(*pMultibufferScreen->PositionWindow) (pWin, x, y);
|
(*pMultibufferScreen->PositionWindow) (pWin, x, y);
|
||||||
|
|
||||||
/* if this window is not multibuffered, we're done */
|
/* if this window is not multibuffered, we're done */
|
||||||
if (!(pMultibuffers = (MultibuffersPtr) pWin->devPrivates[MultibufferWindowIndex].ptr))
|
if (!(pMultibuffers = (MultibuffersPtr) dixLookupPrivate(&pWin->devPrivates, MultibufferWindowPrivKey)))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* if new size is same as old, we're done */
|
/* if new size is same as old, we're done */
|
||||||
|
@ -1620,7 +1606,7 @@ MultibufferDrawableDelete (value, id)
|
||||||
if (pDrawable->type == DRAWABLE_WINDOW)
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
{
|
{
|
||||||
pWin = (WindowPtr) pDrawable;
|
pWin = (WindowPtr) pDrawable;
|
||||||
pMultibuffers = (MultibuffersPtr) pWin->devPrivates[MultibufferWindowIndex].ptr;
|
pMultibuffers = (MultibuffersPtr) dixLookupPrivate(&pWin->devPrivates, MultibufferWindowPrivKey);
|
||||||
pPixmap = pMultibuffers->buffers[pMultibuffers->displayedMultibuffer].pPixmap;
|
pPixmap = pMultibuffers->buffers[pMultibuffers->displayedMultibuffer].pPixmap;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue