[PATCH 2/2] PropertyNotify filters
Peter Hutterer
peter.hutterer at who-t.net
Thu Dec 1 21:09:29 PST 2011
On Thu, Dec 01, 2011 at 03:53:41PM -0500, Adam Jackson wrote:
> 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
I don't think we're short on request codes but RemovePropertyFilter could be
added with a mode: Remove. Though renaming the request to SetPropertyFilter
would be sensible then.
(side-node: 'Atom' should be uppercase in the texts)
Cheers,
Peter
> +
> 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
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
More information about the xorg-devel
mailing list