chiark / gitweb /
WIP XTest stuff
[ypp-sc-tools.db-test.git] / pctb / x-manip-window.c
1 /**/
2
3 #include <assert.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 #include <X11/Xlib.h>
8 #include <X11/extensions/XTest.h>
9
10 #define eassert assert
11
12 static Display *disp;
13 static long id;
14
15 static KeyCode keycode(const char *s) {
16   KeySym sym= XStringToKeysym(s);
17   return XKeysymToKeycode(disp,sym);
18 }
19
20 int main(int argc, const char *const *argv) {
21   char *ep;
22   XWindowAttributes attr;
23   Window dummy;
24   int xpos,ypos;
25   unsigned width,height,bd,depth;
26   int r;
27
28   id= strtoul(*++argv,&ep,0);
29   disp= XOpenDisplay(0);  eassert(disp);
30
31   r= XRaiseWindow(disp, id);  eassert(r);
32
33   r= XGetWindowAttributes(disp, id, &attr);  eassert(r);
34   r= XGetGeometry(disp,id, &attr.root,&xpos,&ypos,&width,&height, &bd,&depth);
35   eassert(r);
36
37   r= XTranslateCoordinates(disp, id,attr.root, 160,160, &xpos,&ypos,
38                            &dummy);
39   eassert(r);
40
41   int screen= XScreenNumberOfScreen(attr.screen);
42   XTestFakeMotionEvent(disp,screen, xpos, ypos, 0);
43   XTestFakeButtonEvent(disp,1,1, 0);
44   XTestFakeButtonEvent(disp,1,0, 100);
45
46   XTestFakeKeyEvent(disp, keycode("Next"),1, 100);
47   XTestFakeKeyEvent(disp, keycode("Next"),0, 100);
48   
49 #if 0  
50
51   while (*++argv) {
52     
53     memset(&ev,0,sizeof(ev));
54 #define KE ev.xkey
55 #define ME ev.xbutton
56
57     switch (**argv) {
58     case 'r':
59       break;
60
61 #define KMEVENT(e,t)                            \
62       e.type= t;                                \
63       e.window= id;                             \
64       e.root= attr.root;                        \
65       e.x= atoi(*++argv);                       \
66       e.y= atoi(*++argv);                       \
67       e.x_root= e.x;                            \
68       e.y_root= e.y;                            \
69       e.same_screen= True;                      \
70       kmevent(&ev);                             \
71       break;
72
73     case 'K': KE.keycode= ;      KMEVENT(KE,KeyPress);
74     case 'k': KE.keycode= keycode(*++argv);      KMEVENT(KE,KeyRelease);
75     case 'M': ME.button=1;                       KMEVENT(ME,ButtonPress);
76     case 'm': ME.button=1; ME.state=Button1Mask; KMEVENT(ME,ButtonRelease);
77     default:
78       abort();
79     }
80   }
81      
82 #endif 
83   r= XSync(disp, False);  eassert(r);
84   exit(0);
85 }