Re: Keypressed/Keyreleased events not reaching my code

2009-11-17 Thread Scott Sibley
I figured this out after some reading.

On Mon, Nov 16, 2009 at 11:28 PM, Scott Sibley sisib...@gmail.com wrote:


 Hello. I'm writing an LCD controller, and one feature I'd like is the
 ability to interact with an LCD via the keyboard. I have the following code,
 but only the FocusOut/FocusIn events are firing.


 static Window GetCurrWindow(Display *d) {
 Window foo;
 Window win;
 int bar;

 do{
 (void) XQueryPointer(d, DefaultRootWindow(d), foo, win,
 bar, bar, bar, bar, (unsigned int *)bar);
 } while(win = 0);
 return(win);
 }

 void PluginKeyboard::PluginPoll() {
 Display *dpy = XOpenDisplay(NULL);
 if(!dpy) {
 LCDError(PluginKeyboard: Unable to open display.);
 return;
 }

 Window w = GetCurrWindow(dpy);
 XSelectInput(dpy, w, FocusChangeMask|KeyPressMask|KeyReleaseMask);
 while(started_) {

 if(!XPending(dpy))
 continue;

 XEvent event;
 char str[256+1];
 KeySym ks;
 char keycode;
 int c;

 XNextEvent(dpy, event);

 if(event.type == KeyPress) {
 c = XLookupString((XKeyEvent *)event, str, 256, ks, NULL);

 LCDError(KeyPressed);
 if(c!=0)
 continue;

 keycode = XKeysymToKeycode(dpy, ks);

 emit _KeyPressed(keycode);
 LCDError(Keypressed: %d, keycode);
 }

 if(event.type == KeyRelease) {
 c = XLookupString((XKeyEvent *)event, str, 256, ks, NULL);

 if(c!=0)
 continue;

 keycode = XKeysymToKeycode(dpy, ks);

 emit _KeyReleased(keycode);
 }

 if(event.type == FocusOut) {
 LCDError(FocusOut);
 XSelectInput(dpy, w = GetCurrWindow(dpy),
 FocusChangeMask|KeyPressMask|KeyReleaseMask);
 }

 }
 }



___
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Re: Keypressed/Keyreleased events not reaching my code

2009-11-17 Thread Daniel Stone
On Mon, Nov 16, 2009 at 11:28:44PM -0600, Scott Sibley wrote:
 Hello. I'm writing an LCD controller, and one feature I'd like is the
 ability to interact with an LCD via the keyboard. I have the following code,
 but only the FocusOut/FocusIn events are firing.

Either there's a passive grab, or your focus is on the wrong window.

Cheers,
Daniel


pgp4i9sh7PniZ.pgp
Description: PGP signature
___
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Keypressed/Keyreleased events not reaching my code

2009-11-16 Thread Scott Sibley
Hello. I'm writing an LCD controller, and one feature I'd like is the
ability to interact with an LCD via the keyboard. I have the following code,
but only the FocusOut/FocusIn events are firing.

static Window GetCurrWindow(Display *d) {
Window foo;
Window win;
int bar;

do{
(void) XQueryPointer(d, DefaultRootWindow(d), foo, win,
bar, bar, bar, bar, (unsigned int *)bar);
} while(win = 0);
return(win);
}

void PluginKeyboard::PluginPoll() {
Display *dpy = XOpenDisplay(NULL);
if(!dpy) {
LCDError(PluginKeyboard: Unable to open display.);
return;
}

Window w = GetCurrWindow(dpy);
XSelectInput(dpy, w, FocusChangeMask|KeyPressMask|KeyReleaseMask);
while(started_) {

if(!XPending(dpy))
continue;

XEvent event;
char str[256+1];
KeySym ks;
char keycode;
int c;

XNextEvent(dpy, event);

if(event.type == KeyPress) {
c = XLookupString((XKeyEvent *)event, str, 256, ks, NULL);

LCDError(KeyPressed);
if(c!=0)
continue;

keycode = XKeysymToKeycode(dpy, ks);

emit _KeyPressed(keycode);
LCDError(Keypressed: %d, keycode);
}

if(event.type == KeyRelease) {
c = XLookupString((XKeyEvent *)event, str, 256, ks, NULL);

if(c!=0)
continue;

keycode = XKeysymToKeycode(dpy, ks);

emit _KeyReleased(keycode);
}

if(event.type == FocusOut) {
LCDError(FocusOut);
XSelectInput(dpy, w = GetCurrWindow(dpy),
FocusChangeMask|KeyPressMask|KeyReleaseMask);
}

}
}
___
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg