diff --git a/source/Platform/Unix/X11EventQueue.cpp b/source/Platform/Unix/X11EventQueue.cpp index be51bac..6a4e73f 100644 --- a/source/Platform/Unix/X11EventQueue.cpp +++ b/source/Platform/Unix/X11EventQueue.cpp @@ -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; } diff --git a/source/Platform/Unix/X11EventQueue.h b/source/Platform/Unix/X11EventQueue.h index 9239694..73b363f 100644 --- a/source/Platform/Unix/X11EventQueue.h +++ b/source/Platform/Unix/X11EventQueue.h @@ -4,13 +4,20 @@ #include #include +#include namespace sp { class X11EventQueue : public PlatformEventQueue { public : + X11EventQueue(); + virtual ~X11EventQueue(); + virtual bool poll(Event& event); + +private : + ::Display* m_disp; }; } // namespace sp