void XkbDDXFakePointerButton(int event,int button) { xEvent ev; int x,y; DevicePtr ptr; if ((ptr = LookupPointerDevice())==NULL) return; GetSpritePosition(&x,&y); ev.u.u.type = event; ev.u.u.detail = button; ev.u.keyButtonPointer.time = GetTimeInMillis(); ev.u.keyButtonPointer.rootX = x; ev.u.keyButtonPointer.rootY = y; (*ptr->processInputProc)( &ev, (DeviceIntPtr)ptr, 1 ); return; }
/* * DESCRIPTION: * * This routine processes the simulation of some input event. * */ int XETrapSimulateXEvent(register xXTrapInputReq *request, register ClientPtr client) { ScreenPtr pScr = NULL; int status = Success; xEvent xev; register int x = request->input.x; register int y = request->input.y; DevicePtr keydev = LookupKeyboardDevice(); DevicePtr ptrdev = LookupPointerDevice(); if (request->input.screen < screenInfo.numScreens) { pScr = screenInfo.screens[request->input.screen]; } else { /* Trying to play bogus events to this WS! */ #ifdef VERBOSE ErrorF("%s: Trying to send events to screen %d!\n", XTrapExtName, request->input.screen); #endif status = XETrapErrorBase + BadScreen; } /* Fill in the event structure with the information * Note: root, event, child, eventX, eventY, state, and sameScreen * are all updated by FixUpEventFromWindow() when the events * are delivered via DeliverDeviceEvents() or whatever. XTrap * needs to only concern itself with type, detail, time, rootX, * and rootY. */ if (status == Success) { xev.u.u.type = request->input.type; xev.u.u.detail = request->input.detail; xev.u.keyButtonPointer.time = GetTimeInMillis(); xev.u.keyButtonPointer.rootX = x; xev.u.keyButtonPointer.rootY = y; if (request->input.type == MotionNotify) { /* Set new cursor position on screen */ XETrap_avail.data.cur_x = x; XETrap_avail.data.cur_y = y; NewCurrentScreen (pScr, x, y); /* fix from [email protected] */ if (!(*pScr->SetCursorPosition)(pScr, x, y, xFalse)) { status = BadImplementation; } } } if (status == Success) { switch(request->input.type) { /* Now process the event appropriately */ case KeyPress: case KeyRelease: (*XETrapKbdDev->realInputProc)(&xev,(DeviceIntPtr)keydev, 1L); break; case MotionNotify: case ButtonPress: case ButtonRelease: (*XETrapPtrDev->realInputProc)(&xev,(DeviceIntPtr)ptrdev, 1L); break; default: status = BadValue; break; } } return(status); }