[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