On 06/09/2016 22:03, Alan Burlison wrote:

Thanks for the detail, doing as you suggest and migrating all the
references seems like the best approach as it shouldn't require any
followup work in the future. I'll make the changes you've suggested,
retest and post an updated webrev when I've done so.

Unfortunately there's a wrinkle. In most cases it's easy enough to just replace calls to XKeycodeToKeysym() with XkbKeycodeToKeysym(), but there's some code that can't be dealt with that simply:

http://hg.openjdk.java.net/jdk9/dev/jdk/file/60d7fbe25cd7/src/java.desktop/unix/classes/sun/awt/X11/keysym2ucs.h#l135

There are two functions, xkeycode2keysym_noxkb() and xkeycode2keysym_xkb() the intent being that if the XKEYBOARD extension is not available the deprecated XKeycodeToKeysym() function that we want to remove is used, and if XKEYBOARD is present then an alternate mechanism is used (but not XkbKeycodeToKeysym(), strangely enough).

In the case of xkeycode2keysym_noxkb() it makes no sense to simply replace the call to XKeycodeToKeysym() with XkbKeycodeToKeysym() because xkeycode2keysym_noxkb() will only be called in the first place if the XKEYBOARD extension has not been loaded, and presumably a replacement call to XkbKeycodeToKeysym() would fail.

This ripples outwards - which of the _noxkb or _xkb variants is to be used is predicated on XToolkit.canUseXKBCalls(), that in turn uses the awt_UseXKB_Calls variable which is initialised in XToolkit.tryXKB() based on probing to see if there is a useable XKEYBOARD extension. Toolkit.canUseXKBCalls() is used in multiple other places as well.

The issue is that replacing calls to the deprecated XKeycodeToKeysym() function relies on XKEYBOARD always being loaded. Can that assumption be made for all X11-supporting platforms that Java9 will run on? If not, there doesn't seem to be any way to remove the use of the deprecated XKeycodeToKeysym(), unless someone can suggest an alternative that doesn't use XkbKeycodeToKeysym().

I also notice that many of the affected files also contain references to the obsolete Xsun server which was removed in Solaris 11. As Java9 will be Solaris11+ only, that code could be removed - should I log a bug to that effect?

--
Alan Burlison
--

Reply via email to