From d6fb0427499896de82db02bdf15da1e502726e32 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 22 Nov 1999 04:40:16 +0000 Subject: [PATCH] Fixed a bug in input event handling. --- WINGs/ChangeLog | 3 +++ WINGs/wevent.c | 25 ++++++++++++++----------- WINGs/wutil.c | 21 ++++++++++++--------- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/WINGs/ChangeLog b/WINGs/ChangeLog index 4b9600b4..18c6de94 100644 --- a/WINGs/ChangeLog +++ b/WINGs/ChangeLog @@ -22,6 +22,9 @@ changes since wmaker 0.61.1: item that is beyond the total number of items present in the popup button. - changed names of functions for SplitView to be consistent. Some contained SubView while other Subview. Now all have Subview. +- fixed a bug in how input events were posted. Establishing 2 or more input + handlers for the same file descriptor, handling different (read/write/except) + events, caused wrong handlers to be called. changes since wmaker 0.61.0: ............................ diff --git a/WINGs/wevent.c b/WINGs/wevent.c index a90a67fa..a112bcd5 100644 --- a/WINGs/wevent.c +++ b/WINGs/wevent.c @@ -796,14 +796,17 @@ W_WaitForEvent(Display *dpy, unsigned long xeventmask) mask = 0; - if (fds[k].revents & (POLLIN|POLLRDNORM|POLLRDBAND|POLLPRI)) - mask |= WIReadMask; - - if (fds[k].revents & (POLLOUT | POLLWRBAND)) - mask |= WIWriteMask; - - if (fds[k].revents & (POLLHUP | POLLNVAL | POLLERR)) - mask |= WIExceptMask; + if ((handler->mask & WIReadMask) && + fds[k].revents & (POLLIN|POLLRDNORM|POLLRDBAND|POLLPRI)) + mask |= WIReadMask; + + if ((handler->mask & WIWriteMask) && + fds[k].revents & (POLLOUT | POLLWRBAND)) + mask |= WIWriteMask; + + if ((handler->mask & WIExceptMask) && + fds[k].revents & (POLLHUP | POLLNVAL | POLLERR)) + mask |= WIExceptMask; next = handler->next; @@ -890,13 +893,13 @@ W_WaitForEvent(Display *dpy, unsigned long xeventmask) mask = 0; - if (FD_ISSET(handler->fd, &rset)) + if ((handler->mask & WIReadMask) && FD_ISSET(handler->fd, &rset)) mask |= WIReadMask; - if (FD_ISSET(handler->fd, &wset)) + if ((handler->mask & WIWriteMask) && FD_ISSET(handler->fd, &wset)) mask |= WIWriteMask; - if (FD_ISSET(handler->fd, &eset)) + if ((handler->mask & WIExceptMask) && FD_ISSET(handler->fd, &eset)) mask |= WIExceptMask; next = handler->next; diff --git a/WINGs/wutil.c b/WINGs/wutil.c index 32e31262..d939c04b 100644 --- a/WINGs/wutil.c +++ b/WINGs/wutil.c @@ -442,14 +442,17 @@ handleInputEvents(Bool waitForInput) mask = 0; - if (fds[k].revents & (POLLIN|POLLRDNORM|POLLRDBAND|POLLPRI)) - mask |= WIReadMask; + if ((handler->mask & WIReadMask) && + fds[k].revents & (POLLIN|POLLRDNORM|POLLRDBAND|POLLPRI)) + mask |= WIReadMask; - if (fds[k].revents & (POLLOUT | POLLWRBAND)) - mask |= WIWriteMask; + if ((handler->mask & WIWriteMask) && + fds[k].revents & (POLLOUT | POLLWRBAND)) + mask |= WIWriteMask; - if (fds[k].revents & (POLLHUP | POLLNVAL | POLLERR)) - mask |= WIExceptMask; + if ((handler->mask & WIExceptMask) && + fds[k].revents & (POLLHUP | POLLNVAL | POLLERR)) + mask |= WIExceptMask; next = handler->next; @@ -531,13 +534,13 @@ handleInputEvents(Bool waitForInput) mask = 0; - if (FD_ISSET(handler->fd, &rset)) + if ((handler->mask & WIReadMask) && FD_ISSET(handler->fd, &rset)) mask |= WIReadMask; - if (FD_ISSET(handler->fd, &wset)) + if ((handler->mask & WIWriteMask) && FD_ISSET(handler->fd, &wset)) mask |= WIWriteMask; - if (FD_ISSET(handler->fd, &eset)) + if ((handler->mask & WIExceptMask) && FD_ISSET(handler->fd, &eset)) mask |= WIExceptMask; next = handler->next; -- 2.11.4.GIT