diff options
author | Owen W. Taylor <otaylor@fishsoup.net> | 2014-04-27 00:12:20 -0400 |
---|---|---|
committer | Owen W. Taylor <otaylor@fishsoup.net> | 2014-07-03 13:35:39 -0400 |
commit | baa2fba8e204b7595498fb0d1023dd56b80fbec5 (patch) | |
tree | 3b1f083d8ccb1016de9bcc0009eb6008f3a1cee8 | |
parent | a4bc66325e0393f4976014a9b7628d3fe5eae34b (diff) | |
download | cogl-baa2fba8e204b7595498fb0d1023dd56b80fbec5.tar.gz |
examples/cogl-x11-tfp.c: Handle WM_DELETE_WINDOW
Clean up cleanly when closed rather than dying with an X Error -
we do this by advertising support for the WM_DELETE_WINDOW protocol
and handling the client message.
Reviewed-by: Robert Bragg <robert.bragg@intel.com>
-rw-r--r-- | examples/cogl-x11-tfp.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/examples/cogl-x11-tfp.c b/examples/cogl-x11-tfp.c index 7d4d7562..6a24b275 100644 --- a/examples/cogl-x11-tfp.c +++ b/examples/cogl-x11-tfp.c @@ -56,6 +56,8 @@ main (int argc, char **argv) XSetWindowAttributes xattr; unsigned long mask; Window xwin; + Atom atom_wm_protocols; + Atom atom_wm_delete_window; int screen; Window tfp_xwin; Pixmap pixmap; @@ -160,6 +162,10 @@ main (int argc, char **argv) xvisinfo->visual, mask, &xattr); + atom_wm_protocols = XInternAtom (xdpy, "WM_PROTOCOLS", False); + atom_wm_delete_window = XInternAtom (xdpy, "WM_DELETE_WINDOW", False); + XSetWMProtocols (xdpy, xwin, &atom_wm_delete_window, 1); + XFree (xvisinfo); cogl_x11_onscreen_set_foreign_window_xid (onscreen, xwin, @@ -216,6 +222,12 @@ main (int argc, char **argv) keysym = XLookupKeysym (&event.xkey, 0); if (keysym == XK_q || keysym == XK_Q || keysym == XK_Escape) return 0; + break; + case ClientMessage: + if (event.xclient.message_type == atom_wm_protocols && + event.xclient.data.l[0] == atom_wm_delete_window) + goto out; + break; } cogl_xlib_renderer_handle_event (renderer, &event); } |