+
+ XSelectInput(display, window, ButtonPressMask|ButtonReleaseMask|MotionMask|KeyPressMask|KeyReleaseMask);
+}
+
+void Window::process_event(const XEvent &event)
+{
+ switch(event.type)
+ {
+ case ButtonPress:
+ signal_button_press.emit(event.button.x, event.button.y, event.button.button, event.button.state);
+ break;
+ case ButtonRelease:
+ signal_button_release.emit(event.button.x, event.button.y, event.button.button, event.button.state);
+ break;
+ case PointerMotion:
+ signal_pointer_motion.emit(event.motion.x, event.motion.y);
+ break;
+ case KeyPress:
+ {
+ char buf[16];
+ XLookupString(event.key, buf, sizeof(buf), 0, 0);
+ // XXX Handle the result according to locale
+ signal_key_press.emit(event.key.keycode, event.key.state, buf[0]);
+ }
+ break;
+ case KeyRelease:
+ signal_key_release.emit(event.key.keycode, event.key.state);
+ break;
+ default:;
+ }