mi: mipointer.c cleanup, reducing code duplication, using MPHasCursor()

instead of IsMPDev()
This commit is contained in:
Peter Hutterer 2006-11-27 15:54:33 +10:30 committed by Peter Hutterer
parent a2340a7368
commit 023da4e804
2 changed files with 62 additions and 63 deletions

View File

@ -12,6 +12,14 @@ Files:
mi/misprite.c mi/misprite.c
mi/misprite.h mi/misprite.h
____________________________________________________________
mi: mipointer.c cleanup, reducing code duplication, using MPHasCursor()
instead of IsMPDev()
Files:
mi/mipointer.c
== 23.11.06 == == 23.11.06 ==
mi: closing memory leak, miPointer is freed in miPointerCloseScreen mi: closing memory leak, miPointer is freed in miPointerCloseScreen
bugfix: uninitialized pPointer in miPointerGetPosition ifndef MPX bugfix: uninitialized pPointer in miPointerGetPosition ifndef MPX

View File

@ -27,7 +27,6 @@ Except as contained in this notice, the name of The Open Group shall not be
used in advertising or otherwise to promote the sale, use or other dealings used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from The Open Group. in this Software without prior written authorization from The Open Group.
*/ */
#ifdef MPX
/* /*
* MPX additions: * MPX additions:
* Copyright © 2006 Peter Hutterer * Copyright © 2006 Peter Hutterer
@ -35,7 +34,6 @@ in this Software without prior written authorization from The Open Group.
* Author: Peter Hutterer <peter@cs.unisa.edu.au> * Author: Peter Hutterer <peter@cs.unisa.edu.au>
* *
*/ */
#endif
#ifdef HAVE_DIX_CONFIG_H #ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h> #include <dix-config.h>
@ -111,6 +109,7 @@ miPointerInitialize (pScreen, spriteFuncs, screenFuncs, waitForUpdate)
Bool waitForUpdate; Bool waitForUpdate;
{ {
miPointerScreenPtr pScreenPriv; miPointerScreenPtr pScreenPriv;
miPointerPtr pPointer;
if (miPointerGeneration != serverGeneration) if (miPointerGeneration != serverGeneration)
{ {
@ -150,26 +149,15 @@ miPointerInitialize (pScreen, spriteFuncs, screenFuncs, waitForUpdate)
/* /*
* set up the pointer object * set up the pointer object
*/ */
#if !defined MPX
miPointer = (miPointerPtr)xalloc(sizeof(miPointerRec)); miPointer = (miPointerPtr)xalloc(sizeof(miPointerRec));
if (!miPointer) if (!miPointer)
{ {
xfree((pointer)pScreenPriv); xfree((pointer)pScreenPriv);
return FALSE; return FALSE;
} }
miPointer->pScreen = NULL; pPointer = miPointer;
miPointer->pSpriteScreen = NULL; #else /* ifdef MPX */
miPointer->pCursor = NULL;
miPointer->pSpriteCursor = NULL;
miPointer->limits.x1 = 0;
miPointer->limits.x2 = 32767;
miPointer->limits.y1 = 0;
miPointer->limits.y2 = 32767;
miPointer->confined = FALSE;
miPointer->x = 0;
miPointer->y = 0;
#ifdef MPX
xfree(miPointer);
miPointer = &miMPPointers[1]; miPointer = &miMPPointers[1];
{ {
int mpPtrIdx = 0; /* loop counter */ int mpPtrIdx = 0; /* loop counter */
@ -178,17 +166,21 @@ miPointerInitialize (pScreen, spriteFuncs, screenFuncs, waitForUpdate)
*/ */
while(mpPtrIdx < MAX_DEVICES) while(mpPtrIdx < MAX_DEVICES)
{ {
miMPPointers[mpPtrIdx].pScreen = NULL; pPointer = &miMPPointers[mpPtrIdx];
miMPPointers[mpPtrIdx].pSpriteScreen = NULL; #endif
miMPPointers[mpPtrIdx].pCursor = NULL;
miMPPointers[mpPtrIdx].pSpriteCursor = NULL; pPointer->pScreen = NULL;
miMPPointers[mpPtrIdx].limits.x1 = 0; pPointer->pSpriteScreen = NULL;
miMPPointers[mpPtrIdx].limits.x2 = 32767; pPointer->pCursor = NULL;
miMPPointers[mpPtrIdx].limits.y1 = 0; pPointer->pSpriteCursor = NULL;
miMPPointers[mpPtrIdx].limits.y2 = 32767; pPointer->limits.x1 = 0;
miMPPointers[mpPtrIdx].confined = FALSE; pPointer->limits.x2 = 32767;
miMPPointers[mpPtrIdx].x = 0; pPointer->limits.y1 = 0;
miMPPointers[mpPtrIdx].y = 0; pPointer->limits.y2 = 32767;
pPointer->confined = FALSE;
pPointer->x = 0;
pPointer->y = 0;
#ifdef MPX
mpPtrIdx++; mpPtrIdx++;
} }
} }
@ -202,23 +194,26 @@ miPointerCloseScreen (index, pScreen)
int index; int index;
ScreenPtr pScreen; ScreenPtr pScreen;
{ {
int mpPointerIdx = 0;
SetupScreen(pScreen); SetupScreen(pScreen);
miPointerPtr pPointer = miPointer;
#ifdef MPX #ifdef MPX
int mpPointerIdx = 0;
while(mpPointerIdx < MAX_DEVICES) while(mpPointerIdx < MAX_DEVICES)
{ {
if (pScreen == miMPPointers[mpPointerIdx].pScreen) pPointer = &miMPPointers[mpPointerIdx];
miMPPointers[mpPointerIdx].pScreen = 0; #endif
if (pScreen == miMPPointers[mpPointerIdx].pSpriteScreen) if (pScreen == pPointer->pScreen)
miMPPointers[mpPointerIdx].pSpriteScreen = 0; pPointer->pScreen = 0;
if (pScreen == pPointer->pSpriteScreen)
pPointer->pSpriteScreen = 0;
#ifdef MPX
mpPointerIdx++; mpPointerIdx++;
} }
#else #endif
if (pScreen == miPointer->pScreen)
miPointer->pScreen = 0; #if !defined MPX
if (pScreen == miPointer->pSpriteScreen)
miPointer->pSpriteScreen = 0;
xfree((pointer)miPointer); xfree((pointer)miPointer);
#endif #endif
pScreen->CloseScreen = pScreenPriv->CloseScreen; pScreen->CloseScreen = pScreenPriv->CloseScreen;
@ -256,19 +251,15 @@ miPointerDisplayCursor (pDev, pScreen, pCursor)
ScreenPtr pScreen; ScreenPtr pScreen;
CursorPtr pCursor; CursorPtr pCursor;
{ {
miPointerPtr pPointer = miPointer;
#ifdef MPX #ifdef MPX
/* use core pointer for non MPX devices */ /* use core pointer for non MPX devices */
if (!IsMPDev(pDev)) if (MPHasCursor(pDev))
pDev = inputInfo.pointer; pPointer = &miMPPointers[pDev->id];
miMPPointers[pDev->id].pCursor = pCursor;
miMPPointers[pDev->id].pScreen = pScreen;
miPointerUpdateSprite(pDev);
#else
miPointer->pCursor = pCursor;
miPointer->pScreen = pScreen;
miPointerUpdateSprite(inputInfo.pointer);
#endif #endif
pPointer->pCursor = pCursor;
pPointer->pScreen = pScreen;
miPointerUpdateSprite(pDev);
return TRUE; return TRUE;
} }
@ -280,7 +271,7 @@ miPointerConstrainCursor (pDev, pScreen, pBox)
{ {
miPointerPtr pPointer = miPointer; miPointerPtr pPointer = miPointer;
#ifdef MPX #ifdef MPX
if (IsMPDev(pDev)) if (MPHasCursor(pDev))
pPointer = &miMPPointers[pDev->id]; pPointer = &miMPPointers[pDev->id];
#endif #endif
pPointer->limits = *pBox; pPointer->limits = *pBox;
@ -340,7 +331,7 @@ miPointerWarpCursor (pDev, pScreen, x, y)
SetupScreen (pScreen); SetupScreen (pScreen);
#ifdef MPX #ifdef MPX
if (IsMPDev(pDev)) if (MPHasCursor(pDev))
pPointer = &miMPPointers[pDev->id]; pPointer = &miMPPointers[pDev->id];
#endif #endif
@ -394,16 +385,16 @@ miPointerUpdateSprite (DeviceIntPtr pDev)
int x, y, devx, devy; int x, y, devx, devy;
miPointerPtr pPointer = miPointer; miPointerPtr pPointer = miPointer;
#ifdef MPX
if (!pDev || if (!pDev ||
!(pDev->coreEvents || pDev == inputInfo.pointer || pDev->isMPDev)) !(pDev->coreEvents || pDev == inputInfo.pointer
#else #ifdef MPX
if (!pDev || !(pDev->coreEvents || pDev == inputInfo.pointer)) || pDev->isMPDev
#endif #endif
))
return; return;
#ifdef MPX #ifdef MPX
if (IsMPDev(pDev)) if (MPHasCursor(pDev))
pPointer = &miMPPointers[pDev->id]; pPointer = &miMPPointers[pDev->id];
#endif #endif
@ -497,7 +488,7 @@ miPointerSetScreen(DeviceIntPtr pDev, int screen_no, int x, int y)
(*pScreenPriv->screenFuncs->NewEventScreen) (pScreen, FALSE); (*pScreenPriv->screenFuncs->NewEventScreen) (pScreen, FALSE);
NewCurrentScreen (pDev, pScreen, x, y); NewCurrentScreen (pDev, pScreen, x, y);
#ifdef MPX #ifdef MPX
if (IsMPDev(pDev)) if (MPHasCursor(pDev))
pPointer = &miMPPointers[pDev->id]; pPointer = &miMPPointers[pDev->id];
#endif #endif
pPointer->limits.x2 = pScreen->width; pPointer->limits.x2 = pScreen->width;
@ -515,7 +506,7 @@ miPointerGetScreen(DeviceIntPtr pDev)
{ {
miPointerPtr pPointer; miPointerPtr pPointer;
#ifdef MPX #ifdef MPX
if (IsMPDev(pDev)) if (MPHasCursor(pDev))
pPointer = &miMPPointers[pDev->id]; pPointer = &miMPPointers[pDev->id];
#endif #endif
return pPointer->pScreen; return pPointer->pScreen;
@ -539,7 +530,7 @@ miPointerSetPosition(DeviceIntPtr pDev, int *x, int *y, unsigned long time)
miPointerPtr pPointer = miPointer; miPointerPtr pPointer = miPointer;
#ifdef MPX #ifdef MPX
if (IsMPDev(pDev)) if (MPHasCursor(pDev))
pPointer = &(miMPPointers[pDev->id]); pPointer = &(miMPPointers[pDev->id]);
#endif #endif
@ -547,12 +538,12 @@ miPointerSetPosition(DeviceIntPtr pDev, int *x, int *y, unsigned long time)
if (!pScreen) if (!pScreen)
return; /* called before ready */ return; /* called before ready */
#ifdef MPX
if (!pDev || if (!pDev ||
!(pDev->coreEvents || pDev == inputInfo.pointer || pDev->isMPDev)) !(pDev->coreEvents || pDev == inputInfo.pointer
#else #ifdef MPX
if (!pDev || !(pDev->coreEvents || pDev == inputInfo.pointer)) || pDev->isMPDev
#endif #endif
))
return; return;
if (*x < 0 || *x >= pScreen->width || *y < 0 || *y >= pScreen->height) if (*x < 0 || *x >= pScreen->width || *y < 0 || *y >= pScreen->height)
@ -601,7 +592,7 @@ miPointerGetPosition(DeviceIntPtr pDev, int *x, int *y)
{ {
miPointerPtr pPointer = miPointer; miPointerPtr pPointer = miPointer;
#ifdef MPX #ifdef MPX
if (IsMPDev(pDev)) if (MPHasCursor(pDev))
pPointer = &miMPPointers[pDev->id]; pPointer = &miMPPointers[pDev->id];
#endif #endif
*x = pPointer->x; *x = pPointer->x;
@ -623,7 +614,7 @@ miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
SetupScreen(pScreen); SetupScreen(pScreen);
#ifdef MPX #ifdef MPX
if (IsMPDev(pDev)) if (MPHasCursor(pDev))
pPointer = &miMPPointers[pDev->id]; pPointer = &miMPPointers[pDev->id];
#endif #endif