malloc score_hint and make it shorts to save space.

pull/1/head
runge 17 years ago
parent 222ecab5ca
commit 84d6dd0e92

@ -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: The following information is taken from these URLs:
@ -13101,7 +13101,7 @@ t
They apply only when there is ambiguity as to which They apply only when there is ambiguity as to which
key to choose (i.e the mapping is not one-to-one). key to choose (i.e the mapping is not one-to-one).
NOKEYHINTS=1: for up ascii keystrokes do not use score 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 for up keystrokes do not resort to searching through
keys that are currently pressed down. KEYSDOWN=N: keys that are currently pressed down. KEYSDOWN=N:
remember the last N keys press down for tie-breaking remember the last N keys press down for tie-breaking

@ -1943,7 +1943,7 @@ void print_help(int mode) {
" They apply only when there is ambiguity as to which\n" " They apply only when there is ambiguity as to which\n"
" key to choose (i.e the mapping is not one-to-one).\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" " 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" " for up keystrokes do not resort to searching through\n"
" keys that are currently pressed down. KEYSDOWN=N:\n" " keys that are currently pressed down. KEYSDOWN=N:\n"
" remember the last N keys press down for tie-breaking\n" " remember the last N keys press down for tie-breaking\n"

@ -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 * Called on user keyboard input. Try to solve the reverse mapping
* problem: KeySym (from VNC client) => KeyCode(s) to press to generate * problem: KeySym (from VNC client) => KeyCode(s) to press to generate
@ -1516,12 +1516,19 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym,
} else { } else {
klast = 3; klast = 3;
} }
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 (i=0; i<0x100; i++) {
for (j=0; j<0x100; j++) { for (j=0; j<0x100; j++) {
score_hint[i][j] = -1; score_hint[i][j] = -1;
} }
} }
} }
}
if (debug_keyboard) { if (debug_keyboard) {
char *str = XKeysymToString(keysym); char *str = XKeysymToString(keysym);
@ -1714,7 +1721,7 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym,
kc_f[l], myscore); kc_f[l], myscore);
} }
if (khints && keysym < 0x100 && kc_f[l] < 0x100) { 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++) { for (l=0; l < found; l++) {
@ -1738,7 +1745,8 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym,
if (khints && keysym < 0x100) { if (khints && keysym < 0x100) {
/* low keysyms, ascii, only */ /* low keysyms, ascii, only */
int ks = (int) keysym; 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++) { for (l=0; l < found; l++) {
if (kc_f[l] < 0x100) { if (kc_f[l] < 0x100) {
int key = (int) kc_f[l]; int key = (int) kc_f[l];
@ -1812,7 +1820,6 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym,
* physical display (but is updated * physical display (but is updated
* periodically to clean out stale info). * periodically to clean out stale info).
*/ */
/* we could probably break ties based on lowest XKeycodeToKeysym index */
for (l=0; l < found; l++) { for (l=0; l < found; l++) {
int key = (int) kc_f[l]; int key = (int) kc_f[l];
int j, jmatch = -1; int j, jmatch = -1;
@ -1820,6 +1827,7 @@ static void xkb_tweak_keyboard(rfbBool down, rfbKeySym keysym,
if (keycode_state[key]) { if (keycode_state[key]) {
continue; continue;
} }
/* break ties based on lowest XKeycodeToKeysym index */
for (j=0; j<8; j++) { for (j=0; j<8; j++) {
KeySym ks = XKeycodeToKeysym(dpy, kc_f[l], j); KeySym ks = XKeycodeToKeysym(dpy, kc_f[l], j);
if (ks != NoSymbol && ks == keysym) { if (ks != NoSymbol && ks == keysym) {

@ -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 They apply only when there is ambiguity as to which
key to choose (i.e the mapping is not one-to-one). key to choose (i.e the mapping is not one-to-one).
NOKEYHINTS=1: for up ascii keystrokes do not use score 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 for up keystrokes do not resort to searching through
keys that are currently pressed down. KEYSDOWN=N: keys that are currently pressed down. KEYSDOWN=N:
remember the last N keys press down for tie-breaking remember the last N keys press down for tie-breaking

Loading…
Cancel
Save