From 5a8e63b2f016735364d17866d5e2bcb35d20c78b Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 29 Feb 2004 22:10:26 +0000 Subject: Fighting the good fight. Move libfmt, libutf into subdirectories of lib9. Add poll-based socket i/o to libthread, so that we can avoid using multiple procs when possible, thus removing dependence on crappy pthreads implementations. Convert samterm, acme to the single-proc libthread. Bring libcomplete, acme up-to-date w.r.t. Plan 9 distribution. --- src/libdraw/x11-keyboard.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/libdraw/x11-keyboard.c') diff --git a/src/libdraw/x11-keyboard.c b/src/libdraw/x11-keyboard.c index 676027e3..83bbbfe8 100644 --- a/src/libdraw/x11-keyboard.c +++ b/src/libdraw/x11-keyboard.c @@ -34,6 +34,7 @@ void _ioproc(void *arg) { int i; + int fd; Keyboardctl *kc; Rune r; XEvent xevent; @@ -41,9 +42,11 @@ _ioproc(void *arg) kc = arg; threadsetname("kbdproc"); kc->pid = getpid(); + fd = XConnectionNumber(_x.kbdcon); XSelectInput(_x.kbdcon, _x.drawable, KeyPressMask); for(;;){ - XWindowEvent(_x.kbdcon, _x.drawable, KeyPressMask, &xevent); + while(XCheckWindowEvent(_x.kbdcon, _x.drawable, KeyPressMask, &xevent) == False) + threadfdwait(fd, 'r'); switch(xevent.type){ case KeyPress: i = _xtoplan9kbd(&xevent); @@ -65,11 +68,12 @@ initkeyboard(char *file) { Keyboardctl *kc; + threadfdwaitsetup(); kc = mallocz(sizeof(Keyboardctl), 1); if(kc == nil) return nil; kc->c = chancreate(sizeof(Rune), 20); - proccreate(_ioproc, kc, 4096); + threadcreate(_ioproc, kc, 4096); return kc; } -- cgit v1.2.3