diff options
author | rsc <devnull@localhost> | 2003-10-13 17:16:29 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2003-10-13 17:16:29 +0000 |
commit | 59d7d92ee7a1de3387cedb079b1bfcfc75d34b8b (patch) | |
tree | 37fa225d401c8f404b02c39c1304563d2b3ca444 /src/libdraw | |
parent | e6f4b2e311cd461dd2d8380ba21ab113e5c8c072 (diff) | |
download | plan9port-59d7d92ee7a1de3387cedb079b1bfcfc75d34b8b.tar.gz plan9port-59d7d92ee7a1de3387cedb079b1bfcfc75d34b8b.tar.bz2 plan9port-59d7d92ee7a1de3387cedb079b1bfcfc75d34b8b.zip |
Flush the display when we poll for events.
Diffstat (limited to 'src/libdraw')
-rw-r--r-- | src/libdraw/x11-event.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/libdraw/x11-event.c b/src/libdraw/x11-event.c index 9a23547a..1361b42e 100644 --- a/src/libdraw/x11-event.c +++ b/src/libdraw/x11-event.c @@ -15,6 +15,24 @@ event(Event *e) return eread(~0UL, e); } +static void +eflush(void) +{ + /* avoid generating a message if there's nothing to show. */ + /* this test isn't perfect, though; could do flushimage(display, 0) then call extract */ + /* also: make sure we don't interfere if we're multiprocessing the display */ + if(display->locking){ + /* if locking is being done by program, this means it can't depend on automatic flush in emouse() etc. */ + if(canqlock(&display->qlock)){ + if(display->bufp > display->buf) + flushimage(display, 1); + unlockdisplay(display); + } + }else + if(display->bufp > display->buf) + flushimage(display, 1); +} + ulong eread(ulong keys, Event *e) { @@ -23,6 +41,8 @@ eread(ulong keys, Event *e) xmask = ExposureMask; + eflush(); + if(keys&Emouse) xmask |= MouseMask|StructureNotifyMask; if(keys&Ekeyboard) @@ -103,6 +123,7 @@ ecanmouse(void) XEvent xe; Mouse m; + eflush(); again: if(XCheckWindowEvent(_x.display, _x.drawable, MouseMask, &xe)){ if(xtoplan9mouse(&xe, &m) < 0) @@ -118,6 +139,7 @@ ecankbd(void) { XEvent xe; + eflush(); again: if(XCheckWindowEvent(_x.display, _x.drawable, KeyPressMask, &xe)){ if(xtoplan9kbd(&xe) == -1) @@ -134,3 +156,9 @@ emoveto(Point p) xmoveto(p); } +void +esetcursor(Cursor *c) +{ + xsetcursor(c); +} + |