diff --git a/x11vnc.c b/x11vnc.c index 7181d75..922ba84 100644 --- a/x11vnc.c +++ b/x11vnc.c @@ -11,6 +11,8 @@ #include #endif #define KEYSYM_H +#undef Bool +#define KeySym RFBKeySym #include "rfb.h" Display *dpy = 0; @@ -24,6 +26,7 @@ Bool sharedMode = FALSE; Bool disconnectAfterFirstClient = TRUE; /* keyboard handling */ +#define KBDDEBUG char modifiers[0x100]; KeyCode keycodes[0x100],leftShiftCode,rightShiftCode,altGrCode; @@ -38,12 +41,23 @@ void init_keycodes() XDisplayKeycodes(dpy,&minkey,&maxkey); keymap=XGetKeyboardMapping(dpy,minkey,(maxkey - minkey + 1),&syms_per_keycode); +#ifdef KBDDEBUG + fprintf(stderr,"minkey=%d, maxkey=%d, syms_per_keycode=%d\n", + minkey,maxkey,syms_per_keycode); +#endif for (i = minkey; i <= maxkey; i++) for(j=0;j=' ' && key<0x100 && i==XKeysymToKeycode(dpy,key)) { keycodes[key]=i; modifiers[key]=j; +#ifdef KBDDEBUG + fprintf(stderr,"key 0x%lx (%c): keycode=0x%x, modifier=%d\n", + key,(char)key,i,j); +#endif } } @@ -51,6 +65,11 @@ void init_keycodes() rightShiftCode=XKeysymToKeycode(dpy,XK_Shift_R); altGrCode=XKeysymToKeycode(dpy,XK_Mode_switch); +#ifdef KBDDEBUG + fprintf(stderr,"leftShift=0x%x, rightShift=0x%x, altGr=0x%x\n", + leftShiftCode,rightShiftCode,altGrCode); +#endif + XFree ((char *) keymap); } @@ -61,7 +80,7 @@ void clientGone(rfbClientPtr cl) exit(0); } -void newClient(rfbClientPtr cl) +enum rfbNewClientAction newClient(rfbClientPtr cl) { if(disconnectAfterFirstClient) cl->clientGoneHook = clientGone; @@ -69,6 +88,7 @@ void newClient(rfbClientPtr cl) cl->clientData = (void*)-1; else cl->clientData = (void*)0; + return(RFB_CLIENT_ACCEPT); } #define LEFTSHIFT 1 @@ -81,6 +101,10 @@ char ModifierState = 0; void tweakModifiers(char mod,Bool down) { Bool isShift=ModifierState&(LEFTSHIFT|RIGHTSHIFT); +#ifdef KBDDEBUG + fprintf(stderr,"tweakModifiers: 0x%x %s\n", + mod,down?"down":"up"); +#endif if(mod<0) return; if(isShift && mod!=1) { if(ModifierState&LEFTSHIFT) @@ -108,6 +132,11 @@ void keyboard(Bool down,KeySym keySym,rfbClientPtr cl) ADJUSTMOD(XK_Shift_R,RIGHTSHIFT) ADJUSTMOD(XK_Mode_switch,ALTGR) +#ifdef KBDDEBUG + fprintf(stderr,"keyboard: down=%s, keySym=0x%lx (%s), ModState=0x%x\n", + down?"down":"up",keySym,XKeysymToString(keySym),ModifierState); +#endif + if(keySym>=' ' && keySym<0x100) { KeyCode k; if(down) @@ -119,7 +148,6 @@ void keyboard(Bool down,KeySym keySym,rfbClientPtr cl) XTestFakeKeyEvent(dpy,k,down,CurrentTime); gotInput = TRUE; } - /*XTestFakeKeyEvent(dpy,keycodes[keySym],down,CurrentTime);*/ if(down) tweakModifiers(modifiers[keySym],False); gotInput = TRUE; @@ -462,7 +490,7 @@ int main(int argc,char** argv) rfbClientPtr cl; for(cl=screen->rfbClientHead;cl;cl=cl->next) if(!strcmp(message+1,cl->host)) { - cl->clientData=(cl->clientData==0)?-1:0; + cl->clientData=(void*)((cl->clientData==0)?-1:0); break; } }