Looking for **PAID** help with calling XSendEvent correctly

Sam Spilsbury smspillaz at gmail.com
Fri Dec 23 01:58:15 PST 2011


On Thu, Dec 22, 2011 at 9:20 AM, Aryeh Friedman
<aryeh.friedman at gmail.com> wrote:
> I have a Java program that calls the following code but somehow the
> events are not rebroadcasted... from my very limited knowledge of X (I
> have known C for years but never used it for GUI work) I highly
> suspect I some how got the second arg wrong (it seems that the JAWT
> window ID is not the same as the Xorg one)... since this is a high
> priority project my client is willing to pay for 1 to 2 hours of
> consulting on how to adjust the code to make it work... the final goal
> is we want to block all keystrokes not meant for the actual app
> (alt-f1:f9, ctl-alt-del, etc.)... namely the client is making a
> application to apply standardized tests to distance learning students
> and we need to enable a "kiosk" like mode (the user can not break out
> the app [or as much as is possible]... the reason is we want to
> prevent the test taker of using this as a work around the "closed
> book" restriction on a "closed book" test)... I can either have no
> event filtering (all events go their intended targets) or filtering
> and no forwarding (namely if a invert the test of which process to
> terminate on fork(2)).
>
> Note: I tried both InputFocus and PointerFocus for the target win of
> the event but that doesn't work nor does key->win.   Also I can handle
> all the coding except the actual XLib/XCB calls.
>
> // src/c/KioskJNI.c
>
> /**
>  * Any C needed to make Kiosk Mode work as expected
>  *
>  * Copyright (C) 2010-2011. Friedman-Nixon-Wong Enterprises, LLC.
>  *
>  * @author aryeh
>  * @version Mon Dec  5 03:47:46 2011
>  */
> #include <signal.h>
> #include <X11/Xlib.h>
> #include "jawt_md.h"
> #include "client_kiosk_core_KioskJNI.h"
>
> /**
>  * Block all OS signals (param's ignored)
>  */
> JNIEXPORT void JNICALL
> Java_client_kiosk_core_KioskJNI_blockSigs(JNIEnv *env, jclass cls,
> jobject comp)
> {
>        Display *dpy=XOpenDisplay(0);
>        int i=0;
>
>        for(i=0;i<256;i++)
>                signal(i,SIG_IGN);
>
>        JAWT awt;
>
>        printf("fart\n");
>
>        // Get the AWT
>        awt.version = JAWT_VERSION_1_4;
>        jboolean result = JAWT_GetAWT(env, &awt);
>
>        JAWT_DrawingSurface* ds=awt.GetDrawingSurface(env, comp);
>        ds->Lock(ds);
>        JAWT_DrawingSurfaceInfo* dsi=ds->GetDrawingSurfaceInfo(ds);
>        JAWT_X11DrawingSurfaceInfo* dsi_win =
> (JAWT_X11DrawingSurfaceInfo*)dsi->platformInfo;
>
>        printf("dsi %p\n",dsi);
>        printf("ds %p\n",ds);
>        jlong win=dsi_win->visualID;

I don't know AWT very well, but I would assume that if it were using
similar naming terminology to the rest of xlib, then I think that
dsi_win->visualID; is probably not the correct

>        printf("dsi_win %p\n",win);
>

Have you tried using the result of this in xwininfo -id ?

>        // Free the drawing surface info
>        ds->FreeDrawingSurfaceInfo(dsi);
>
>        // Unlock the drawing surface
>        ds->Unlock(ds);
>
>        // Free the drawing surface
>        awt.FreeDrawingSurface(ds);
>
>        XGrabKeyboard(dpy, DefaultRootWindow(dpy), True, GrabModeAsync,
> GrabModeAsync, CurrentTime);
>
>        int pid=fork();
>
>        if(!pid) {
>                return;
>        }
>
>        printf("%d\n",pid);
>
>        XEvent ev;
>
>        while(1) {
>                XNextEvent(dpy,&ev);
>                XKeyEvent *key=(XKeyEvent *) &ev;
>
>                printf("You typed a %d\n",key->keycode);
>
>
>                XSendEvent(dpy,win, True, (KeyPressMask | KeyReleaseMask), &ev);

Have you ensured that the receiving client has selected for
KeyPressMask and KeyReleaseMask ?

Check with xwininfo -id client_id -all

>                XFlush(dpy);
>        }
>
>        XCloseDisplay(dpy);
> }
> _______________________________________________
> xorg at lists.freedesktop.org: X.Org support
> Archives: http://lists.freedesktop.org/archives/xorg
> Info: http://lists.freedesktop.org/mailman/listinfo/xorg
> Your subscription address: smspillaz at gmail.com



-- 
Sam Spilsbury



More information about the xorg mailing list