dix: Moving SpriteRec into DeviceIntRec

removing global sprite structure
	beginning to remove MPX ifdefs

xnest:  Fix to make xnest compile again
This commit is contained in:
Peter Hutterer 2006-12-11 18:09:59 +10:30 committed by Peter Hutterer
parent eb1d9f51af
commit ae3c24da34
14 changed files with 480 additions and 511 deletions

View File

@ -1,4 +1,26 @@
MPX Changelog file MPX Changelog file
== 12.12.06 ==
dix: Moving SpriteRec into DeviceIntRec
removing global sprite structure
beginning to remove MPX ifdefs
xnest: Fix to make xnest compile again
Files:
dix/getevents.c
dix/events.c
dix/devices.c
hw/xfree86/common/xf86Xinput.c
include/cursor.h
include/dix.h
include/dixevents.h
include/input.h
include/inputstr.h
XTrap/xtrapdi.c
Xext/xtest.c
hw/xnest/Events.c
record/record.c
== 05.12.06 == == 05.12.06 ==
Xi: adding MPX checks to ProcessOtherEvents Xi: adding MPX checks to ProcessOtherEvents

View File

@ -71,6 +71,7 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#endif #endif
#include "pixmapstr.h" /* DrawableRec */ #include "pixmapstr.h" /* DrawableRec */
#include "windowstr.h" /* Drawable Lookup structures */ #include "windowstr.h" /* Drawable Lookup structures */
#include "inputstr.h"
#include <X11/extensions/xtrapdi.h> #include <X11/extensions/xtrapdi.h>
#include <X11/extensions/xtrapddmi.h> #include <X11/extensions/xtrapddmi.h>
#include <X11/extensions/xtrapproto.h> #include <X11/extensions/xtrapproto.h>
@ -1564,7 +1565,7 @@ void XETrapStampAndMail(xEvent *x_event)
data.u.event.u.u.type == ButtonRelease || data.u.event.u.u.type == ButtonRelease ||
data.u.event.u.u.type == KeyPress || data.u.event.u.u.type == KeyPress ||
data.u.event.u.u.type == KeyRelease)) { data.u.event.u.u.type == KeyRelease)) {
int scr = XineramaGetCursorScreen(); int scr = XineramaGetCursorScreen(inputInfo.pointer);
data.u.event.u.keyButtonPointer.rootX += data.u.event.u.keyButtonPointer.rootX +=
panoramiXdataPtr[scr].x - panoramiXdataPtr[0].x; panoramiXdataPtr[scr].x - panoramiXdataPtr[0].x;
data.u.event.u.keyButtonPointer.rootY += data.u.event.u.keyButtonPointer.rootY +=

View File

@ -148,7 +148,7 @@ ProcXTestCompareCursor(client)
if (stuff->cursor == None) if (stuff->cursor == None)
pCursor = NullCursor; pCursor = NullCursor;
else if (stuff->cursor == XTestCurrentCursor) else if (stuff->cursor == XTestCurrentCursor)
pCursor = GetSpriteCursor(); pCursor = GetSpriteCursor(inputInfo.pointer);
else { else {
pCursor = (CursorPtr)LookupIDByType(stuff->cursor, RT_CURSOR); pCursor = (CursorPtr)LookupIDByType(stuff->cursor, RT_CURSOR);
if (!pCursor) if (!pCursor)
@ -426,7 +426,8 @@ ProcXTestFakeInput(client)
#ifdef PANORAMIX #ifdef PANORAMIX
if ((!noPanoramiXExtension if ((!noPanoramiXExtension
&& root->drawable.pScreen->myNum != XineramaGetCursorScreen()) && root->drawable.pScreen->myNum
!= XineramaGetCursorScreen(inputInfo.pointer))
|| (noPanoramiXExtension && root != GetCurrentRootWindow())) || (noPanoramiXExtension && root != GetCurrentRootWindow()))
#else #else

View File

@ -366,8 +366,12 @@ InitCoreDevices()
if (!AllocateDevicePrivate(dev, CoreDevicePrivatesIndex)) if (!AllocateDevicePrivate(dev, CoreDevicePrivatesIndex))
FatalError("Couldn't allocate pointer devPrivates\n"); FatalError("Couldn't allocate pointer devPrivates\n");
dev->devPrivates[CoreDevicePrivatesIndex].ptr = NULL; dev->devPrivates[CoreDevicePrivatesIndex].ptr = NULL;
InitSprite(dev, TRUE);
(void)ActivateDevice(dev); (void)ActivateDevice(dev);
inputInfo.pointer = dev; inputInfo.pointer = dev;
/* the core keyboard is initialised by now. set the keyboard's sprite
* to the core pointer's sprite. */
InitSprite(inputInfo.keyboard, FALSE);
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -488,11 +488,6 @@ GetKeyboardValuatorEvents(xEvent *events, DeviceIntPtr pDev, int type,
* The DDX is responsible for allocating the event structure in the first * The DDX is responsible for allocating the event structure in the first
* place via GetMaximumEventsNum(), and for freeing it. * place via GetMaximumEventsNum(), and for freeing it.
*/ */
#ifdef MPX
/* In MPX, flags can be set to POINTER_MULTIPOINTER to indicate that the
* device is a multipointer device. MP devices always send core events.
*/
#endif
_X_EXPORT int _X_EXPORT int
GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons, GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
int flags, int first_valuator, int num_valuators, int flags, int first_valuator, int num_valuators,
@ -543,7 +538,7 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
kbp->deviceid = pDev->id; kbp->deviceid = pDev->id;
#ifdef MPX #ifdef MPX
if (flags & POINTER_MULTIPOINTER) if (pDev->isMPDev)
pointer = pDev; pointer = pDev;
else else
#endif #endif
@ -604,7 +599,7 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
updateMotionHistory(pDev, ms, first_valuator, num_valuators, valuators); updateMotionHistory(pDev, ms, first_valuator, num_valuators, valuators);
#ifdef MPX #ifdef MPX
if (flags & POINTER_MULTIPOINTER) if (pDev->isMPDev)
{ {
// noop, just less intrusive to fit MPX in like that // noop, just less intrusive to fit MPX in like that
} else } else
@ -800,7 +795,11 @@ SwitchCorePointer(DeviceIntPtr pDev)
* to shift the pointer to get it inside the new bounds. * to shift the pointer to get it inside the new bounds.
*/ */
void void
PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time) PostSyntheticMotion(DeviceIntPtr pDev,
int x,
int y,
ScreenPtr pScreen,
unsigned long time)
{ {
xEvent xE; xEvent xE;
@ -820,5 +819,5 @@ PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time)
xE.u.keyButtonPointer.rootY = y; xE.u.keyButtonPointer.rootY = y;
xE.u.keyButtonPointer.time = time; xE.u.keyButtonPointer.time = time;
(*inputInfo.pointer->public.processInputProc)(&xE, inputInfo.pointer, 1); (*pDev->public.processInputProc)(&xE, pDev, 1);
} }

View File

@ -47,7 +47,6 @@
*/ */
/* $XConsortium: xf86Xinput.c /main/14 1996/10/27 11:05:25 kaleb $ */ /* $XConsortium: xf86Xinput.c /main/14 1996/10/27 11:05:25 kaleb $ */
#ifdef MPX
/* /*
* MPX additions: * MPX additions:
* Copyright © 2006 Peter Hutterer * Copyright © 2006 Peter Hutterer
@ -55,7 +54,6 @@
* Author: Peter Hutterer <peter@cs.unisa.edu.au> * Author: Peter Hutterer <peter@cs.unisa.edu.au>
* *
*/ */
#endif
#ifdef HAVE_XORG_CONFIG_H #ifdef HAVE_XORG_CONFIG_H
@ -144,12 +142,10 @@ xf86ProcessCommonOptions(LocalDevicePtr local,
xf86Msg(X_CONFIG, "%s: always reports core events\n", local->name); xf86Msg(X_CONFIG, "%s: always reports core events\n", local->name);
} }
#ifdef MPX
if (xf86SetBoolOption(list, "IsMPDevice", 0)) { if (xf86SetBoolOption(list, "IsMPDevice", 0)) {
local->flags |= XI86_MP_DEVICE; local->flags |= XI86_MP_DEVICE;
xf86Msg(X_CONFIG, "%s: is MP device\n", local->name); xf86Msg(X_CONFIG, "%s: is MP device\n", local->name);
} }
#endif
if (xf86SetBoolOption(list, "SendDragEvents", 1)) { if (xf86SetBoolOption(list, "SendDragEvents", 1)) {
local->flags |= XI86_SEND_DRAG_EVENTS; local->flags |= XI86_SEND_DRAG_EVENTS;
@ -214,12 +210,9 @@ xf86ActivateDevice(LocalDevicePtr local)
xf86XinputFinalizeInit(dev); xf86XinputFinalizeInit(dev);
dev->coreEvents = local->flags & XI86_ALWAYS_CORE; dev->coreEvents = local->flags & XI86_ALWAYS_CORE;
#ifdef MPX dev->isMPDev = (local->flags & XI86_MP_DEVICE);
if (local->flags & XI86_MP_DEVICE) InitSprite(dev, dev->isMPDev);
dev->isMPDev = TRUE;
else
dev->isMPDev = FALSE;
#endif
RegisterOtherDevice(dev); RegisterOtherDevice(dev);
if (serverGeneration == 1) if (serverGeneration == 1)
@ -466,11 +459,6 @@ xf86PostMotionEvent(DeviceIntPtr device,
else else
flags = POINTER_RELATIVE | POINTER_ACCELERATE; flags = POINTER_RELATIVE | POINTER_ACCELERATE;
#ifdef MPX
if (device->isMPDev)
flags |= POINTER_MULTIPOINTER;
#endif
valuators = xcalloc(sizeof(int), num_valuators); valuators = xcalloc(sizeof(int), num_valuators);
va_start(var, num_valuators); va_start(var, num_valuators);
@ -543,11 +531,6 @@ xf86PostButtonEvent(DeviceIntPtr device,
else else
flags = POINTER_RELATIVE; flags = POINTER_RELATIVE;
#ifdef MPX
if (device->isMPDev)
flags |= POINTER_MULTIPOINTER;
#endif
valuators = xcalloc(sizeof(int), num_valuators); valuators = xcalloc(sizeof(int), num_valuators);
va_start(var, num_valuators); va_start(var, num_valuators);

View File

@ -25,6 +25,7 @@ is" without express or implied warranty.
#include "scrnintstr.h" #include "scrnintstr.h"
#include "windowstr.h" #include "windowstr.h"
#include "servermd.h" #include "servermd.h"
#include "inputstr.h"
#include "mi.h" #include "mi.h"
@ -183,7 +184,7 @@ xnestCollectEvents()
if (X.xcrossing.detail != NotifyInferior) { if (X.xcrossing.detail != NotifyInferior) {
pScreen = xnestScreen(X.xcrossing.window); pScreen = xnestScreen(X.xcrossing.window);
if (pScreen) { if (pScreen) {
NewCurrentScreen(pScreen, X.xcrossing.x, X.xcrossing.y); NewCurrentScreen(inputInfo.pointer, pScreen, X.xcrossing.x, X.xcrossing.y);
valuators[0] = X.xcrossing.x; valuators[0] = X.xcrossing.x;
valuators[1] = X.xcrossing.y; valuators[1] = X.xcrossing.y;
lastEventTime = GetTimeInMillis(); lastEventTime = GetTimeInMillis();

View File

@ -144,7 +144,7 @@ extern void GetSpritePosition(
int * /*py*/); int * /*py*/);
#ifdef PANORAMIX #ifdef PANORAMIX
extern int XineramaGetCursorScreen(void); extern int XineramaGetCursorScreen(struct _DeviceIntRec* pDev);
#endif /* PANORAMIX */ #endif /* PANORAMIX */
#endif /* CURSOR_H */ #endif /* CURSOR_H */

View File

@ -649,6 +649,10 @@ extern int GrabDevice(
CARD8 * /* status */); CARD8 * /* status */);
extern void InitEvents(void); extern void InitEvents(void);
extern void InitSprite(
DeviceIntPtr /* pDev */,
Bool /* hasCursor */
);
extern void CloseDownEvents(void); extern void CloseDownEvents(void);

View File

@ -28,7 +28,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
extern void SetCriticalEvent(int /* event */); extern void SetCriticalEvent(int /* event */);
extern CursorPtr GetSpriteCursor(void); extern CursorPtr GetSpriteCursor(DeviceIntPtr /*pDev*/);
extern int ProcAllowEvents(ClientPtr /* client */); extern int ProcAllowEvents(ClientPtr /* client */);
@ -103,7 +103,11 @@ extern int ProcUngrabButton(ClientPtr /* client */);
extern int ProcRecolorCursor(ClientPtr /* client */); extern int ProcRecolorCursor(ClientPtr /* client */);
#ifdef PANORAMIX #ifdef PANORAMIX
extern void PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time); extern void PostSyntheticMotion(DeviceIntPtr pDev,
int x,
int y,
ScreenPtr pScreen,
unsigned long time);
#endif #endif
#endif /* DIXEVENTS_H */ #endif /* DIXEVENTS_H */

View File

@ -62,9 +62,6 @@ SOFTWARE.
#define POINTER_RELATIVE (1 << 1) #define POINTER_RELATIVE (1 << 1)
#define POINTER_ABSOLUTE (1 << 2) #define POINTER_ABSOLUTE (1 << 2)
#define POINTER_ACCELERATE (1 << 3) #define POINTER_ACCELERATE (1 << 3)
#ifdef MPX
#define POINTER_MULTIPOINTER (1 << 4)
#endif
#define MAP_LENGTH 256 #define MAP_LENGTH 256
#define DOWN_LENGTH 32 /* 256/8 => number of bytes to hold 256 bits */ #define DOWN_LENGTH 32 /* 256/8 => number of bytes to hold 256 bits */
@ -422,6 +419,7 @@ extern int GetProximityEvents(
int *valuators); int *valuators);
extern void PostSyntheticMotion( extern void PostSyntheticMotion(
DeviceIntPtr pDev,
int x, int x,
int y, int y,
ScreenPtr pScreen, ScreenPtr pScreen,

View File

@ -52,6 +52,7 @@ SOFTWARE.
#include "input.h" #include "input.h"
#include "window.h" #include "window.h"
#include "dixstruct.h" #include "dixstruct.h"
#include "cursorstr.h"
#define BitIsOn(ptr, bit) (((BYTE *) (ptr))[(bit)>>3] & (1 << ((bit) & 7))) #define BitIsOn(ptr, bit) (((BYTE *) (ptr))[(bit)>>3] & (1 << ((bit) & 7)))
@ -264,6 +265,30 @@ typedef struct _LedFeedbackClassRec {
#endif #endif
} LedFeedbackClassRec; } LedFeedbackClassRec;
/**
* Sprite information for a device.
*/
typedef struct {
CursorPtr current;
BoxRec hotLimits; /* logical constraints of hot spot */
Bool confined; /* confined to screen */
#if defined(SHAPE) || defined(PANORAMIX)
RegionPtr hotShape; /* additional logical shape constraint */
#endif
BoxRec physLimits; /* physical constraints of hot spot */
WindowPtr win; /* window of logical position */
HotSpot hot; /* logical pointer position */
HotSpot hotPhys; /* physical pointer position */
#ifdef PANORAMIX
ScreenPtr screen; /* all others are in Screen 0 coordinates */
RegionRec Reg1; /* Region 1 for confining motion */
RegionRec Reg2; /* Region 2 for confining virtual motion */
WindowPtr windows[MAXSCREENS];
WindowPtr confineWin; /* confine window */
#endif
} SpriteRec, *SpritePtr;
/* states for devices */ /* states for devices */
#define NOT_GRABBED 0 #define NOT_GRABBED 0
@ -329,9 +354,8 @@ typedef struct _DeviceIntRec {
DevUnion *devPrivates; DevUnion *devPrivates;
int nPrivates; int nPrivates;
DeviceUnwrapProc unwrapProc; DeviceUnwrapProc unwrapProc;
#ifdef MPX
Bool isMPDev; /* TRUE if multipointer device */ Bool isMPDev; /* TRUE if multipointer device */
#endif SpritePtr pSprite; /* sprite information */
} DeviceIntRec; } DeviceIntRec;
typedef struct { typedef struct {

View File

@ -43,6 +43,7 @@ and Jim Haggerty of Metheus.
#include <X11/extensions/recordstr.h> #include <X11/extensions/recordstr.h>
#include "set.h" #include "set.h"
#include "swaprep.h" #include "swaprep.h"
#include "inputstr.h"
#include <stdio.h> #include <stdio.h>
#include <assert.h> #include <assert.h>
@ -861,7 +862,7 @@ RecordADeviceEvent(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
pev->u.u.type == ButtonRelease || pev->u.u.type == ButtonRelease ||
pev->u.u.type == KeyPress || pev->u.u.type == KeyPress ||
pev->u.u.type == KeyRelease)) { pev->u.u.type == KeyRelease)) {
int scr = XineramaGetCursorScreen(); int scr = XineramaGetCursorScreen(inputInfo.pointer);
memcpy(&shiftedEvent, pev, sizeof(xEvent)); memcpy(&shiftedEvent, pev, sizeof(xEvent));
shiftedEvent.u.keyButtonPointer.rootX += shiftedEvent.u.keyButtonPointer.rootX +=
panoramiXdataPtr[scr].x - panoramiXdataPtr[scr].x -