diff --git a/cube/cube.c b/cube/cube.c index b4db7500c..63fc07b20 100644 --- a/cube/cube.c +++ b/cube/cube.c @@ -2854,6 +2854,7 @@ static void demo_create_xlib_window(struct demo *demo) { XMapWindow(demo->xlib_display, demo->xlib_window); XFlush(demo->xlib_display); demo->xlib_wm_delete_window = XInternAtom(demo->xlib_display, "WM_DELETE_WINDOW", False); + XSetWMProtocols(demo->xlib_display, demo->xlib_window, &demo->xlib_wm_delete_window, 1); } static void demo_handle_xlib_event(struct demo *demo, const XEvent *event) { switch (event->type) { diff --git a/cube/cube.cpp b/cube/cube.cpp index bad2cccb1..7f4b45d2a 100644 --- a/cube/cube.cpp +++ b/cube/cube.cpp @@ -3224,6 +3224,7 @@ void Demo::create_window() { XMapWindow(xlib_display, xlib_window); XFlush(xlib_display); xlib_wm_delete_window = XInternAtom(xlib_display, "WM_DELETE_WINDOW", False); + XSetWMProtocols(xlib_display, xlib_window, &xlib_wm_delete_window, 1); } void Demo::handle_xlib_event(const XEvent *event) { diff --git a/cube/xlib_loader.h b/cube/xlib_loader.h index 881789f18..5553558d7 100644 --- a/cube/xlib_loader.h +++ b/cube/xlib_loader.h @@ -41,6 +41,7 @@ typedef int (*PFN_XCloseDisplay)(Display* /* display */ typedef Status (*PFN_XInitThreads)(void); typedef int (*PFN_XFlush)(Display* /* display */ ); +typedef Status (*PFN_XSetWMProtocols)(Display*, Window, Atom*, int); static PFN_XDestroyWindow cube_XDestroyWindow = NULL; static PFN_XOpenDisplay cube_XOpenDisplay = NULL; @@ -55,6 +56,7 @@ static PFN_XGetVisualInfo cube_XGetVisualInfo = NULL; static PFN_XCloseDisplay cube_XCloseDisplay = NULL; static PFN_XInitThreads cube_XInitThreads = NULL; static PFN_XFlush cube_XFlush = NULL; +static PFN_XSetWMProtocols cube_XSetWMProtocols = NULL; #define XDestroyWindow cube_XDestroyWindow #define XOpenDisplay cube_XOpenDisplay @@ -69,6 +71,7 @@ static PFN_XFlush cube_XFlush = NULL; #define XCloseDisplay cube_XCloseDisplay #define XInitThreads cube_XInitThreads #define XFlush cube_XFlush +#define XSetWMProtocols cube_XSetWMProtocols void* initialize_xlib() { void* xlib_library = NULL; @@ -101,6 +104,7 @@ void* initialize_xlib() { cube_XCloseDisplay = TYPE_CONVERSION(PFN_XCloseDisplay)(dlsym(xlib_library, "XCloseDisplay")); cube_XInitThreads = TYPE_CONVERSION(PFN_XInitThreads)(dlsym(xlib_library, "XInitThreads")); cube_XFlush = TYPE_CONVERSION(PFN_XFlush)(dlsym(xlib_library, "XFlush")); + cube_XSetWMProtocols = TYPE_CONVERSION(PFN_XSetWMProtocols)(dlsym(xlib_library, "XSetWMProtocols")); return xlib_library; }