#include #include int main (void) { int active = 1; unsigned short int window_width = 640; unsigned short int window_height = 480; xcb_window_t window = 0; xcb_connection_t * connection = NULL; xcb_screen_t * screen = NULL; xcb_generic_event_t * event = NULL; unsigned int window_flags [2] = { 0, XCB_EVENT_MASK_NO_EVENT | XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_RESIZE_REDIRECT | XCB_EVENT_MASK_KEY_RELEASE | XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_BUTTON_PRESS }; connection = xcb_connect (NULL, NULL); screen = xcb_setup_roots_iterator (xcb_get_setup (connection)).data; window = xcb_generate_id (connection); window_flags [0] = screen->black_pixel; xcb_create_window (connection, screen->root_depth, window, screen->root, 0, 0, window_width, window_height, 10, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual, XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK, window_flags); xcb_map_window (connection, window); xcb_flush (connection); while (active) { event = xcb_wait_for_event (connection); switch (event->response_type & 127) { case XCB_EXPOSE: xcb_flush (connection); break; case XCB_KEY_PRESS: if ((int) ((xcb_key_press_event_t *) event)->detail == 24) { active = 0; } break; default: break; } free (event); } xcb_destroy_window (connection, window); xcb_disconnect (connection); return (0); }