9 #include "x11-memdraw.h"
12 moveto(Mousectl *m, Point pt)
18 closemouse(Mousectl *mc)
23 /* postnote(PNPROC, mc->pid, "kill");
25 do; while(nbrecv(mc->c, &mc->m) > 0);
30 chanfree(mc->resizec);
35 readmouse(Mousectl *mc)
38 flushimage(mc->display, 1);
39 if(recv(mc->c, &mc->m) < 0){
40 fprint(2, "readmouse: %r\n");
57 threadsetname("mouseproc");
58 memset(&m, 0, sizeof m);
61 XSelectInput(_x.mousecon, _x.drawable, MouseMask|ExposureMask|StructureNotifyMask);
62 XWindowEvent(_x.mousecon, _x.drawable, MouseMask|ExposureMask|StructureNotifyMask, &xevent);
65 xexpose(&xevent, _x.mousecon);
68 if(xconfigure(&xevent, _x.mousecon))
69 nbsend(mc->resizec, &one);
74 if(xtoplan9mouse(&xevent, &m) < 0)
78 * mc->Mouse is updated after send so it doesn't have wrong value if we block during send.
79 * This means that programs should receive into mc->Mouse (see readmouse() above) if
80 * they want full synchrony.
89 initmouse(char *file, Image *i)
93 mc = mallocz(sizeof(Mousectl), 1);
95 mc->display = i->display;
96 mc->c = chancreate(sizeof(Mouse), 0);
97 mc->resizec = chancreate(sizeof(int), 2);
98 proccreate(_ioproc, mc, 16384);
103 setcursor(Mousectl *mc, Cursor *c)