Keypressed/Keyreleased events not reaching my code
Scott Sibley
sisibley at gmail.com
Tue Nov 17 00:47:03 PST 2009
I figured this out after some reading.
On Mon, Nov 16, 2009 at 11:28 PM, Scott Sibley <sisibley at 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);
> }
>
> }
> }
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg/attachments/20091117/78c8847d/attachment.html>
More information about the xorg
mailing list