diff --git a/main.c b/main.c index 0d69b01..c6ccab2 100644 --- a/main.c +++ b/main.c @@ -1,6 +1,7 @@ #include #include #include +#include int main() { @@ -10,7 +11,31 @@ int main() XMapWindow(display, window); XFlush(display); - for(;;) { sleep(1); } + 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); + + 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; + } + } return 0; }