Blame


1 76193d7c 2003-09-30 devnull #include "x11-inc.h"
2 76193d7c 2003-09-30 devnull
3 76193d7c 2003-09-30 devnull #include <u.h>
4 76193d7c 2003-09-30 devnull #include <libc.h>
5 76193d7c 2003-09-30 devnull #include <draw.h>
6 76193d7c 2003-09-30 devnull #include <cursor.h>
7 76193d7c 2003-09-30 devnull #include <event.h>
8 76193d7c 2003-09-30 devnull
9 76193d7c 2003-09-30 devnull #include <memdraw.h>
10 76193d7c 2003-09-30 devnull #include "x11-memdraw.h"
11 76193d7c 2003-09-30 devnull
12 76193d7c 2003-09-30 devnull ulong
13 76193d7c 2003-09-30 devnull event(Event *e)
14 76193d7c 2003-09-30 devnull {
15 76193d7c 2003-09-30 devnull return eread(~0UL, e);
16 76193d7c 2003-09-30 devnull }
17 76193d7c 2003-09-30 devnull
18 76193d7c 2003-09-30 devnull ulong
19 76193d7c 2003-09-30 devnull eread(ulong keys, Event *e)
20 76193d7c 2003-09-30 devnull {
21 76193d7c 2003-09-30 devnull ulong xmask;
22 76193d7c 2003-09-30 devnull XEvent xevent;
23 76193d7c 2003-09-30 devnull
24 76193d7c 2003-09-30 devnull xmask = ExposureMask;
25 76193d7c 2003-09-30 devnull
26 76193d7c 2003-09-30 devnull if(keys&Emouse)
27 76193d7c 2003-09-30 devnull xmask |= MouseMask|StructureNotifyMask;
28 76193d7c 2003-09-30 devnull if(keys&Ekeyboard)
29 76193d7c 2003-09-30 devnull xmask |= KeyPressMask;
30 76193d7c 2003-09-30 devnull
31 76193d7c 2003-09-30 devnull XSelectInput(_x.display, _x.drawable, xmask);
32 76193d7c 2003-09-30 devnull again:
33 76193d7c 2003-09-30 devnull XWindowEvent(_x.display, _x.drawable, xmask, &xevent);
34 76193d7c 2003-09-30 devnull
35 76193d7c 2003-09-30 devnull switch(xevent.type){
36 76193d7c 2003-09-30 devnull case Expose:
37 76193d7c 2003-09-30 devnull xexpose(&xevent, _x.display);
38 76193d7c 2003-09-30 devnull goto again;
39 76193d7c 2003-09-30 devnull case ConfigureNotify:
40 76193d7c 2003-09-30 devnull if(xconfigure(&xevent, _x.display))
41 76193d7c 2003-09-30 devnull eresized(1);
42 76193d7c 2003-09-30 devnull goto again;
43 76193d7c 2003-09-30 devnull case ButtonPress:
44 76193d7c 2003-09-30 devnull case ButtonRelease:
45 76193d7c 2003-09-30 devnull case MotionNotify:
46 76193d7c 2003-09-30 devnull if(xtoplan9mouse(&xevent, &e->mouse) < 0)
47 76193d7c 2003-09-30 devnull goto again;
48 76193d7c 2003-09-30 devnull return Emouse;
49 76193d7c 2003-09-30 devnull case KeyPress:
50 76193d7c 2003-09-30 devnull e->kbdc = xtoplan9kbd(&xevent);
51 76193d7c 2003-09-30 devnull if(e->kbdc == -1)
52 76193d7c 2003-09-30 devnull goto again;
53 76193d7c 2003-09-30 devnull return Ekeyboard;
54 76193d7c 2003-09-30 devnull default:
55 76193d7c 2003-09-30 devnull return 0;
56 76193d7c 2003-09-30 devnull }
57 76193d7c 2003-09-30 devnull }
58 76193d7c 2003-09-30 devnull
59 76193d7c 2003-09-30 devnull void
60 76193d7c 2003-09-30 devnull einit(ulong keys)
61 76193d7c 2003-09-30 devnull {
62 76193d7c 2003-09-30 devnull keys &= ~(Emouse|Ekeyboard);
63 76193d7c 2003-09-30 devnull if(keys){
64 76193d7c 2003-09-30 devnull fprint(2, "unknown keys in einit\n");
65 76193d7c 2003-09-30 devnull abort();
66 76193d7c 2003-09-30 devnull }
67 76193d7c 2003-09-30 devnull }
68 76193d7c 2003-09-30 devnull
69 76193d7c 2003-09-30 devnull int
70 76193d7c 2003-09-30 devnull ekbd(void)
71 76193d7c 2003-09-30 devnull {
72 76193d7c 2003-09-30 devnull Event e;
73 76193d7c 2003-09-30 devnull
74 76193d7c 2003-09-30 devnull eread(Ekeyboard, &e);
75 76193d7c 2003-09-30 devnull return e.kbdc;
76 76193d7c 2003-09-30 devnull }
77 76193d7c 2003-09-30 devnull
78 76193d7c 2003-09-30 devnull Mouse
79 76193d7c 2003-09-30 devnull emouse(void)
80 76193d7c 2003-09-30 devnull {
81 76193d7c 2003-09-30 devnull Event e;
82 76193d7c 2003-09-30 devnull
83 76193d7c 2003-09-30 devnull eread(Emouse, &e);
84 76193d7c 2003-09-30 devnull return e.mouse;
85 76193d7c 2003-09-30 devnull }
86 76193d7c 2003-09-30 devnull
87 76193d7c 2003-09-30 devnull int
88 76193d7c 2003-09-30 devnull ecanread(ulong keys)
89 76193d7c 2003-09-30 devnull {
90 76193d7c 2003-09-30 devnull int can;
91 76193d7c 2003-09-30 devnull
92 76193d7c 2003-09-30 devnull can = 0;
93 76193d7c 2003-09-30 devnull if(keys&Emouse)
94 76193d7c 2003-09-30 devnull can |= ecanmouse();
95 76193d7c 2003-09-30 devnull if(keys&Ekeyboard)
96 76193d7c 2003-09-30 devnull can |= ecankbd();
97 76193d7c 2003-09-30 devnull return can;
98 76193d7c 2003-09-30 devnull }
99 76193d7c 2003-09-30 devnull
100 76193d7c 2003-09-30 devnull int
101 76193d7c 2003-09-30 devnull ecanmouse(void)
102 76193d7c 2003-09-30 devnull {
103 76193d7c 2003-09-30 devnull XEvent xe;
104 76193d7c 2003-09-30 devnull Mouse m;
105 76193d7c 2003-09-30 devnull
106 76193d7c 2003-09-30 devnull again:
107 76193d7c 2003-09-30 devnull if(XCheckWindowEvent(_x.display, _x.drawable, MouseMask, &xe)){
108 76193d7c 2003-09-30 devnull if(xtoplan9mouse(&xe, &m) < 0)
109 76193d7c 2003-09-30 devnull goto again;
110 76193d7c 2003-09-30 devnull XPutBackEvent(_x.display, &xe);
111 76193d7c 2003-09-30 devnull return 1;
112 76193d7c 2003-09-30 devnull }
113 76193d7c 2003-09-30 devnull return 0;
114 76193d7c 2003-09-30 devnull }
115 76193d7c 2003-09-30 devnull
116 76193d7c 2003-09-30 devnull int
117 76193d7c 2003-09-30 devnull ecankbd(void)
118 76193d7c 2003-09-30 devnull {
119 76193d7c 2003-09-30 devnull XEvent xe;
120 76193d7c 2003-09-30 devnull
121 76193d7c 2003-09-30 devnull again:
122 76193d7c 2003-09-30 devnull if(XCheckWindowEvent(_x.display, _x.drawable, KeyPressMask, &xe)){
123 76193d7c 2003-09-30 devnull if(xtoplan9kbd(&xe) == -1)
124 76193d7c 2003-09-30 devnull goto again;
125 76193d7c 2003-09-30 devnull XPutBackEvent(_x.display, &xe);
126 76193d7c 2003-09-30 devnull return 1;
127 76193d7c 2003-09-30 devnull }
128 76193d7c 2003-09-30 devnull return 0;
129 76193d7c 2003-09-30 devnull }
130 76193d7c 2003-09-30 devnull
131 76193d7c 2003-09-30 devnull void
132 76193d7c 2003-09-30 devnull emoveto(Point p)
133 76193d7c 2003-09-30 devnull {
134 76193d7c 2003-09-30 devnull xmoveto(p);
135 76193d7c 2003-09-30 devnull }
136 76193d7c 2003-09-30 devnull