So that looks like it should work although the duplicate definition irks.
Can we remove the static and have it just be extern declared in XWindow.c ?
For testing can you submit a jprt job and I'll see if I can rustle up some
SQE support to identify any tests that might be good to run.
-phil.
On 9/26/16, 9:53 AM, Alan Burlison wrote:
On 25/09/2016 01:04, Philip Race wrote:
94 KeySym *key_syms = XGetKeyboardMapping(display, keycode, index
+ 1,&num_syms);
I might be mis-reading the API but the docs as I read it have argument 3
as a count .. so it should be 1 here, should it not ?
https://tronche.com/gui/x/xlib/input/XGetKeyboardMapping.html
I think you are right, I was reading the third parameter as being the
number of keysyms to be returned, whereas it is the number of
keycodes, starting with the one passed in argument 2, that are to be
returned. In that case yes, 1 would seem to be the correct value. I've
made that change,
As written I have a suspicion you will at some point run into an X
BadValue error
The docs say :-
"In addition, the following expression must be less than or equal
to max_keycode as returned by XDisplayKeycodes():
first_keycode + keycode_count - 1
"
To be truly robust here we should somewhere obtain and probably cache
"first key code" and max_keycode.
https://tronche.com/gui/x/xlib/input/XDisplayKeycodes.html
I say cache since you don't want two X calls every time.
Then if the requested code is outside that ... just return NoSymbol I
suppose.
Yes, I think you'll get a BadValue error. It appears that under those
conditions the original call to XKeycodeToKeysym will return NoSymbol,
so doing the same seems best. Also it would probably make sense to add
range checking to the index parameter as well.
I've updated the webrev with the above suggestions.
Furthermore
KeySym ks = key_syms[index];
then looks very wrong. You want "0" here .. not index, don't you?
So I must be completely misunderstanding this X API if this is working
for you.
I am also a bit unclear how we know that the first keysym listed for the
keycode from the list is the one we want ?
I think 'index' is right once 1 is provided as the third parameter to
XGetKeyboardMapping as what is coming back is an array of keysyms.
I'd run the original code through the JDK testuite and it passed, if
you have any suggestions how better to test this I'd be grateful to
hear them.
Thanks,