aboutsummaryrefslogtreecommitdiff
path: root/src/libdraw
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-02-29 22:10:26 +0000
committerrsc <devnull@localhost>2004-02-29 22:10:26 +0000
commit5a8e63b2f016735364d17866d5e2bcb35d20c78b (patch)
treed5d0ce11e087efaf81c77311bac9d30aed41783d /src/libdraw
parentd51419bf4397cf13d0c50bf84c125477c6bed307 (diff)
downloadplan9port-5a8e63b2f016735364d17866d5e2bcb35d20c78b.tar.gz
plan9port-5a8e63b2f016735364d17866d5e2bcb35d20c78b.tar.bz2
plan9port-5a8e63b2f016735364d17866d5e2bcb35d20c78b.zip
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.
Diffstat (limited to 'src/libdraw')
-rw-r--r--src/libdraw/x11-itrans.c2
-rw-r--r--src/libdraw/x11-keyboard.c8
-rw-r--r--src/libdraw/x11-mouse.c8
3 files changed, 13 insertions, 5 deletions
diff --git a/src/libdraw/x11-itrans.c b/src/libdraw/x11-itrans.c
index 8e72b011..1b603902 100644
--- a/src/libdraw/x11-itrans.c
+++ b/src/libdraw/x11-itrans.c
@@ -454,7 +454,7 @@ _xselect(XEvent *e, XDisplay *xd)
memset(&r, 0, sizeof r);
xe = (XSelectionRequestEvent*)e;
-if(0) fprint(2, "xselect target=%d requestor=%d property=%d selection=%d\n",
+if(1) fprint(2, "xselect target=%d requestor=%d property=%d selection=%d\n",
xe->target, xe->requestor, xe->property, xe->selection);
r.xselection.property = xe->property;
if(xe->target == _x.targets){
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;
}
diff --git a/src/libdraw/x11-mouse.c b/src/libdraw/x11-mouse.c
index 9e5143c6..6da045bb 100644
--- a/src/libdraw/x11-mouse.c
+++ b/src/libdraw/x11-mouse.c
@@ -47,7 +47,7 @@ static
void
_ioproc(void *arg)
{
- int one;
+ int fd, one;
ulong mask;
Mouse m;
Mousectl *mc;
@@ -60,7 +60,10 @@ _ioproc(void *arg)
mc->pid = getpid();
mask = MouseMask|ExposureMask|StructureNotifyMask;
XSelectInput(_x.mousecon, _x.drawable, mask);
+ fd = XConnectionNumber(_x.mousecon);
for(;;){
+ while(XPending(_x.mousecon) == False)
+ threadfdwait(fd, 'r');
XNextEvent(_x.mousecon, &xevent);
switch(xevent.type){
case Expose:
@@ -105,12 +108,13 @@ initmouse(char *file, Image *i)
{
Mousectl *mc;
+ threadfdwaitsetup();
mc = mallocz(sizeof(Mousectl), 1);
if(i)
mc->display = i->display;
mc->c = chancreate(sizeof(Mouse), 0);
mc->resizec = chancreate(sizeof(int), 2);
- proccreate(_ioproc, mc, 16384);
+ threadcreate(_ioproc, mc, 16384);
return mc;
}