mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-30 06:10:08 +01:00
lg3d-dev-6-1-1-2: Fix bug 157: Stability: Escher events sometimes cross
over to the wrong Display
This commit is contained in:
parent
eaee8d7ac3
commit
a01c5f9a00
3 changed files with 53 additions and 34 deletions
39
dix/events.c
39
dix/events.c
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue