summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--x11vnc.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/x11vnc.c b/x11vnc.c
index 7181d75..922ba84 100644
--- a/x11vnc.c
+++ b/x11vnc.c
@@ -11,6 +11,8 @@
#include <sys/shm.h>
#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<syms_per_keycode;j++) {
key=keymap[(i-minkey)*syms_per_keycode+j];
+#ifdef KBDDEBUG
+ fprintf(stderr,"keymap(i=0x%x,j=%d)==0x%lx\n",i,j,key);
+#endif
if(key>=' ' && 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;
}
}