diff options
Diffstat (limited to 'src/safe_x11/safex11.c')
-rw-r--r-- | src/safe_x11/safex11.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/safe_x11/safex11.c b/src/safe_x11/safex11.c new file mode 100644 index 0000000..e4f87d8 --- /dev/null +++ b/src/safe_x11/safex11.c @@ -0,0 +1,32 @@ +#include "safex11.h" +#include <stdio.h> +#include <stdlib.h> +#include <X11/Xutil.h> + +int select_next_event(Display *display, int x11_fd, XEvent *retval) +{ + fd_set in_fds; + struct timeval tv; + XEvent ev; + /* check if there're some events on the queue first of all. */ + if(XPending(display) > 0) + goto EVENT_QUEUED; + + FD_ZERO(&in_fds); + FD_SET(x11_fd, &in_fds); + + /* one second */ + tv.tv_usec = 0; + tv.tv_sec = 1; + + /* Wait for X Event or a Timer */ + if(select(x11_fd+1, &in_fds, 0, 0, &tv)) + goto EVENT_QUEUED; + + return 0; + +EVENT_QUEUED: + XNextEvent(display, &ev); + *retval = ev; + return 1; +} |