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,

Reply via email to