xhartae/example/xcb_window.c

67 lines
1.5 KiB
C

#include <xcb/xcb.h>
#include <stdlib.h>
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);
}