[PATCH 2/2] PropertyNotify filters

Adam Jackson ajax at redhat.com
Thu Dec 1 12:53:41 PST 2011


Signed-off-by: Adam Jackson <ajax at redhat.com>
---
 fixesproto.txt |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 xfixesproto.h  |   23 +++++++++++++++++++++++
 xfixeswire.h   |    4 +++-
 3 files changed, 75 insertions(+), 1 deletions(-)

diff --git a/fixesproto.txt b/fixesproto.txt
index 1ff442f..af7da7b 100644
--- a/fixesproto.txt
+++ b/fixesproto.txt
@@ -712,6 +712,55 @@ QueryAncestors
 
 	Errors: Window
 
+14. PropertyNotify filters
+
+The core protocol's PropertyNotify is rather noisy, as it will wake up all
+clients listening on a given window when any property on that window
+changes.  Typically clients are interested in only a few properties, so
+to avoid this thundering herd a filter is introduced.
+
+The client must still have selected PropertyChange on the window for this
+filter to be hit.  The new requests do not modify whether PropertyChange
+has been selected, only the set of events that are delivered.
+
+14.1 Requests
+
+AddPropertyFilter
+
+		window:			WINDOW
+		property:		LISTofATOM
+		mode:			{ Replace, Prepend, Append }
+
+	This request modifies the property filter for the named window for
+	the requesting client.  If mode is Prepend or Append, the listed
+	properties are added to the list of properties for which the client
+	will receive events.  If mode is Replace, the list of properties
+	replaces any existing filter list.  If an empty list is sent, no
+	events will be sent for any property changes.
+
+	If any atom in the list does not name a defined atom, BadAtom will
+	be generated, and the property filter list is unchanged.
+
+	Errors: Window, Atom, Value
+
+RemovePropertyFilter
+
+		window:			WINDOW
+		property:		LISTofATOM
+
+	This request modifies the property filter for the named window for
+	the requesting client.  The listed properties are removed from the
+	list of properties for which the client will receive events.  If
+	an empty list is sent, the client will revert to unfiltered (core
+	protocol) behaviour for PropertyNotify.
+
+	If any atom in the list does not name a defined atom, BadAtom will
+	be generated.  If any atom in the (non-empty) list does not match
+	an atom which the client has previously filtered for, BadMatch is
+	generated.  In either case, the property filter list is unchanged.
+
+	Errors: Window, Atom, Match
+
 99. Future compatibility
 
 This extension is not expected to remain fixed.  Future changes will
diff --git a/xfixesproto.h b/xfixesproto.h
index 717cba4..35864dc 100644
--- a/xfixesproto.h
+++ b/xfixesproto.h
@@ -590,6 +590,29 @@ typedef struct {
 
 #define sz_xXFixesQueryAncestorsReply 32
 
+typedef struct {
+    CARD8   reqType;
+    CARD8   xfixesReqType;
+    CARD16  length B16;
+    CARD32  mode B32;
+    Window  window B32;
+    CARD32  numAtoms B32;
+    /* list of atoms */
+} xXFixesAddPropertyFilterReq;
+
+#define sz_xXFixesAddPropertyFilterReq sizeof(xXFixesAddPropertyFilterReq)
+
+typedef struct {
+    CARD8   reqType;
+    CARD8   xfixesReqType;
+    CARD16  length B16;
+    CARD32  Window B32;
+    CARD32  numAtoms B32;
+    /* list of atoms */
+} xXFixesRemovePropertyFilterReq;
+
+#define sz_xXFixesRemovePropertyFilterReq sizeof(xXFixesRemovePropertyFilterReq
+
 #undef Barrier
 #undef Region
 #undef Picture
diff --git a/xfixeswire.h b/xfixeswire.h
index 8d2319b..b0ccdae 100644
--- a/xfixeswire.h
+++ b/xfixeswire.h
@@ -92,8 +92,10 @@
 /*************** Version 6 ******************/
 #define X_XFixesQueryPointer		    33
 #define X_XFixesQueryAncestors		    34
+#define X_XFixesAddPropertyFilter	    35
+#define X_XFixesRemovePropertyFilter	    36
 
-#define XFixesNumberRequests		    (X_XFixesQueryAncestors+1)
+#define XFixesNumberRequests		    (X_XFixesRemovePropertyFilter+1)
 
 /* Selection events share one event number */
 #define XFixesSelectionNotify		    0
-- 
1.7.6.4



More information about the xorg-devel mailing list