#include #include #include #include int main() { Display *display = XOpenDisplay(NULL); Window main_window = XDefaultRootWindow(display); int screen = DefaultScreen(display); GC context = XDefaultGC(display, screen); XSetWindowAttributes attributes = {}; attributes.background_pixel = 0xffffccaa; attributes.event_mask = ResizeRedirectMask | ExposureMask; Window window = XCreateWindow(display, main_window, 0, 0, 1920, 1080, 1, CopyFromParent, CopyFromParent, CopyFromParent, CWBackPixel | CWEventMask, &attributes); XMapWindow(display, window); XFlush(display); Atom WM_DELETE_WINDOW = XInternAtom(display, "WM_DELETE_WINDOW", False); if(!XSetWMProtocols(display, window, &WM_DELETE_WINDOW, 1)) { printf("Couldn't register WM_DELETE_WINDOW property \n"); } int is_open = 1; while(is_open) { XEvent general_event = {}; XNextEvent(display, &general_event); printf("Type: %d \n", general_event.type); switch(general_event.type) { case ClientMessage: { XClientMessageEvent *event = (XClientMessageEvent *) &general_event; if((Atom)event->data.l[0] == WM_DELETE_WINDOW) { XDestroyWindow(display, window); is_open = 0; printf("Window destroyed \n"); } } break; case ResizeRequest: { static unsigned long color = 0x00aade87; if(color == 0x00aade87) color = 0xd000d087; else color = 0x00aade87; XSetWindowBackground(display, window, color); } break; } XClearWindow(display, window); } return 0; }