int Kernel::run() { XEvent event; LOGDEBUG("main event loop launched"); ostringstream oss; while (runlevel_ == Kernel::RUN) { XCORE->nextEvent(&event); switch (event.type) { case ButtonPress: LOGDEBUG("button press event"); handleButtonPress(&event.xbutton); break; case ButtonRelease: LOGDEBUG("button release event"); handleButtonRelease(&event.xbutton); break; case ClientMessage: LOGDEBUG("client message event"); handleClientMessage(&event.xclient); break; case ConfigureRequest: LOGDEBUG("configure request event"); handleConfigureRequest(&event.xconfigurerequest); break; case DestroyNotify: LOGDEBUG("destroy window event"); handleDestroyNotify(&event.xdestroywindow); break; case Expose: LOGDEBUG("expose event"); handleExpose(&event.xexpose); break; case KeyPress: LOGDEBUG("keypress event"); handleKeyPress(&event.xkey); break; case MapRequest: LOGDEBUG("map request event"); handleMapRequest(&event.xmaprequest); break; case MotionNotify: LOGDEBUG("motion event"); handleMotionNotify(&event.xmotion); break; case PropertyNotify: LOGDEBUG("property event"); handlePropertyNotify(&event.xproperty); break; case UnmapNotify: LOGDEBUG("unmap event"); handleUnmapNotify(&event.xunmap); break; } } return 0; }
void WindowSelector::processEvent(xcb_generic_event_t *event) { if (event->response_type == XCB_BUTTON_RELEASE) { xcb_button_release_event_t *buttonEvent = reinterpret_cast<xcb_button_release_event_t*>(event); handleButtonRelease(buttonEvent->detail, buttonEvent->child); } else if (event->response_type == XCB_KEY_PRESS) { xcb_key_press_event_t *keyEvent = reinterpret_cast<xcb_key_press_event_t*>(event); handleKeyPress(keyEvent->detail, keyEvent->state); } }