lg3d-dev-6-1-1-2: Fix bug 157: Stability: Escher events sometimes cross

over to the wrong Display
This commit is contained in:
Deron Johnson 2005-03-04 23:22:00 +00:00
parent eaee8d7ac3
commit a01c5f9a00
3 changed files with 53 additions and 34 deletions

View file

@ -1,4 +1,4 @@
/* $XdotOrg: xc/programs/Xserver/dix/events.c,v 1.6.4.1.10.2 2005/01/12 00:37:52 deronj Exp $ */
/* $XdotOrg: xc/programs/Xserver/dix/events.c,v 1.6.4.2 2005/01/20 23:47:25 deronj Exp $ */
/* $XFree86: xc/programs/Xserver/dix/events.c,v 3.51 2004/01/12 17:04:52 tsi Exp $ */
/************************************************************
@ -3158,16 +3158,7 @@ ProcessKeyboardEvent (xE, keybd, count)
{
xeviekb = keybd;
if(!rootWin) {
#ifdef LG3D
/* TEMP Workaround */
WindowPtr pWin;
if (lgeDisplayServerIsAlive) {
xeviewin = pLgeDisplayServerPRWWin;
}
pWin = xeviewin->parent;
#else
WindowPtr pWin = xeviewin->parent;
#endif /* LG3D */
while(pWin) {
if(!pWin->parent) {
rootWin = pWin->drawable.id;
@ -3466,6 +3457,29 @@ ProcessPointerEvent (xE, mouse, count)
}
#endif /* LG3D_EVENT_TEST_THROUGHPUT */
#ifdef LG3D
/* TODO: bug: this doesn't handle synchronous grabs properly */
if (lgeDisplayServerIsAlive &&
!lgeDisplayServerClient->clientGone &&
!lgeEventComesFromDS) {
xEvent *e = xE;
int i;
for (i = 0; i < count; i++, e++) {
/*
ErrorF("Send event XS->DS, type = %d xy = %d, %d, state = 0x%x\n",
e->u.u.type, e->u.keyButtonPointer.rootX,
e->u.keyButtonPointer.rootY,
e->u.keyButtonPointer.state);
*/
WriteToClient(lgeDisplayServerClient, sizeof(xEvent), (char *)e);
}
return;
}
#endif /* LG3D */
if (!syncEvents.playingEvents)
NoticeTime(xE)
XE_KBPTR.state = (butc->state | (
@ -5236,10 +5250,11 @@ WriteEventsToClient(pClient, count, events)
damev->area.x, damev->area.y,
damev->area.width, damev->area.height);
} else if (!damageEventsOnly) {
ErrorF("Send event %d to client %d, xy = %d, %d, event win = %d\n",
ErrorF("Send event %d to client %d, xy = %d, %d, event win = %d, state = 0x%x\n",
ev->u.u.type, pClient->index,
ev->u.keyButtonPointer.eventX, ev->u.keyButtonPointer.eventY,
ev->u.keyButtonPointer.event);
ev->u.keyButtonPointer.event,
ev->u.keyButtonPointer.state);
if (ev->u.u.type == 4 || ev->u.u.type == 5) {
ErrorF("Button detail = %d\n", ev->u.u.detail);
}

View file

@ -111,10 +111,6 @@
#include "Xpoll.h"
#include "xf86_OSproc.h" /* sigio stuff */
#ifdef LG3D
#include "../../../Xext/lgeint.h"
#endif /* LG3D */
/******************************************************************************
* debugging macro
*****************************************************************************/
@ -698,9 +694,7 @@ xf86eqEnqueue (xEvent *e)
#ifdef XINPUT
int count;
#ifndef LG3D
xf86AssertBlockedSIGIO ("xf86eqEnqueue");
#endif /* !LG3D */
switch (e->u.u.type) {
case KeyPress:
case KeyRelease:
@ -735,22 +729,6 @@ xf86eqEnqueue (xEvent *e)
}
#endif
#ifdef LG3D
if (lgeDisplayServerIsAlive &&
!lgeDisplayServerClient->clientGone &&
!lgeEventComesFromDS) {
/*
ErrorF("Send event XS->DS, type = %d xy = %d, %d\n",
e->u.u.type, e->u.keyButtonPointer.rootX,
e->u.keyButtonPointer.rootY);
*/
WriteToClient(lgeDisplayServerClient, sizeof(xEvent), (char *)e);
return;
}
#endif /* LG3D */
oldtail = xf86EventQueue.tail;
isMotion = e->u.u.type == MotionNotify;
if (isMotion && xf86EventQueue.lastMotion && oldtail != xf86EventQueue.head) {

View file

@ -37,6 +37,9 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "XKBsrv.h"
#include <ctype.h>
#ifdef LG3D
#include "../Xext/lgeint.h"
#endif /* LG3D */
/***====================================================================***/
@ -49,6 +52,29 @@ int key;
XkbBehavior behavior;
unsigned ndx;
#ifdef LG3D
/* TODO: bug: this doesn't handle synchronous grabs properly */
if (lgeDisplayServerIsAlive &&
!lgeDisplayServerClient->clientGone &&
!lgeEventComesFromDS) {
xEvent *e = xE;
int i;
for (i = 0; i < count; i++, e++) {
/*
ErrorF("Send event XS->DS, type = %d xy = %d, %d, state = 0x%x\n",
e->u.u.type, e->u.keyButtonPointer.rootX,
e->u.keyButtonPointer.rootY,
e->u.keyButtonPointer.state);
*/
WriteToClient(lgeDisplayServerClient, sizeof(xEvent), (char *)e);
}
return;
}
#endif /* LG3D */
xkbi= keyc->xkbInfo;
key= xE->u.u.detail;
#ifdef DEBUG