home *** CD-ROM | disk | FTP | other *** search
- XTestGenerateEvent is supposed to cause the server to generate a key or
- button event, exactly as one would be generated if a user pressed a key
- or pushed a mouse button. Without knowing how your server does that for
- normal input events, I can't tell you exactly how that should look, but
- it would be something like:
-
- void
- XTestGenerateEvent (dev_type, key_or_button_code, direction, x, y)
- int dev_type; /* MOUSE = X pointer, KEYBOARD = X keyboard */
- int key_or_button_code; /* code to stash in event */
- int direction; /* XTestKEY_UP or XTestKEY_DOWN */
- int x,y; /* location of event */
- {
- int type;
- xEvent *xE;
-
- if (key_or_button_code < 8) /* must be a button */
- if (direction == XTestKEY_UP) /* it's a release event*/
- type = ButtonRelease;
- else
- type = ButtonPress;
- else /* must be a key */
- if (direction == XTestKEY_UP) /* it's a release event*/
- type = KeyRelease;
- else
- type = KeyPress;
-
- /* get an xEvent from some place where ProcessInputEvents can find it. */
- /* I don't know how your implementation does this. */
-
- xE = somehow_get_xEvent();
-
- xE->u.u.type = type;
- xE->u.u.detail = key_or_button_code;
- xE->u.keyButtonPointer.time = GetTimeInMillis();
- xE->u.keyButtonPointer.rootX = x;
- xE->u.keyButtonPointer.rootY = y;
-
- /* now call ProcessInputEvents to send the event to DIX for routing to the
- appropriate client(s). */
-
- ProcessInputEvents();
- }
-
-
- XTestJumpPointer performs the equivalent function for pointer events.
-
- void
- XTestJumpPointer (x, y, dev_type)
- int x,y;
- int dev_type;
- {
- /* get an xEvent from some place where ProcessInputEvents can find it. */
- /* I don't know how your implementation does this. */
-
- xE = somehow_get_xEvent();
-
- xE->u.u.type = MotionNotify;
- xE->u.keyButtonPointer.time = GetTimeInMillis();
- xE->u.keyButtonPointer.rootX = x;
- xE->u.keyButtonPointer.rootY = y;
-
- /* Call some place in your server code that takes care of acceleration and
- threshold. Also constrain the move to the screen bounds. You
- may also have a motion history buffer that should be updated with
- the information in this event.
- */
-
- deal_with_acceleration ();
- constrainxy();
- update_motion_history();
-
- /* now call ProcessInputEvents to send the event to DIX for routing to the
- appropriate client(s). */
-
- ProcessInputEvents();
- }
-
- XTestGetPointerPos returns the server's notion of where the X pointer currently
- is. This is probably kept by ddx in some implementation-specific structure:
-
- Implementation_Specific_Struct *i;
-
- void
- XTestGetPointerPos (x,y)
- short *x,*y;
- {
- *x = i->x;
- *y = i->y;
- }
-