diff --git a/panel.cpp b/panel.cpp index 032574d..075c008 100644 --- a/panel.cpp +++ b/panel.cpp @@ -10,6 +10,7 @@ */ #include +#include #include "panel.h" using namespace std; @@ -288,16 +289,24 @@ void Panel::EventHandler(const Panel::FieldType& curfield) { field=curfield; bool loop = true; OnExpose(); + + struct pollfd x11_pfd = {0}; + x11_pfd.fd = ConnectionNumber(Dpy); + x11_pfd.events = POLLIN; while(loop) { - XNextEvent(Dpy, &event); - switch(event.type) { - case Expose: - OnExpose(); - break; + if(XPending(Dpy) || poll(&x11_pfd, 1, -1) > 0) { + while(XPending(Dpy)) { + XNextEvent(Dpy, &event); + switch(event.type) { + case Expose: + OnExpose(); + break; - case KeyPress: - loop=OnKeyPress(event); - break; + case KeyPress: + loop=OnKeyPress(event); + break; + } + } } }