[xserver PATCH] dix: Send KeyPress and KeyRelease events to the XACE_KEY_AVAIL hook

Andrew Eikum aeikum at codeweavers.com
Wed May 6 06:27:46 PDT 2015


Ping. I know XACE doesn't get much work these days, but can someone
take a look at this? Is this an appropriate place to monitor all key
events?

Thanks for looking,
Andrew

On Wed, Apr 22, 2015 at 10:48:59AM -0500, Andrew Eikum wrote:
> While it's documented in the XACE spec, the XACE_KEY_AVAIL hook is
> currently never actually invoked by the xserver.
> 
> This hook was added in 13c6713c82 (25 Aug 2006), but as the keyboard
> processing was moved into XKB, the hook was forgotten and silently
> dropped. The code calling this hook was removed by 7af53799c (4 Jan
> 2009), but it was probably already unused before that.
> 
> This patch re-adds support for this hook. The "count" hook parameter is
> unused.
> 
> Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
> ---
> 
> I'm not intimately familiar with the xserver input code, but this seems
> like a logical place to invoke this XACE hook. The various keyboard
> devices call QueueKeyboardEvents, which places the events into a generic
> input queue for sending to clients. So, I think this makes a decent
> bottleneck through which we can expect all keyboard input events to
> flow.
> 
> Updates to the XACE spec documentation for the "count" parameter will
> follow, pending acceptance.
> 
> 
>  dix/getevents.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/dix/getevents.c b/dix/getevents.c
> index d0a87f7..e18248f 100644
> --- a/dix/getevents.c
> +++ b/dix/getevents.c
> @@ -51,6 +51,7 @@
>  #include "inpututils.h"
>  #include "mi.h"
>  #include "windowstr.h"
> +#include "xace.h"
>  
>  #include <X11/extensions/XKBproto.h>
>  #include "xkbsrv.h"
> @@ -1058,9 +1059,24 @@ void
>  QueueKeyboardEvents(DeviceIntPtr device, int type,
>                      int keycode)
>  {
> -    int nevents;
> +    int nevents, i;
>  
>      nevents = GetKeyboardEvents(InputEventList, device, type, keycode);
> +
> +    /* send KeyPress and KeyRelease events to XACE plugins */
> +    for (i = 0; i < nevents; i++) {
> +        if (InputEventList[i].any.type == ET_KeyPress ||
> +                InputEventList[i].any.type == ET_KeyRelease) {
> +            xEvent *core;
> +            int count;
> +
> +            if (EventToCore(&InputEventList[i], &core, &count) == Success) {
> +                XaceHook(XACE_KEY_AVAIL, core, device, 0);
> +                free(core);
> +            }
> +        }
> +    }
> +
>      queueEventList(device, InputEventList, nevents);
>  }
>  
> -- 
> 2.3.5
> 
> _______________________________________________
> 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