1
0
Fork 0

Platform/Unix/X11EventQueue: get and release display handle in constructor/destructor instead of every call to poll()

Should be fine as the display should never change during runtime.
This commit is contained in:
Henrik Hautakoski 2020-09-25 18:17:36 +02:00
parent 053511453f
commit b21c62d98c
2 changed files with 23 additions and 8 deletions

View file

@ -6,24 +6,34 @@
namespace sp {
X11EventQueue::X11EventQueue()
{
m_disp = XGetDisplay();
}
X11EventQueue::~X11EventQueue()
{
if (m_disp) {
XReleaseDisplay();
}
}
bool X11EventQueue::poll(Event& event)
{
XEvent xevent;
int num_events;
::Display* disp;
Atom del_win = getAtom("WM_DELETE_WINDOW");
Atom wm_proto = getAtom("WM_PROTOCOLS");
disp = XGetDisplay();
if (disp == NULL) {
if (m_disp == NULL) {
return false;
}
num_events = XEventsQueued(disp, QueuedAlready);
num_events = XEventsQueued(m_disp, QueuedAlready);
for(int i = 0; i < num_events; i++) {
XNextEvent(disp, &xevent);
XNextEvent(m_disp, &xevent);
switch(xevent.type) {
case ClientMessage:
@ -53,12 +63,10 @@ bool X11EventQueue::poll(Event& event)
break;
default:
// Pass to window.
X11WindowEventHandler::process(disp, xevent);
X11WindowEventHandler::process(m_disp, xevent);
}
}
XReleaseDisplay();
return false;
}