summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen W. Taylor <otaylor@fishsoup.net>2014-04-27 00:12:20 -0400
committerOwen W. Taylor <otaylor@fishsoup.net>2014-07-03 13:35:39 -0400
commitbaa2fba8e204b7595498fb0d1023dd56b80fbec5 (patch)
tree3b1f083d8ccb1016de9bcc0009eb6008f3a1cee8
parenta4bc66325e0393f4976014a9b7628d3fe5eae34b (diff)
downloadcogl-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.c12
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);
}