Thanks for the clue it was not exactly what you said but it gave me the right idea (namely instead of rebroadcasting I use normal method calling to make a callback in Java for the keystroke)
On Fri, Dec 23, 2011 at 4:58 AM, Sam Spilsbury <smspil...@gmail.com> wrote: > On Thu, Dec 22, 2011 at 9:20 AM, Aryeh Friedman > <aryeh.fried...@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@lists.freedesktop.org: X.Org support >> Archives: http://lists.freedesktop.org/archives/xorg >> Info: http://lists.freedesktop.org/mailman/listinfo/xorg >> Your subscription address: smspil...@gmail.com > > > > -- > Sam Spilsbury _______________________________________________ xorg@lists.freedesktop.org: X.Org support Archives: http://lists.freedesktop.org/archives/xorg Info: http://lists.freedesktop.org/mailman/listinfo/xorg Your subscription address: arch...@mail-archive.com