diff --git a/x11vnc/README b/x11vnc/README index 6928025..81af737 100644 --- a/x11vnc/README +++ b/x11vnc/README @@ -1,5 +1,5 @@ -x11vnc README file Date: Sun Aug 19 14:30:12 EDT 2007 +x11vnc README file Date: Sun Aug 19 15:46:48 EDT 2007 The following information is taken from these URLs: @@ -13101,7 +13101,7 @@ t They apply only when there is ambiguity as to which key to choose (i.e the mapping is not one-to-one). NOKEYHINTS=1: for up ascii keystrokes do not use score - hints saved when the keep was press down. NOANYDOWN=1: + hints saved when the key was pressed down. NOANYDOWN=1: for up keystrokes do not resort to searching through keys that are currently pressed down. KEYSDOWN=N: remember the last N keys press down for tie-breaking diff --git a/x11vnc/help.c b/x11vnc/help.c index 03a3e1a..b22b19a 100644 --- a/x11vnc/help.c +++ b/x11vnc/help.c @@ -1943,7 +1943,7 @@ void print_help(int mode) { " They apply only when there is ambiguity as to which\n" " key to choose (i.e the mapping is not one-to-one).\n" " NOKEYHINTS=1: for up ascii keystrokes do not use score\n" -" hints saved when the keep was press down. NOANYDOWN=1:\n" +" hints saved when the key was pressed down. NOANYDOWN=1:\n" " for up keystrokes do not resort to searching through\n" " keys that are currently pressed down. KEYSDOWN=N:\n" " remember the last N keys press down for tie-breaking\n" diff --git a/x11vnc/keyboard.c b/x11vnc/keyboard.c index 15e7c70..e739501 100644 --- a/x11vnc/keyboard.c +++ b/x11vnc/keyboard.c @@ -1466,7 +1466,7 @@ xkbmodifiers[] For the KeySym bound to this (keycode,group,level) store } } -static int score_hint[0x100][0x100]; +static short **score_hint = NULL; /* * Called on user keyboard input. Try to solve the reverse mapping * problem: KeySym (from VNC client) => KeyCode(s) to press to generate @@ -1516,9 +1516,16 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym, } else { klast = 3; } - for (i=0; i<0x100; i++) { - for (j=0; j<0x100; j++) { - score_hint[i][j] = -1; + if (khints && score_hint == NULL) { + score_hint = (short **) malloc(0x100 * sizeof(short *)); + for (i=0; i<0x100; i++) { + score_hint[i] = (short *) malloc(0x100 * sizeof(short)); + } + + for (i=0; i<0x100; i++) { + for (j=0; j<0x100; j++) { + score_hint[i][j] = -1; + } } } } @@ -1714,7 +1721,7 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym, kc_f[l], myscore); } if (khints && keysym < 0x100 && kc_f[l] < 0x100) { - score_hint[(int) keysym][kc_f[l]] = score[l]; + score_hint[(int) keysym][kc_f[l]] = (short) score[l]; } } for (l=0; l < found; l++) { @@ -1738,7 +1745,8 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym, if (khints && keysym < 0x100) { /* low keysyms, ascii, only */ int ks = (int) keysym; - int ok = 1, sbest = -1, lbest, l; + int ok = 1, lbest, l; + short sbest = -1; for (l=0; l < found; l++) { if (kc_f[l] < 0x100) { int key = (int) kc_f[l]; @@ -1812,7 +1820,6 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym, * physical display (but is updated * periodically to clean out stale info). */ - /* we could probably break ties based on lowest XKeycodeToKeysym index */ for (l=0; l < found; l++) { int key = (int) kc_f[l]; int j, jmatch = -1; @@ -1820,6 +1827,7 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym, if (keycode_state[key]) { continue; } + /* break ties based on lowest XKeycodeToKeysym index */ for (j=0; j<8; j++) { KeySym ks = XKeycodeToKeysym(dpy, kc_f[l], j); if (ks != NoSymbol && ks == keysym) { diff --git a/x11vnc/x11vnc.1 b/x11vnc/x11vnc.1 index f3af7f2..e935ad8 100644 --- a/x11vnc/x11vnc.1 +++ b/x11vnc/x11vnc.1 @@ -2245,7 +2245,7 @@ When \fB-xkb\fR mode is active you can set these env. vars. They apply only when there is ambiguity as to which key to choose (i.e the mapping is not one-to-one). NOKEYHINTS=1: for up ascii keystrokes do not use score -hints saved when the keep was press down. NOANYDOWN=1: +hints saved when the key was pressed down. NOANYDOWN=1: for up keystrokes do not resort to searching through keys that are currently pressed down. KEYSDOWN=N: remember the last N keys press down for tie-breaking