Merge remote branch 'whot/for-keith'

This commit is contained in:
Keith Packard 2010-02-22 13:26:06 -08:00
commit ca9c2472d7
5 changed files with 91 additions and 72 deletions

View File

@ -1051,16 +1051,19 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
break;
}
#if 0
/* FIXME: I'm broken. Please fix me. Thanks */
if (DeviceEventCallback) {
DeviceEventInfoRec eventinfo;
SpritePtr pSprite = device->spriteInfo->sprite;
eventinfo.events = (xEventPtr) xE;
eventinfo.count = count;
/* see comment in EnqueueEvents regarding the next three lines */
if (ev->any.type == ET_Motion)
ev->device_event.root = WindowTable[pSprite->hotPhys.pScreen->myNum]->drawable.id;
eventinfo.device = device;
eventinfo.event = ev;
CallCallbacks(&DeviceEventCallback, (pointer) & eventinfo);
}
#endif
grab = device->deviceGrab.grab;
switch(event->type)

View File

@ -1131,11 +1131,10 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
event->type == ET_KeyRelease)
AccessXCancelRepeatKey(device->key->xkbInfo, event->detail.key);
#if 0
/* FIXME: I'm broken now. Please fix me. */
if (DeviceEventCallback)
{
DeviceEventInfoRec eventinfo;
/* The RECORD spec says that the root window field of motion events
* must be valid. At this point, it hasn't been filled in yet, so
* we do it here. The long expression below is necessary to get
@ -1145,14 +1144,14 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
* the data that GetCurrentRootWindow relies on hasn't been
* updated yet.
*/
if (xE->u.u.type == DeviceMotionNotify)
XE_KBPTR.root =
WindowTable[pSprite->hotPhys.pScreen->myNum]->drawable.id;
eventinfo.events = xE;
eventinfo.count = nevents;
if (ev->any.type == ET_Motion)
ev->device_event.root = WindowTable[pSprite->hotPhys.pScreen->myNum]->drawable.id;
eventinfo.event = ev;
eventinfo.device = device;
CallCallbacks(&DeviceEventCallback, (pointer)&eventinfo);
}
#endif
if (event->type == ET_Motion)
{
#ifdef PANORAMIX

View File

@ -576,8 +576,8 @@ typedef struct {
extern _X_EXPORT CallbackListPtr DeviceEventCallback;
typedef struct {
xEventPtr events;
int count;
InternalEvent *event;
DeviceIntPtr device;
} DeviceEventInfoRec;
extern int XItoCoreType(int xi_type);
@ -585,7 +585,7 @@ extern Bool DevHasCursor(DeviceIntPtr pDev);
extern Bool _X_EXPORT IsPointerDevice( DeviceIntPtr dev);
extern Bool _X_EXPORT IsKeyboardDevice(DeviceIntPtr dev);
extern Bool IsPointerEvent(InternalEvent *event);
extern Bool IsMaster(DeviceIntPtr dev);
extern _X_EXPORT Bool IsMaster(DeviceIntPtr dev);
extern _X_HIDDEN void CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
extern _X_HIDDEN int CorePointerProc(DeviceIntPtr dev, int what);

View File

@ -30,9 +30,9 @@
#define FP1616(integral, frac) ((integral) * (1 << 16) + (frac) * (1 << 16))
_X_INTERNAL int EventToCore(InternalEvent *event, xEvent *core);
_X_INTERNAL int EventToXI(InternalEvent *ev, xEvent **xi, int *count);
_X_INTERNAL int EventToXI2(InternalEvent *ev, xEvent **xi);
_X_EXPORT int EventToCore(InternalEvent *event, xEvent *core);
_X_EXPORT int EventToXI(InternalEvent *ev, xEvent **xi, int *count);
_X_EXPORT int EventToXI2(InternalEvent *ev, xEvent **xi);
_X_INTERNAL int GetCoreType(InternalEvent* ev);
_X_INTERNAL int GetXIType(InternalEvent* ev);
_X_INTERNAL int GetXI2Type(InternalEvent* ev);

View File

@ -42,6 +42,8 @@ and Jim Haggerty of Metheus.
#include "set.h"
#include "swaprep.h"
#include "inputstr.h"
#include "eventconvert.h"
#include <stdio.h>
#include <assert.h>
@ -139,7 +141,8 @@ static int RecordDeleteContext(
XID /*id*/
);
void RecordExtensionInit(void);
/***************************************************************************/
/* client private stuff */
@ -727,38 +730,14 @@ RecordADeliveredEventOrError(CallbackListPtr *pcbl, pointer nulldata, pointer ca
} /* RecordADeliveredEventOrError */
/* RecordADeviceEvent
*
* Arguments:
* pcbl is &DeviceEventCallback.
* nulldata is NULL.
* calldata is a pointer to a DeviceEventInfoRec (include/dix.h)
* which provides information about device events that occur.
*
* Returns: nothing.
*
* Side Effects:
* The device event is recorded by all contexts that have registered
* it for this client.
*/
static void
RecordADeviceEvent(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
RecordSendProtocolEvents(RecordClientsAndProtocolPtr pRCAP,
RecordContextPtr pContext,
xEvent* pev, int count)
{
DeviceEventInfoRec *pei = (DeviceEventInfoRec *)calldata;
RecordContextPtr pContext;
RecordClientsAndProtocolPtr pRCAP;
int eci; /* enabled context index */
for (eci = 0; eci < numEnabledContexts; eci++)
{
pContext = ppAllContexts[eci];
for (pRCAP = pContext->pListOfRCAP; pRCAP; pRCAP = pRCAP->pNextRCAP)
{
if (pRCAP->pDeviceEventSet)
{
int ev; /* event index */
xEvent *pev = pei->events;
for (ev = 0; ev < pei->count; ev++, pev++)
for (ev = 0; ev < count; ev++, pev++)
{
if (RecordIsMemberOfSet(pRCAP->pDeviceEventSet,
pev->u.u.type & 0177))
@ -801,10 +780,56 @@ RecordADeviceEvent(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
SetCriticalOutputPending();
}
} /* end for each event */
} /* RecordADeviceEvent */
/* RecordADeviceEvent
*
* Arguments:
* pcbl is &DeviceEventCallback.
* nulldata is NULL.
* calldata is a pointer to a DeviceEventInfoRec (include/dix.h)
* which provides information about device events that occur.
*
* Returns: nothing.
*
* Side Effects:
* The device event is recorded by all contexts that have registered
* it for this client.
*/
static void
RecordADeviceEvent(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
{
DeviceEventInfoRec *pei = (DeviceEventInfoRec *)calldata;
RecordContextPtr pContext;
RecordClientsAndProtocolPtr pRCAP;
int eci; /* enabled context index */
for (eci = 0; eci < numEnabledContexts; eci++)
{
pContext = ppAllContexts[eci];
for (pRCAP = pContext->pListOfRCAP; pRCAP; pRCAP = pRCAP->pNextRCAP)
{
if (pRCAP->pDeviceEventSet)
{
int count;
xEvent *xi_events = NULL;
/* TODO check return values */
if (IsMaster(pei->device))
{
xEvent xE;
EventToCore(pei->event, &xE);
RecordSendProtocolEvents(pRCAP, pContext, &xE, 1);
}
EventToXI(pei->event, &xi_events, &count);
RecordSendProtocolEvents(pRCAP, pContext, xi_events, count);
xfree(xi_events);
} /* end this RCAP selects device events */
} /* end for each RCAP on this context */
} /* end for each enabled context */
} /* RecordADeviceEvent */
}
/* RecordFlushAllContexts
@ -2866,13 +2891,6 @@ RecordCloseDown(ExtensionEntry *extEntry)
void
RecordExtensionInit(void)
{
/* FIXME Record is currently broken. Dont initialize it so that clients
* that require it can bail out correctly rather than waiting for stuff
* that'll never happen */
ErrorF("record: RECORD extension enabled at configure time.\n");
ErrorF("record: This extension is known to be broken, disabling extension now..\n");
ErrorF("record: http://bugs.freedesktop.org/show_bug.cgi?id=20500\n");
#if 0
ExtensionEntry *extentry;
RTContext = CreateNewResourceType(RecordDeleteContext, "RecordContext");
@ -2895,6 +2913,5 @@ RecordExtensionInit(void)
}
RecordErrorBase = extentry->errorBase;
#endif
} /* RecordExtensionInit */