62 lines
1.1 KiB
C++
62 lines
1.1 KiB
C++
|
|
#include <Spectre/System/Log.h>
|
|
#include "X11EventQueue.h"
|
|
#include "X11SharedDisplay.h"
|
|
|
|
namespace sp {
|
|
|
|
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) {
|
|
return false;
|
|
}
|
|
|
|
num_events = XEventsQueued(disp, QueuedAlready);
|
|
|
|
for(int i = 0; i < num_events; i++) {
|
|
|
|
XNextEvent(disp, &xevent);
|
|
|
|
switch(xevent.type) {
|
|
case ClientMessage:
|
|
Log::info("X11: ClientMessage");
|
|
|
|
if (xevent.xclient.message_type == wm_proto
|
|
&& xevent.xclient.data.l[0] == del_win) {
|
|
|
|
Log::info("X11: Delete window");
|
|
}
|
|
break;
|
|
case ResizeRequest:
|
|
Log::info("X11: Resize event");
|
|
break;
|
|
case KeyPress:
|
|
case KeyRelease:
|
|
Log::info("X11: KeyEvent");
|
|
break;
|
|
case ButtonPress:
|
|
case ButtonRelease:
|
|
Log::info("X11: MouseButtonEvent");
|
|
break;
|
|
case MotionNotify:
|
|
// This generates alot of events :)
|
|
//Log::info("X11: MouseMotionEvent");
|
|
break;
|
|
default:
|
|
Log::info("Unknown event");
|
|
}
|
|
}
|
|
|
|
XReleaseDisplay();
|
|
|
|
return false;
|
|
}
|
|
|
|
} //namespace sp
|