Commit efc0dae0 authored by Mike Gabriel's avatar Mike Gabriel Committed by Mihai Moldovan

Switch from using libNX_X11's deprecated XKeycodeToKeysym() function to using…

Switch from using libNX_X11's deprecated XKeycodeToKeysym() function to using XGetKeyboardMapping(). Fixes ArcticaProject/nx-libs#229.
parent e7044808
...@@ -934,7 +934,7 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate) ...@@ -934,7 +934,7 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
{ {
enum HandleEventResult result; enum HandleEventResult result;
KeySym keysym; XlibKeySym *keysym;
#ifdef TEST #ifdef TEST
fprintf(stderr, "nxagentDispatchEvents: Going to handle new KeyPress event.\n"); fprintf(stderr, "nxagentDispatchEvents: Going to handle new KeyPress event.\n");
...@@ -1101,12 +1101,17 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate) ...@@ -1101,12 +1101,17 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
* sive delay. * sive delay.
*/ */
keysym = XKeycodeToKeysym(nxagentDisplay, X.xkey.keycode, 0); int keysyms_per_keycode_return;
keysym = XGetKeyboardMapping(nxagentDisplay,
X.xkey.keycode,
1,
&keysyms_per_keycode_return);
if (nxagentMonitoredDuplicate(keysym) == 1) if (nxagentMonitoredDuplicate(keysym[0]) == 1)
{ {
nxagentRemoveDuplicatedKeys(&X); nxagentRemoveDuplicatedKeys(&X);
} }
free(keysym);
if (nxagentOption(ViewOnly) == 0 && nxagentOption(Shadow) == 1 && result == doNothing) if (nxagentOption(ViewOnly) == 0 && nxagentOption(Shadow) == 1 && result == doNothing)
{ {
...@@ -4638,8 +4643,16 @@ void nxagentDumpInputDevicesState(void) ...@@ -4638,8 +4643,16 @@ void nxagentDumpInputDevicesState(void)
{ {
if (val & (mask << k)) if (val & (mask << k))
{ {
int keysyms_per_keycode_return;
XlibKeySym *keysym = XGetKeyboardMapping(nxagentDisplay,
i * 8 + k,
1,
&keysyms_per_keycode_return);
fprintf(stderr, "\n\t[%d] [%s]", i * 8 + k, fprintf(stderr, "\n\t[%d] [%s]", i * 8 + k,
XKeysymToString(XKeycodeToKeysym(nxagentDisplay, i * 8 + k, 0))); XKeysymToString(keysym[0]));
free(keysym);
} }
} }
} }
......
...@@ -406,7 +406,13 @@ free(filename); ...@@ -406,7 +406,13 @@ free(filename);
static enum nxagentSpecialKeystroke find_keystroke(XKeyEvent *X) static enum nxagentSpecialKeystroke find_keystroke(XKeyEvent *X)
{ {
KeySym keysym = XKeycodeToKeysym(nxagentDisplay, X->keycode, 0); int keysyms_per_keycode_return;
XlibKeySym *keysym = XGetKeyboardMapping(nxagentDisplay,
X->keycode,
1,
&keysyms_per_keycode_return);
struct nxagentSpecialKeystrokeMap *cur = map; struct nxagentSpecialKeystrokeMap *cur = map;
if (! nxagentKeystrokeFileParsed) if (! nxagentKeystrokeFileParsed)
...@@ -418,19 +424,20 @@ static enum nxagentSpecialKeystroke find_keystroke(XKeyEvent *X) ...@@ -418,19 +424,20 @@ static enum nxagentSpecialKeystroke find_keystroke(XKeyEvent *X)
enum nxagentSpecialKeystroke ret = KEYSTROKE_NOTHING; enum nxagentSpecialKeystroke ret = KEYSTROKE_NOTHING;
while (cur->stroke != KEYSTROKE_END_MARKER) { while (cur->stroke != KEYSTROKE_END_MARKER) {
if (cur->keysym == keysym && modifier_matches(cur->modifierMask, cur->modifierAltMeta, X->state)) { if (cur->keysym == keysym[0] && modifier_matches(cur->modifierMask, cur->modifierAltMeta, X->state)) {
free(keysym);
return cur->stroke; return cur->stroke;
} }
cur++; cur++;
} }
free(keysym);
return ret; return ret;
} }
int nxagentCheckSpecialKeystroke(XKeyEvent *X, enum HandleEventResult *result) int nxagentCheckSpecialKeystroke(XKeyEvent *X, enum HandleEventResult *result)
{ {
KeySym sym;
int index = 0;
enum nxagentSpecialKeystroke stroke = find_keystroke(X); enum nxagentSpecialKeystroke stroke = find_keystroke(X);
*result = doNothing; *result = doNothing;
...@@ -440,17 +447,23 @@ int nxagentCheckSpecialKeystroke(XKeyEvent *X, enum HandleEventResult *result) ...@@ -440,17 +447,23 @@ int nxagentCheckSpecialKeystroke(XKeyEvent *X, enum HandleEventResult *result)
* Do we need a cache ? * Do we need a cache ?
*/ */
sym = XKeycodeToKeysym(nxagentDisplay, X -> keycode, index); int keysyms_per_keycode_return;
XlibKeySym *sym = XGetKeyboardMapping(nxagentDisplay,
X->keycode,
1,
&keysyms_per_keycode_return);
if (sym == XK_VoidSymbol || sym == NoSymbol) if (sym[0] == XK_VoidSymbol || sym[0] == NoSymbol)
{ {
free(sym);
return 0; return 0;
} }
#ifdef TEST #ifdef TEST
fprintf(stderr, "nxagentCheckSpecialKeystroke: got code %x - state %x - sym %lx\n", fprintf(stderr, "nxagentCheckSpecialKeystroke: got code %x - state %x - sym %lx\n",
X -> keycode, X -> state, sym); X -> keycode, X -> state, sym[0]);
#endif #endif
free(sym);
/* /*
* Check special keys. * Check special keys.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment