Integration of XEVIE branch to trunk, Some updates from latest reviews

https://freedesktop.org/bugzilla/show_bug.cgi?id=947 Modified Files:
    events.c
This commit is contained in:
Stuart Kreitman 2004-07-31 01:33:40 +00:00
parent 706b2a7e02
commit e68bfc8016

View File

@ -1,4 +1,4 @@
/* $XdotOrg: xc/programs/Xserver/dix/events.c,v 1.3 2004/06/30 20:06:53 kem Exp $ */
/* $XdotOrg: xc/programs/Xserver/dix/events.c,v 1.4 2004/07/29 18:43:58 stukreit Exp $ */
/* $XFree86: xc/programs/Xserver/dix/events.c,v 3.51 2004/01/12 17:04:52 tsi Exp $ */
/************************************************************
@ -106,6 +106,19 @@ extern Bool XkbFilterEvents(ClientPtr, int, xEvent *);
#include "security.h"
#endif
extern WindowPtr *WindowTable;
extern int xevieFlag;
extern int xevieClientIndex;
extern DeviceIntPtr xeviemouse;
extern DeviceIntPtr xeviekb;
extern Mask xevieMask;
extern Mask xevieFilters[128];
extern int xevieEventSent;
extern int xevieKBEventSent;
int xeviegrabState = 0;
xEvent *xeviexE;
#include "XIproto.h"
#include "exevents.h"
#include "extnsionst.h"
@ -201,6 +214,8 @@ static struct {
WindowPtr confineWin; /* confine window */
#endif
} sprite; /* info about the cursor sprite */
WindowPtr xeviewin;
HotSpot xeviehot;
static void DoEnterLeaveEvents(
WindowPtr /*fromWin*/,
@ -2673,6 +2688,51 @@ ProcessKeyboardEvent (xE, keybd, count)
GrabPtr grab = keybd->grab;
Bool deactivateGrab = FALSE;
register KeyClassPtr keyc = keybd->key;
static Window rootWin = 0;
if(!xeviegrabState && xevieFlag && clients[xevieClientIndex] &&
(xevieMask & xevieFilters[xE->u.u.type])) {
key = xE->u.u.detail;
kptr = &keyc->down[key >> 3];
bit = 1 << (key & 7);
if((xE->u.u.type == KeyPress && (*kptr & bit)) ||
(xE->u.u.type == KeyRelease && !(*kptr & bit)))
{} else {
#ifdef XKB
if(!noXkbExtension)
xevieKBEventSent = 0;
#endif
if(!xevieKBEventSent)
{
xeviekb = keybd;
if(!rootWin) {
WindowPtr pWin = xeviewin->parent;
while(pWin) {
if(!pWin->parent) {
rootWin = pWin->drawable.id;
break;
}
pWin = pWin->parent;
};
}
xE->u.keyButtonPointer.event = xeviewin->drawable.id;
xE->u.keyButtonPointer.root = rootWin;
xE->u.keyButtonPointer.child = (xeviewin->firstChild) ? xeviewin->firstChild->
drawable.id:0;
xE->u.keyButtonPointer.rootX = xeviehot.x;
xE->u.keyButtonPointer.rootY = xeviehot.y;
xE->u.keyButtonPointer.state = keyc->state;
WriteToClient(clients[xevieClientIndex], sizeof(xEvent), (char *)xE);
#ifdef XKB
if(noXkbExtension)
#endif
return;
}else {
xevieKBEventSent = 0;
}
}
}
if (!syncEvents.playingEvents)
{
@ -2818,6 +2878,16 @@ ProcessPointerEvent (xE, mouse, count)
#ifdef XKB
XkbSrvInfoPtr xkbi= inputInfo.keyboard->key->xkbInfo;
#endif
if(xevieFlag && clients[xevieClientIndex] && !xeviegrabState &&
(xevieMask & xevieFilters[xE->u.u.type])) {
if(xevieEventSent)
xevieEventSent = 0;
else {
xeviemouse = mouse;
WriteToClient(clients[xevieClientIndex], sizeof(xEvent), (char *)xE);
return;
}
}
if (!syncEvents.playingEvents)
NoticeTime(xE)