1 76193d7c 2003-09-30 devnull #include "x11-inc.h"
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>
9 76193d7c 2003-09-30 devnull #include <memdraw.h>
10 76193d7c 2003-09-30 devnull #include "x11-memdraw.h"
13 76193d7c 2003-09-30 devnull event(Event *e)
15 76193d7c 2003-09-30 devnull return eread(~0UL, e);
18 59d7d92e 2003-10-13 devnull static void
19 59d7d92e 2003-10-13 devnull eflush(void)
21 59d7d92e 2003-10-13 devnull /* avoid generating a message if there's nothing to show. */
22 59d7d92e 2003-10-13 devnull /* this test isn't perfect, though; could do flushimage(display, 0) then call extract */
23 59d7d92e 2003-10-13 devnull /* also: make sure we don't interfere if we're multiprocessing the display */
24 59d7d92e 2003-10-13 devnull if(display->locking){
25 59d7d92e 2003-10-13 devnull /* if locking is being done by program, this means it can't depend on automatic flush in emouse() etc. */
26 59d7d92e 2003-10-13 devnull if(canqlock(&display->qlock)){
27 59d7d92e 2003-10-13 devnull if(display->bufp > display->buf)
28 59d7d92e 2003-10-13 devnull flushimage(display, 1);
29 59d7d92e 2003-10-13 devnull unlockdisplay(display);
32 59d7d92e 2003-10-13 devnull if(display->bufp > display->buf)
33 59d7d92e 2003-10-13 devnull flushimage(display, 1);
37 76193d7c 2003-09-30 devnull eread(ulong keys, Event *e)
39 76193d7c 2003-09-30 devnull ulong xmask;
40 76193d7c 2003-09-30 devnull XEvent xevent;
42 76193d7c 2003-09-30 devnull xmask = ExposureMask;
44 59d7d92e 2003-10-13 devnull eflush();
46 76193d7c 2003-09-30 devnull if(keys&Emouse)
47 76193d7c 2003-09-30 devnull xmask |= MouseMask|StructureNotifyMask;
48 76193d7c 2003-09-30 devnull if(keys&Ekeyboard)
49 76193d7c 2003-09-30 devnull xmask |= KeyPressMask;
51 76193d7c 2003-09-30 devnull XSelectInput(_x.display, _x.drawable, xmask);
53 76193d7c 2003-09-30 devnull XWindowEvent(_x.display, _x.drawable, xmask, &xevent);
55 76193d7c 2003-09-30 devnull switch(xevent.type){
56 76193d7c 2003-09-30 devnull case Expose:
57 76193d7c 2003-09-30 devnull xexpose(&xevent, _x.display);
58 76193d7c 2003-09-30 devnull goto again;
59 76193d7c 2003-09-30 devnull case ConfigureNotify:
60 76193d7c 2003-09-30 devnull if(xconfigure(&xevent, _x.display))
61 76193d7c 2003-09-30 devnull eresized(1);
62 76193d7c 2003-09-30 devnull goto again;
63 76193d7c 2003-09-30 devnull case ButtonPress:
64 76193d7c 2003-09-30 devnull case ButtonRelease:
65 76193d7c 2003-09-30 devnull case MotionNotify:
66 76193d7c 2003-09-30 devnull if(xtoplan9mouse(&xevent, &e->mouse) < 0)
67 76193d7c 2003-09-30 devnull goto again;
68 76193d7c 2003-09-30 devnull return Emouse;
69 76193d7c 2003-09-30 devnull case KeyPress:
70 76193d7c 2003-09-30 devnull e->kbdc = xtoplan9kbd(&xevent);
71 76193d7c 2003-09-30 devnull if(e->kbdc == -1)
72 76193d7c 2003-09-30 devnull goto again;
73 76193d7c 2003-09-30 devnull return Ekeyboard;
75 76193d7c 2003-09-30 devnull return 0;
80 76193d7c 2003-09-30 devnull einit(ulong keys)
82 76193d7c 2003-09-30 devnull keys &= ~(Emouse|Ekeyboard);
83 76193d7c 2003-09-30 devnull if(keys){
84 76193d7c 2003-09-30 devnull fprint(2, "unknown keys in einit\n");
90 76193d7c 2003-09-30 devnull ekbd(void)
94 76193d7c 2003-09-30 devnull eread(Ekeyboard, &e);
95 76193d7c 2003-09-30 devnull return e.kbdc;
99 76193d7c 2003-09-30 devnull emouse(void)
101 76193d7c 2003-09-30 devnull Event e;
103 76193d7c 2003-09-30 devnull eread(Emouse, &e);
104 76193d7c 2003-09-30 devnull return e.mouse;
108 76193d7c 2003-09-30 devnull ecanread(ulong keys)
110 76193d7c 2003-09-30 devnull int can;
112 76193d7c 2003-09-30 devnull can = 0;
113 76193d7c 2003-09-30 devnull if(keys&Emouse)
114 76193d7c 2003-09-30 devnull can |= ecanmouse();
115 76193d7c 2003-09-30 devnull if(keys&Ekeyboard)
116 76193d7c 2003-09-30 devnull can |= ecankbd();
117 76193d7c 2003-09-30 devnull return can;
121 76193d7c 2003-09-30 devnull ecanmouse(void)
123 76193d7c 2003-09-30 devnull XEvent xe;
124 76193d7c 2003-09-30 devnull Mouse m;
126 59d7d92e 2003-10-13 devnull eflush();
128 76193d7c 2003-09-30 devnull if(XCheckWindowEvent(_x.display, _x.drawable, MouseMask, &xe)){
129 76193d7c 2003-09-30 devnull if(xtoplan9mouse(&xe, &m) < 0)
130 76193d7c 2003-09-30 devnull goto again;
131 76193d7c 2003-09-30 devnull XPutBackEvent(_x.display, &xe);
132 76193d7c 2003-09-30 devnull return 1;
134 76193d7c 2003-09-30 devnull return 0;
138 76193d7c 2003-09-30 devnull ecankbd(void)
140 76193d7c 2003-09-30 devnull XEvent xe;
142 59d7d92e 2003-10-13 devnull eflush();
144 76193d7c 2003-09-30 devnull if(XCheckWindowEvent(_x.display, _x.drawable, KeyPressMask, &xe)){
145 76193d7c 2003-09-30 devnull if(xtoplan9kbd(&xe) == -1)
146 76193d7c 2003-09-30 devnull goto again;
147 76193d7c 2003-09-30 devnull XPutBackEvent(_x.display, &xe);
148 76193d7c 2003-09-30 devnull return 1;
150 76193d7c 2003-09-30 devnull return 0;
154 76193d7c 2003-09-30 devnull emoveto(Point p)
156 76193d7c 2003-09-30 devnull xmoveto(p);
160 59d7d92e 2003-10-13 devnull esetcursor(Cursor *c)
162 59d7d92e 2003-10-13 devnull xsetcursor(c);