Har experimenterat med XGrabKeyboard och att totalt ta över tangentbordet funkar, men att släppa igenom vissa tangenter till winmanager det vill sig inte.
Är XGrabKeyboard en framkomlig väg och hur bör jag göra istället för nedanstående sk*tkod?
Debugutskrift tangenter: alt ner, tab ner, tab upp, alt upp
keydown 40 00
keydown 17 08
keydown 17 08
keyup 17 08
keyup 40 08
Kod: Markera allt
case KeyRelease: //key up
printf("keyup %02x %02x\n", ev.xkey.keycode, ev.xkey.state); //alt up?
if (ev.xkey.keycode==0x40 && isGrabbed){ //kbd brabbed?
XUngrabKeyboard(S.dpy, CurrentTime); //yes, ungrab
isGrabbed=false; //flag not ggrabbed
};
//do other stuff
break;
case KeyPress: //key down
printf("keydown %02x %02x\n", ev.xkey.keycode, ev.xkey.state);
if (ev.xkey.keycode==0x40 && ev.xkey.state==0x00){ //grab kbd when alt pressed
XGrabKeyboard(S.dpy, S.win, false, GrabModeAsync, GrabModeAsync, CurrentTime);
isGrabbed=true; //flag grabbed
};
if (ev.xkey.keycode==0x17 && ev.xkey.state==0x08){ //alt-tab ?
if (ev.xkey.send_event) break; //stop cascading
XUngrabKeyboard(S.dpy, CurrentTime); //restore normal
isGrabbed=false; //flag not gabbed
XSendEvent(S.dpy, S.win, false, KeyPressMask, &ev); //re-issue event
//break; //done
};
//do other stuff
break;