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:
parent
c5648a5105
commit
7648c23e43
2 changed files with 23 additions and 8 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,13 +4,20 @@
|
|||
|
||||
#include <Spectre/System/Event.h>
|
||||
#include <Platform/PlatformEventQueue.h>
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
namespace sp {
|
||||
|
||||
class X11EventQueue : public PlatformEventQueue
|
||||
{
|
||||
public :
|
||||
X11EventQueue();
|
||||
virtual ~X11EventQueue();
|
||||
|
||||
virtual bool poll(Event& event);
|
||||
|
||||
private :
|
||||
::Display* m_disp;
|
||||
};
|
||||
|
||||
} // namespace sp
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue