From: Noah Levitt Date: Thu, 6 Dec 2007 10:03:41 +0000 (-0500) Subject: Handle WM_DELETE_WINDOW From bug 319¹: X-Git-Tag: submit/tizen/20130910.024858~38 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F73%2F9173%2F1;p=platform%2Fupstream%2Fxev.git Handle WM_DELETE_WINDOW From bug 319¹: Make xev exit on WM_DELETE_WINDOW. 1] https://bugs.freedesktop.org/show_bug.cgi?id=319 Change-Id: I1a8b868ae7f02ede0a54404e7c7a904645fb83e0 Signed-off-by: James Cloos --- diff --git a/ChangeLog b/ChangeLog index b7f7baa..d796248 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-12-06 James Cloos + + * xev.c: + Bug #319: handle WM_DELETE_WINDOW. (Noah Levitt) + 2006-06-02 Daniel Stone * configure.ac: diff --git a/xev.c b/xev.c index 8ecf148..5b9a5cc 100644 --- a/xev.c +++ b/xev.c @@ -70,6 +70,9 @@ int screen; XIC xic = NULL; +Atom wm_delete_window; +Atom wm_protocols; + static void prologue (XEvent *eventp, char *event_name) { @@ -581,10 +584,23 @@ do_ClientMessage (XEvent *eventp) XClientMessageEvent *e = (XClientMessageEvent *) eventp; char *mname = XGetAtomName (dpy, e->message_type); - printf (" message_type 0x%lx (%s), format %d\n", - e->message_type, mname ? mname : Unknown, e->format); + if (e->message_type == wm_protocols) { + char *message = XGetAtomName (dpy, e->data.l[0]); + printf (" message_type 0x%lx (%s), format %d, message 0x%lx (%s)\n", + e->message_type, mname ? mname : Unknown, e->format, e->data.l[0], message); + if (message) XFree (message); + } + else { + printf (" message_type 0x%lx (%s), format %d\n", + e->message_type, mname ? mname : Unknown, e->format); + } if (mname) XFree (mname); + + if (e->format == 32 + && e->message_type == wm_protocols + && (Atom) e->data.l[0] == wm_delete_window) + exit (0); } static void @@ -885,6 +901,10 @@ main (int argc, char **argv) INNER_WINDOW_BORDER, attr.border_pixel, attr.background_pixel); + wm_protocols = XInternAtom(dpy, "WM_PROTOCOLS", False); + wm_delete_window = XInternAtom(dpy, "WM_DELETE_WINDOW", False); + XSetWMProtocols(dpy, w, &wm_delete_window, 1); + XMapWindow (dpy, subw); /* map before w so that it appears */ XMapWindow (dpy, w);