#include <string.h>
#include <X11/Xlib.h>
+#include <X11/extensions/XTest.h>
#define eassert assert
static Display *disp;
static long id;
-static void kmevent(XEvent *ev) {
- int r;
- r= XSendEvent(disp,id,False,0,ev); assert(r);
-}
-
static KeyCode keycode(const char *s) {
KeySym sym= XStringToKeysym(s);
return XKeysymToKeycode(disp,sym);
int main(int argc, const char *const *argv) {
char *ep;
XWindowAttributes attr;
- XEvent ev;
+ int xpos,ypos;
+ unsigned width,height,bd,depth;
int r;
id= strtoul(*++argv,&ep,0);
disp= XOpenDisplay(0); eassert(disp);
+ r= XRaiseWindow(disp, id); eassert(r);
+
r= XGetWindowAttributes(disp, id, &attr); eassert(r);
+ r= XGetGeometry(disp,id, &attr.root,&xpos,&ypos,&width,&height, &bd,&depth);
+ eassert(r);
+
+ Window dummy;
+ r= XTranslateCoordinates(disp, id,attr.root, 160,160, &xpos,&ypos,
+ &dummy);
+ eassert(r);
+
+ int screen= XScreenNumberOfScreen(attr.screen);
+ XTestFakeMotionEvent(disp,screen, xpos, ypos, 0);
+ XTestFakeButtonEvent(disp,1,1, 0);
+ XTestFakeButtonEvent(disp,1,0, 100);
+
+ XTestFakeKeyEvent(disp, keycode("Next"),1, 100);
+ XTestFakeKeyEvent(disp, keycode("Next"),0, 100);
+
+#if 0
while (*++argv) {
switch (**argv) {
case 'r':
- r= XRaiseWindow(disp, id); eassert(r);
break;
#define KMEVENT(e,t) \
kmevent(&ev); \
break;
- case 'K': KE.keycode= keycode(*++argv); KMEVENT(KE,KeyPress);
+ case 'K': KE.keycode= ; KMEVENT(KE,KeyPress);
case 'k': KE.keycode= keycode(*++argv); KMEVENT(KE,KeyRelease);
case 'M': ME.button=1; KMEVENT(ME,ButtonPress);
case 'm': ME.button=1; ME.state=Button1Mask; KMEVENT(ME,ButtonRelease);
abort();
}
}
-
+
+#endif
r= XSync(disp, False); eassert(r);
exit(0);
}