Merge remote branch 'whot/for-keith'
This commit is contained in:
commit
e424d58123
|
@ -738,7 +738,11 @@ CheckPhysLimits(
|
||||||
new.y = pSprite->physLimits.y2 - 1;
|
new.y = pSprite->physLimits.y2 - 1;
|
||||||
if (pSprite->hotShape)
|
if (pSprite->hotShape)
|
||||||
ConfineToShape(pDev, pSprite->hotShape, &new.x, &new.y);
|
ConfineToShape(pDev, pSprite->hotShape, &new.x, &new.y);
|
||||||
if ((pScreen != pSprite->hotPhys.pScreen) ||
|
if ((
|
||||||
|
#ifdef PANORAMIX
|
||||||
|
noPanoramiXExtension &&
|
||||||
|
#endif
|
||||||
|
(pScreen != pSprite->hotPhys.pScreen)) ||
|
||||||
(new.x != pSprite->hotPhys.x) || (new.y != pSprite->hotPhys.y))
|
(new.x != pSprite->hotPhys.x) || (new.y != pSprite->hotPhys.y))
|
||||||
{
|
{
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
|
|
|
@ -43,6 +43,7 @@ from The Open Group.
|
||||||
#include <X11/keysym.h>
|
#include <X11/keysym.h>
|
||||||
#include "xserver-properties.h"
|
#include "xserver-properties.h"
|
||||||
#include "exevents.h"
|
#include "exevents.h"
|
||||||
|
#include "extinit.h"
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
LegalModifier(unsigned int key, DeviceIntPtr pDev)
|
LegalModifier(unsigned int key, DeviceIntPtr pDev)
|
||||||
|
@ -136,10 +137,15 @@ void
|
||||||
InitInput(int argc, char *argv[])
|
InitInput(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
DeviceIntPtr p, k;
|
DeviceIntPtr p, k;
|
||||||
|
Atom xiclass;
|
||||||
p = AddInputDevice(serverClient, vfbMouseProc, TRUE);
|
p = AddInputDevice(serverClient, vfbMouseProc, TRUE);
|
||||||
k = AddInputDevice(serverClient, vfbKeybdProc, TRUE);
|
k = AddInputDevice(serverClient, vfbKeybdProc, TRUE);
|
||||||
RegisterPointerDevice(p);
|
RegisterPointerDevice(p);
|
||||||
|
xiclass = MakeAtom(XI_MOUSE, sizeof(XI_MOUSE) - 1, TRUE);
|
||||||
|
AssignTypeAndName(p, xiclass, "Xvfb mouse");
|
||||||
RegisterKeyboardDevice(k);
|
RegisterKeyboardDevice(k);
|
||||||
|
xiclass = MakeAtom(XI_KEYBOARD, sizeof(XI_KEYBOARD) - 1, TRUE);
|
||||||
|
AssignTypeAndName(k, xiclass, "Xvfb keyboard");
|
||||||
(void)mieqInit();
|
(void)mieqInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -432,7 +432,7 @@ extern void CreateClassesChangedEvent(EventListPtr event,
|
||||||
DeviceIntPtr master,
|
DeviceIntPtr master,
|
||||||
DeviceIntPtr slave,
|
DeviceIntPtr slave,
|
||||||
int type);
|
int type);
|
||||||
extern int GetPointerEvents(
|
extern _X_EXPORT int GetPointerEvents(
|
||||||
EventListPtr events,
|
EventListPtr events,
|
||||||
DeviceIntPtr pDev,
|
DeviceIntPtr pDev,
|
||||||
int type,
|
int type,
|
||||||
|
@ -442,7 +442,7 @@ extern int GetPointerEvents(
|
||||||
int num_valuators,
|
int num_valuators,
|
||||||
int *valuators);
|
int *valuators);
|
||||||
|
|
||||||
extern int GetKeyboardEvents(
|
extern _X_EXPORT int GetKeyboardEvents(
|
||||||
EventListPtr events,
|
EventListPtr events,
|
||||||
DeviceIntPtr pDev,
|
DeviceIntPtr pDev,
|
||||||
int type,
|
int type,
|
||||||
|
@ -493,7 +493,7 @@ extern int AttachDevice(ClientPtr client,
|
||||||
extern _X_EXPORT DeviceIntPtr GetPairedDevice(DeviceIntPtr kbd);
|
extern _X_EXPORT DeviceIntPtr GetPairedDevice(DeviceIntPtr kbd);
|
||||||
extern DeviceIntPtr GetMaster(DeviceIntPtr dev, int type);
|
extern DeviceIntPtr GetMaster(DeviceIntPtr dev, int type);
|
||||||
|
|
||||||
extern int AllocDevicePair(ClientPtr client,
|
extern _X_EXPORT int AllocDevicePair(ClientPtr client,
|
||||||
char* name,
|
char* name,
|
||||||
DeviceIntPtr* ptr,
|
DeviceIntPtr* ptr,
|
||||||
DeviceIntPtr* keybd,
|
DeviceIntPtr* keybd,
|
||||||
|
@ -505,7 +505,7 @@ extern void DeepCopyDeviceClasses(DeviceIntPtr from,
|
||||||
DeviceChangedEvent *dce);
|
DeviceChangedEvent *dce);
|
||||||
|
|
||||||
/* Helper functions. */
|
/* Helper functions. */
|
||||||
extern int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
|
extern _X_EXPORT int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
|
||||||
KeyCode **modkeymap, int *max_keys_per_mod);
|
KeyCode **modkeymap, int *max_keys_per_mod);
|
||||||
extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map,
|
extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map,
|
||||||
int max_keys_per_mod);
|
int max_keys_per_mod);
|
||||||
|
|
266
mi/midispcur.c
266
mi/midispcur.c
|
@ -59,9 +59,9 @@ static DevPrivateKey miDCScreenKey = &miDCScreenKeyIndex;
|
||||||
|
|
||||||
static Bool miDCCloseScreen(int index, ScreenPtr pScreen);
|
static Bool miDCCloseScreen(int index, ScreenPtr pScreen);
|
||||||
|
|
||||||
/* per device private data */
|
/* per device per-screen private data */
|
||||||
static int miDCSpriteKeyIndex;
|
static int miDCSpriteKeyIndex[MAXSCREENS];
|
||||||
static DevPrivateKey miDCSpriteKey = &miDCSpriteKeyIndex;
|
static DevPrivateKey miDCSpriteKey = miDCSpriteKeyIndex;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GCPtr pSourceGC, pMaskGC;
|
GCPtr pSourceGC, pMaskGC;
|
||||||
|
@ -75,10 +75,10 @@ typedef struct {
|
||||||
#endif
|
#endif
|
||||||
} miDCBufferRec, *miDCBufferPtr;
|
} miDCBufferRec, *miDCBufferPtr;
|
||||||
|
|
||||||
#define MIDCBUFFER(dev) \
|
#define MIDCBUFFER(dev, screen) \
|
||||||
((DevHasCursor(dev)) ? \
|
((DevHasCursor(dev)) ? \
|
||||||
(miDCBufferPtr)dixLookupPrivate(&dev->devPrivates, miDCSpriteKey) : \
|
(miDCBufferPtr)dixLookupPrivate(&dev->devPrivates, miDCSpriteKey + (screen)->myNum) : \
|
||||||
(miDCBufferPtr)dixLookupPrivate(&dev->u.master->devPrivates, miDCSpriteKey))
|
(miDCBufferPtr)dixLookupPrivate(&dev->u.master->devPrivates, miDCSpriteKey + (screen)->myNum))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The core pointer buffer will point to the index of the virtual core pointer
|
* The core pointer buffer will point to the index of the virtual core pointer
|
||||||
|
@ -158,10 +158,6 @@ miDCInitialize (ScreenPtr pScreen, miPointerScreenFuncPtr screenFuncs)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define tossGC(gc) (gc ? FreeGC (gc, (GContext) 0) : 0)
|
|
||||||
#define tossPix(pix) (pix ? (*pScreen->DestroyPixmap) (pix) : TRUE)
|
|
||||||
#define tossPict(pict) (pict ? FreePicture (pict, 0) : 0)
|
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
miDCCloseScreen (int index, ScreenPtr pScreen)
|
miDCCloseScreen (int index, ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
|
@ -183,7 +179,6 @@ miDCRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ARGB_CURSOR
|
#ifdef ARGB_CURSOR
|
||||||
#define EnsurePicture(picture,draw,win) (picture || miDCMakePicture(&picture,draw,win))
|
|
||||||
|
|
||||||
static VisualPtr
|
static VisualPtr
|
||||||
miDCGetWindowVisual (WindowPtr pWin)
|
miDCGetWindowVisual (WindowPtr pWin)
|
||||||
|
@ -415,12 +410,8 @@ miDCPutBits (
|
||||||
(*maskGC->ops->PushPixels) (maskGC, pPriv->maskBits, pDrawable, w, h, x, y);
|
(*maskGC->ops->PushPixels) (maskGC, pPriv->maskBits, pDrawable, w, h, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define EnsureGC(gc,win) (gc || miDCMakeGC(&gc, win))
|
|
||||||
|
|
||||||
static GCPtr
|
static GCPtr
|
||||||
miDCMakeGC(
|
miDCMakeGC(WindowPtr pWin)
|
||||||
GCPtr *ppGC,
|
|
||||||
WindowPtr pWin)
|
|
||||||
{
|
{
|
||||||
GCPtr pGC;
|
GCPtr pGC;
|
||||||
int status;
|
int status;
|
||||||
|
@ -431,7 +422,6 @@ miDCMakeGC(
|
||||||
pGC = CreateGC((DrawablePtr)pWin,
|
pGC = CreateGC((DrawablePtr)pWin,
|
||||||
GCSubwindowMode|GCGraphicsExposures, gcvals, &status,
|
GCSubwindowMode|GCGraphicsExposures, gcvals, &status,
|
||||||
(XID)0, serverClient);
|
(XID)0, serverClient);
|
||||||
*ppGC = pGC;
|
|
||||||
return pGC;
|
return pGC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -456,22 +446,11 @@ miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
|
||||||
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
||||||
miDCScreenKey);
|
miDCScreenKey);
|
||||||
pWin = WindowTable[pScreen->myNum];
|
pWin = WindowTable[pScreen->myNum];
|
||||||
pBuffer = MIDCBUFFER(pDev);
|
pBuffer = MIDCBUFFER(pDev, pScreen);
|
||||||
|
|
||||||
#ifdef ARGB_CURSOR
|
#ifdef ARGB_CURSOR
|
||||||
if (pPriv->pPicture)
|
if (pPriv->pPicture)
|
||||||
{
|
{
|
||||||
/* see comment in miDCPutUpCursor */
|
|
||||||
if (pBuffer->pRootPicture &&
|
|
||||||
pBuffer->pRootPicture->pDrawable &&
|
|
||||||
pBuffer->pRootPicture->pDrawable->pScreen != pScreen)
|
|
||||||
{
|
|
||||||
tossPict(pBuffer->pRootPicture);
|
|
||||||
pBuffer->pRootPicture = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!EnsurePicture(pBuffer->pRootPicture, &pWin->drawable, pWin))
|
|
||||||
return FALSE;
|
|
||||||
CompositePicture (PictOpOver,
|
CompositePicture (PictOpOver,
|
||||||
pPriv->pPicture,
|
pPriv->pPicture,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -484,33 +463,6 @@ miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* XXX: Before MPX, the sourceGC and maskGC were attached to the
|
|
||||||
* screen, and would switch as the screen switches. With mpx we have
|
|
||||||
* the GC's attached to the device now, so each time we switch screen
|
|
||||||
* we need to make sure the GC's are allocated on the new screen.
|
|
||||||
* This is ... not optimal. (whot)
|
|
||||||
*/
|
|
||||||
if (pBuffer->pSourceGC && pScreen != pBuffer->pSourceGC->pScreen)
|
|
||||||
{
|
|
||||||
tossGC(pBuffer->pSourceGC);
|
|
||||||
pBuffer->pSourceGC = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pBuffer->pMaskGC && pScreen != pBuffer->pMaskGC->pScreen)
|
|
||||||
{
|
|
||||||
tossGC(pBuffer->pMaskGC);
|
|
||||||
pBuffer->pMaskGC = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!EnsureGC(pBuffer->pSourceGC, pWin))
|
|
||||||
return FALSE;
|
|
||||||
if (!EnsureGC(pBuffer->pMaskGC, pWin))
|
|
||||||
{
|
|
||||||
FreeGC (pBuffer->pSourceGC, (GContext) 0);
|
|
||||||
pBuffer->pSourceGC = 0;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
miDCPutBits ((DrawablePtr)pWin, pPriv,
|
miDCPutBits ((DrawablePtr)pWin, pPriv,
|
||||||
pBuffer->pSourceGC, pBuffer->pMaskGC,
|
pBuffer->pSourceGC, pBuffer->pMaskGC,
|
||||||
x, y, pCursor->bits->width, pCursor->bits->height,
|
x, y, pCursor->bits->width, pCursor->bits->height,
|
||||||
|
@ -531,7 +483,7 @@ miDCSaveUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
|
||||||
|
|
||||||
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
||||||
miDCScreenKey);
|
miDCScreenKey);
|
||||||
pBuffer = MIDCBUFFER(pDev);
|
pBuffer = MIDCBUFFER(pDev, pScreen);
|
||||||
|
|
||||||
pSave = pBuffer->pSave;
|
pSave = pBuffer->pSave;
|
||||||
pWin = WindowTable[pScreen->myNum];
|
pWin = WindowTable[pScreen->myNum];
|
||||||
|
@ -544,14 +496,7 @@ miDCSaveUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
|
||||||
if (!pSave)
|
if (!pSave)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
/* see comment in miDCPutUpCursor */
|
|
||||||
if (pBuffer->pSaveGC && pBuffer->pSaveGC->pScreen != pScreen)
|
|
||||||
{
|
|
||||||
tossGC(pBuffer->pSaveGC);
|
|
||||||
pBuffer->pSaveGC = NULL;
|
|
||||||
}
|
|
||||||
if (!EnsureGC(pBuffer->pSaveGC, pWin))
|
|
||||||
return FALSE;
|
|
||||||
pGC = pBuffer->pSaveGC;
|
pGC = pBuffer->pSaveGC;
|
||||||
if (pSave->drawable.serialNumber != pGC->serialNumber)
|
if (pSave->drawable.serialNumber != pGC->serialNumber)
|
||||||
ValidateGC ((DrawablePtr) pSave, pGC);
|
ValidateGC ((DrawablePtr) pSave, pGC);
|
||||||
|
@ -572,20 +517,13 @@ miDCRestoreUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
|
||||||
|
|
||||||
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
||||||
miDCScreenKey);
|
miDCScreenKey);
|
||||||
pBuffer = MIDCBUFFER(pDev);
|
pBuffer = MIDCBUFFER(pDev, pScreen);
|
||||||
pSave = pBuffer->pSave;
|
pSave = pBuffer->pSave;
|
||||||
|
|
||||||
pWin = WindowTable[pScreen->myNum];
|
pWin = WindowTable[pScreen->myNum];
|
||||||
if (!pSave)
|
if (!pSave)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
/* see comment in miDCPutUpCursor */
|
|
||||||
if (pBuffer->pRestoreGC && pBuffer->pRestoreGC->pScreen != pScreen)
|
|
||||||
{
|
|
||||||
tossGC(pBuffer->pRestoreGC);
|
|
||||||
pBuffer->pRestoreGC = NULL;
|
|
||||||
}
|
|
||||||
if (!EnsureGC(pBuffer->pRestoreGC, pWin))
|
|
||||||
return FALSE;
|
|
||||||
pGC = pBuffer->pRestoreGC;
|
pGC = pBuffer->pRestoreGC;
|
||||||
if (pWin->drawable.serialNumber != pGC->serialNumber)
|
if (pWin->drawable.serialNumber != pGC->serialNumber)
|
||||||
ValidateGC ((DrawablePtr) pWin, pGC);
|
ValidateGC ((DrawablePtr) pWin, pGC);
|
||||||
|
@ -607,7 +545,7 @@ miDCChangeSave (DeviceIntPtr pDev, ScreenPtr pScreen,
|
||||||
|
|
||||||
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
||||||
miDCScreenKey);
|
miDCScreenKey);
|
||||||
pBuffer = MIDCBUFFER(pDev);
|
pBuffer = MIDCBUFFER(pDev, pScreen);
|
||||||
|
|
||||||
pSave = pBuffer->pSave;
|
pSave = pBuffer->pSave;
|
||||||
pWin = WindowTable[pScreen->myNum];
|
pWin = WindowTable[pScreen->myNum];
|
||||||
|
@ -616,14 +554,7 @@ miDCChangeSave (DeviceIntPtr pDev, ScreenPtr pScreen,
|
||||||
*/
|
*/
|
||||||
if (!pSave)
|
if (!pSave)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
/* see comment in miDCPutUpCursor */
|
|
||||||
if (pBuffer->pRestoreGC && pBuffer->pRestoreGC->pScreen != pScreen)
|
|
||||||
{
|
|
||||||
tossGC(pBuffer->pRestoreGC);
|
|
||||||
pBuffer->pRestoreGC = NULL;
|
|
||||||
}
|
|
||||||
if (!EnsureGC(pBuffer->pRestoreGC, pWin))
|
|
||||||
return FALSE;
|
|
||||||
pGC = pBuffer->pRestoreGC;
|
pGC = pBuffer->pRestoreGC;
|
||||||
if (pWin->drawable.serialNumber != pGC->serialNumber)
|
if (pWin->drawable.serialNumber != pGC->serialNumber)
|
||||||
ValidateGC ((DrawablePtr) pWin, pGC);
|
ValidateGC ((DrawablePtr) pWin, pGC);
|
||||||
|
@ -662,14 +593,7 @@ miDCChangeSave (DeviceIntPtr pDev, ScreenPtr pScreen,
|
||||||
(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,
|
(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,
|
||||||
0, sourcey, -dx, copyh, x + dx, desty);
|
0, sourcey, -dx, copyh, x + dx, desty);
|
||||||
}
|
}
|
||||||
/* see comment in miDCPutUpCursor */
|
|
||||||
if (pBuffer->pSaveGC && pBuffer->pSaveGC->pScreen != pScreen)
|
|
||||||
{
|
|
||||||
tossGC(pBuffer->pSaveGC);
|
|
||||||
pBuffer->pSaveGC = NULL;
|
|
||||||
}
|
|
||||||
if (!EnsureGC(pBuffer->pSaveGC, pWin))
|
|
||||||
return FALSE;
|
|
||||||
pGC = pBuffer->pSaveGC;
|
pGC = pBuffer->pSaveGC;
|
||||||
if (pSave->drawable.serialNumber != pGC->serialNumber)
|
if (pSave->drawable.serialNumber != pGC->serialNumber)
|
||||||
ValidateGC ((DrawablePtr) pSave, pGC);
|
ValidateGC ((DrawablePtr) pSave, pGC);
|
||||||
|
@ -766,7 +690,7 @@ miDCMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
|
||||||
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
|
||||||
miDCScreenKey);
|
miDCScreenKey);
|
||||||
pWin = WindowTable[pScreen->myNum];
|
pWin = WindowTable[pScreen->myNum];
|
||||||
pBuffer = MIDCBUFFER(pDev);
|
pBuffer = MIDCBUFFER(pDev, pScreen);
|
||||||
|
|
||||||
pTemp = pBuffer->pTemp;
|
pTemp = pBuffer->pTemp;
|
||||||
if (!pTemp ||
|
if (!pTemp ||
|
||||||
|
@ -809,17 +733,9 @@ miDCMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
|
||||||
#ifdef ARGB_CURSOR
|
#ifdef ARGB_CURSOR
|
||||||
if (pPriv->pPicture)
|
if (pPriv->pPicture)
|
||||||
{
|
{
|
||||||
/* see comment in miDCPutUpCursor */
|
if (!pBuffer->pTempPicture)
|
||||||
if (pBuffer->pTempPicture &&
|
miDCMakePicture(&pBuffer->pTempPicture, &pTemp->drawable, pWin);
|
||||||
pBuffer->pTempPicture->pDrawable &&
|
|
||||||
pBuffer->pTempPicture->pDrawable->pScreen != pScreen)
|
|
||||||
{
|
|
||||||
tossPict(pBuffer->pTempPicture);
|
|
||||||
pBuffer->pTempPicture = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!EnsurePicture(pBuffer->pTempPicture, &pTemp->drawable, pWin))
|
|
||||||
return FALSE;
|
|
||||||
CompositePicture (PictOpOver,
|
CompositePicture (PictOpOver,
|
||||||
pPriv->pPicture,
|
pPriv->pPicture,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -832,38 +748,12 @@ miDCMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (!pBuffer->pPixSourceGC)
|
|
||||||
{
|
|
||||||
pBuffer->pPixSourceGC = CreateGC ((DrawablePtr)pTemp,
|
|
||||||
GCGraphicsExposures, &gcval, &status, (XID)0, serverClient);
|
|
||||||
if (!pBuffer->pPixSourceGC)
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (!pBuffer->pPixMaskGC)
|
|
||||||
{
|
|
||||||
pBuffer->pPixMaskGC = CreateGC ((DrawablePtr)pTemp,
|
|
||||||
GCGraphicsExposures, &gcval, &status, (XID)0, serverClient);
|
|
||||||
if (!pBuffer->pPixMaskGC)
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
miDCPutBits ((DrawablePtr)pTemp, pPriv,
|
miDCPutBits ((DrawablePtr)pTemp, pPriv,
|
||||||
pBuffer->pPixSourceGC, pBuffer->pPixMaskGC,
|
pBuffer->pPixSourceGC, pBuffer->pPixMaskGC,
|
||||||
dx, dy, pCursor->bits->width, pCursor->bits->height,
|
dx, dy, pCursor->bits->width, pCursor->bits->height,
|
||||||
source, mask);
|
source, mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* see comment in miDCPutUpCursor */
|
|
||||||
if (pBuffer->pRestoreGC && pBuffer->pRestoreGC->pScreen != pScreen)
|
|
||||||
{
|
|
||||||
tossGC(pBuffer->pRestoreGC);
|
|
||||||
pBuffer->pRestoreGC = NULL;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* copy the temporary pixmap onto the screen
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!EnsureGC(pBuffer->pRestoreGC, pWin))
|
|
||||||
return FALSE;
|
|
||||||
pGC = pBuffer->pRestoreGC;
|
pGC = pBuffer->pRestoreGC;
|
||||||
if (pWin->drawable.serialNumber != pGC->serialNumber)
|
if (pWin->drawable.serialNumber != pGC->serialNumber)
|
||||||
ValidateGC ((DrawablePtr) pWin, pGC);
|
ValidateGC ((DrawablePtr) pWin, pGC);
|
||||||
|
@ -877,51 +767,113 @@ miDCMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
|
||||||
static Bool
|
static Bool
|
||||||
miDCDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
|
miDCDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
miDCBufferPtr pBuffer;
|
miDCBufferPtr pBuffer;
|
||||||
|
WindowPtr pWin;
|
||||||
|
XID gcval = FALSE;
|
||||||
|
int status;
|
||||||
|
int i;
|
||||||
|
|
||||||
pBuffer = xalloc(sizeof(miDCBufferRec));
|
if (!DevHasCursor(pDev))
|
||||||
dixSetPrivate(&pDev->devPrivates, miDCSpriteKey, pBuffer);
|
return TRUE;
|
||||||
|
|
||||||
|
for (i = 0; i < screenInfo.numScreens; i++)
|
||||||
|
{
|
||||||
|
pScreen = screenInfo.screens[i];
|
||||||
|
|
||||||
|
pBuffer = xalloc(sizeof(miDCBufferRec));
|
||||||
|
if (!pBuffer)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
|
dixSetPrivate(&pDev->devPrivates, miDCSpriteKey + pScreen->myNum, pBuffer);
|
||||||
|
pWin = WindowTable[pScreen->myNum];
|
||||||
|
|
||||||
|
pBuffer->pSourceGC = miDCMakeGC(pWin);
|
||||||
|
if (!pBuffer->pSourceGC)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
|
pBuffer->pMaskGC = miDCMakeGC(pWin);
|
||||||
|
if (!pBuffer->pMaskGC)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
|
pBuffer->pSaveGC = miDCMakeGC(pWin);
|
||||||
|
if (!pBuffer->pSaveGC)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
|
pBuffer->pRestoreGC = miDCMakeGC(pWin);
|
||||||
|
if (!pBuffer->pRestoreGC)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
|
pBuffer->pMoveGC = CreateGC ((DrawablePtr)pWin,
|
||||||
|
GCGraphicsExposures, &gcval, &status, (XID)0, serverClient);
|
||||||
|
if (!pBuffer->pMoveGC)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
|
pBuffer->pPixSourceGC = CreateGC ((DrawablePtr)pWin,
|
||||||
|
GCGraphicsExposures, &gcval, &status, (XID)0, serverClient);
|
||||||
|
if (!pBuffer->pPixSourceGC)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
|
pBuffer->pPixMaskGC = CreateGC ((DrawablePtr)pWin,
|
||||||
|
GCGraphicsExposures, &gcval, &status, (XID)0, serverClient);
|
||||||
|
if (!pBuffer->pPixMaskGC)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
pBuffer->pSourceGC =
|
|
||||||
pBuffer->pMaskGC =
|
|
||||||
pBuffer->pSaveGC =
|
|
||||||
pBuffer->pRestoreGC =
|
|
||||||
pBuffer->pMoveGC =
|
|
||||||
pBuffer->pPixSourceGC =
|
|
||||||
pBuffer->pPixMaskGC = NULL;
|
|
||||||
#ifdef ARGB_CURSOR
|
#ifdef ARGB_CURSOR
|
||||||
pBuffer->pRootPicture = NULL;
|
miDCMakePicture(&pBuffer->pRootPicture, &pWin->drawable, pWin);
|
||||||
pBuffer->pTempPicture = NULL;
|
if (!pBuffer->pRootPicture)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
|
pBuffer->pTempPicture = NULL;
|
||||||
#endif
|
#endif
|
||||||
pBuffer->pSave = pBuffer->pTemp = NULL;
|
|
||||||
|
// these get (re)allocated lazily depending on the cursor size
|
||||||
|
pBuffer->pSave = pBuffer->pTemp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
failure:
|
||||||
|
|
||||||
|
miDCDeviceCleanup(pDev, pScreen);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
miDCDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
|
miDCDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
miDCBufferPtr pBuffer;
|
miDCBufferPtr pBuffer;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (DevHasCursor(pDev))
|
if (DevHasCursor(pDev))
|
||||||
{
|
{
|
||||||
pBuffer = MIDCBUFFER(pDev);
|
for (i = 0; i < screenInfo.numScreens; i++)
|
||||||
tossGC (pBuffer->pSourceGC);
|
{
|
||||||
tossGC (pBuffer->pMaskGC);
|
pScreen = screenInfo.screens[i];
|
||||||
tossGC (pBuffer->pSaveGC);
|
|
||||||
tossGC (pBuffer->pRestoreGC);
|
pBuffer = MIDCBUFFER(pDev, pScreen);
|
||||||
tossGC (pBuffer->pMoveGC);
|
|
||||||
tossGC (pBuffer->pPixSourceGC);
|
if (pBuffer)
|
||||||
tossGC (pBuffer->pPixMaskGC);
|
{
|
||||||
tossPix (pBuffer->pSave);
|
if (pBuffer->pSourceGC) FreeGC(pBuffer->pSourceGC, (GContext) 0);
|
||||||
tossPix (pBuffer->pTemp);
|
if (pBuffer->pMaskGC) FreeGC(pBuffer->pMaskGC, (GContext) 0);
|
||||||
|
if (pBuffer->pSaveGC) FreeGC(pBuffer->pSaveGC, (GContext) 0);
|
||||||
|
if (pBuffer->pRestoreGC) FreeGC(pBuffer->pRestoreGC, (GContext) 0);
|
||||||
|
if (pBuffer->pMoveGC) FreeGC(pBuffer->pMoveGC, (GContext) 0);
|
||||||
|
if (pBuffer->pPixSourceGC) FreeGC(pBuffer->pPixSourceGC, (GContext) 0);
|
||||||
|
if (pBuffer->pPixMaskGC) FreeGC(pBuffer->pPixMaskGC, (GContext) 0);
|
||||||
|
|
||||||
#ifdef ARGB_CURSOR
|
#ifdef ARGB_CURSOR
|
||||||
#if 0 /* This has been free()d before */
|
if (pBuffer->pRootPicture) FreePicture(pBuffer->pRootPicture, 0);
|
||||||
tossPict (pScreenPriv->pRootPicture);
|
if (pBuffer->pTempPicture) FreePicture(pBuffer->pTempPicture, 0);
|
||||||
#endif
|
|
||||||
tossPict (pBuffer->pTempPicture);
|
|
||||||
#endif
|
#endif
|
||||||
xfree(pBuffer);
|
|
||||||
dixSetPrivate(&pDev->devPrivates, miDCSpriteKey, NULL);
|
if (pBuffer->pSave) (*pScreen->DestroyPixmap)(pBuffer->pSave);
|
||||||
|
if (pBuffer->pTemp) (*pScreen->DestroyPixmap)(pBuffer->pTemp);
|
||||||
|
|
||||||
|
xfree(pBuffer);
|
||||||
|
dixSetPrivate(&pDev->devPrivates, miDCSpriteKey + pScreen->myNum, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -765,10 +765,8 @@ miSpriteRealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
|
||||||
|
|
||||||
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
||||||
if (!IsMaster(pDev) && !pDev->u.master)
|
if (!IsMaster(pDev) && !pDev->u.master)
|
||||||
{
|
|
||||||
ErrorF("[mi] miSpriteRealizeCursor called for floating device.\n");
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
pCursorInfo = MISPRITE(pDev);
|
pCursorInfo = MISPRITE(pDev);
|
||||||
|
|
||||||
if (pCursor == pCursorInfo->pCursor)
|
if (pCursor == pCursorInfo->pCursor)
|
||||||
|
@ -796,10 +794,8 @@ miSpriteSetCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
|
||||||
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
||||||
|
|
||||||
if (!IsMaster(pDev) && !pDev->u.master)
|
if (!IsMaster(pDev) && !pDev->u.master)
|
||||||
{
|
|
||||||
ErrorF("[mi] miSpriteSetCursor called for floating device.\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
pPointer = MISPRITE(pDev);
|
pPointer = MISPRITE(pDev);
|
||||||
|
|
||||||
if (!pCursor)
|
if (!pCursor)
|
||||||
|
@ -913,10 +909,8 @@ miSpriteMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
|
||||||
|
|
||||||
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
||||||
if (!IsMaster(pDev) && !pDev->u.master)
|
if (!IsMaster(pDev) && !pDev->u.master)
|
||||||
{
|
|
||||||
ErrorF("[mi] miSpriteMoveCursor called for floating device.\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
pCursor = MISPRITE(pDev)->pCursor;
|
pCursor = MISPRITE(pDev)->pCursor;
|
||||||
|
|
||||||
miSpriteSetCursor (pDev, pScreen, pCursor, x, y);
|
miSpriteSetCursor (pDev, pScreen, pCursor, x, y);
|
||||||
|
@ -981,10 +975,8 @@ miSpriteRemoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen)
|
||||||
|
|
||||||
|
|
||||||
if (!IsMaster(pDev) && !pDev->u.master)
|
if (!IsMaster(pDev) && !pDev->u.master)
|
||||||
{
|
|
||||||
ErrorF("[mi] miSpriteRemoveCursor called for floating device.\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
DamageDrawInternal (pScreen, TRUE);
|
DamageDrawInternal (pScreen, TRUE);
|
||||||
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
||||||
pCursorInfo = MISPRITE(pDev);
|
pCursorInfo = MISPRITE(pDev);
|
||||||
|
@ -1021,10 +1013,8 @@ miSpriteSaveUnderCursor(DeviceIntPtr pDev, ScreenPtr pScreen)
|
||||||
miCursorInfoPtr pCursorInfo;
|
miCursorInfoPtr pCursorInfo;
|
||||||
|
|
||||||
if (!IsMaster(pDev) && !pDev->u.master)
|
if (!IsMaster(pDev) && !pDev->u.master)
|
||||||
{
|
|
||||||
ErrorF("[mi] miSpriteSaveUnderCursor called for floating device.\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
DamageDrawInternal (pScreen, TRUE);
|
DamageDrawInternal (pScreen, TRUE);
|
||||||
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
||||||
pCursorInfo = MISPRITE(pDev);
|
pCursorInfo = MISPRITE(pDev);
|
||||||
|
@ -1064,10 +1054,7 @@ miSpriteRestoreCursor (DeviceIntPtr pDev, ScreenPtr pScreen)
|
||||||
miCursorInfoPtr pCursorInfo;
|
miCursorInfoPtr pCursorInfo;
|
||||||
|
|
||||||
if (!IsMaster(pDev) && !pDev->u.master)
|
if (!IsMaster(pDev) && !pDev->u.master)
|
||||||
{
|
|
||||||
ErrorF("[mi] miSpriteRestoreCursor called for floating device.\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
DamageDrawInternal (pScreen, TRUE);
|
DamageDrawInternal (pScreen, TRUE);
|
||||||
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
||||||
|
@ -1108,10 +1095,8 @@ miSpriteComputeSaved (DeviceIntPtr pDev, ScreenPtr pScreen)
|
||||||
miCursorInfoPtr pCursorInfo;
|
miCursorInfoPtr pCursorInfo;
|
||||||
|
|
||||||
if (!IsMaster(pDev) && !pDev->u.master)
|
if (!IsMaster(pDev) && !pDev->u.master)
|
||||||
{
|
|
||||||
ErrorF("[mi] miSpriteComputeSaved called for floating device.\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
pScreenPriv = dixLookupPrivate(&pScreen->devPrivates, miSpriteScreenKey);
|
||||||
pCursorInfo = MISPRITE(pDev);
|
pCursorInfo = MISPRITE(pDev);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user