#include #include "X11EventQueue.h" #include "X11SharedDisplay.h" #include "X11WindowEventHandler.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) { event.type = Event::Quit; return true; } 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: // Pass to window. X11WindowEventHandler::process(disp, xevent); } } XReleaseDisplay(); return false; } } //namespace sp