[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

x11-utils: Changes to 'debian-unstable'



 debian/changelog                                 |    8 +++
 debian/patches/05_xprop_spy_exit_on_destroy.diff |   50 +++++++++++++++++++++++
 debian/patches/series                            |    1 
 3 files changed, 59 insertions(+)

New commits:
commit 604903e460af8e7c1ebc40d4e7e04f9b45341f63
Author: Ben Hutchings <ben@decadent.org.uk>
Date:   Sun Jan 4 12:27:25 2009 +0100

    Make xprop -spy exit cleanly when target window is destroyed

diff --git a/debian/changelog b/debian/changelog
index 0703da6..bd0bd32 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+x11-utils (7.3+2+nmu1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Make xprop -spy exit cleanly when target window is destroyed
+    (closes: #508126)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 03 Jan 2009 22:22:40 +0000
+
 x11-utils (7.3+2) unstable; urgency=low
 
   * Relax Replaces on xutils and xbase-clients to allow further updates.
diff --git a/debian/patches/05_xprop_spy_exit_on_destroy.diff b/debian/patches/05_xprop_spy_exit_on_destroy.diff
new file mode 100644
index 0000000..69a2721
--- /dev/null
+++ b/debian/patches/05_xprop_spy_exit_on_destroy.diff
@@ -0,0 +1,50 @@
+This patch by Ben Hutchings <ben@decadent.org.uk>.
+
+xprop -spy should exit cleanly when the target window is destroyed.
+The current behaviour is that it sometimes dies with a BadWindow error
+and sometimes hangs around after the target has been destroyed.
+
+We fix this by listening for destroy events but also catching
+BadWindow errors (and BadMatch, which may sometimes be received
+instead of BadWindow).  We print a new-line before exiting from the
+error handler, since we may have generated partial output for a
+property change.
+
+--- x11-utils.orig/xprop/xprop.c
++++ x11-utils/xprop/xprop.c
+@@ -1596,6 +1596,19 @@
+ 
+ static int spy = 0;
+ 
++static int (*old_error_handler)(Display *dpy, XErrorEvent *ev);
++
++static int spy_error_handler(Display *dpy, XErrorEvent *ev)
++{
++    if (ev->error_code == BadWindow || ev->error_code == BadMatch) {
++	/* Window was destroyed */
++	puts("");
++	exit(0);
++    }
++
++    return old_error_handler(dpy, ev);
++}
++
+ int
+ main (int argc, char **argv)
+ {
+@@ -1738,9 +1750,14 @@
+ 	XEvent event;
+ 	const char *format, *dformat;
+ 	
+-	XSelectInput(dpy, target_win, PropertyChangeMask);
++	XSelectInput(dpy, target_win, PropertyChangeMask | StructureNotifyMask);
++	old_error_handler = XSetErrorHandler(spy_error_handler);
+ 	for (;;) {
+ 	    XNextEvent(dpy, &event);
++	    if (event.type == DestroyNotify)
++		break;
++	    if (event.type != PropertyNotify)
++		continue;
+ 	    format = dformat = NULL;
+ 	    if (props) {
+ 		int i;
diff --git a/debian/patches/series b/debian/patches/series
index c8dec57..24a51a9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
 02_xev_flush_standard_output.diff
 04_xlsfonts_do_not_spew_usage_on_connection_error.diff -p0
+05_xprop_spy_exit_on_destroy.diff


Reply to: