An additional information from the offline discussion:
- Should the similar check be applied to
enumDisplayModes()/configDisplayMode()?
The code which was changed in the fix(screen < ScreenCount was added):
Java_sun_awt_X11GraphicsDevice_getCurrentDisplayMode(...jint screen) {
........
if (screen < ScreenCount(awt_display)) {
config = awt_XRRGetScreenInfo(awt_display,
RootWindow(awt_display, screen));
if (config != NULL) {
........
}
The code in enumDisplayModes/configDisplayMode looks similar:
Java_sun_awt_X11GraphicsDevice_enumDisplayModes(...jint screen...) {
........
config = awt_XRRGetScreenInfo(awt_display,
RootWindow(awt_display, screen));
if (config != NULL) {
........
}
and
Java_sun_awt_X11GraphicsDevice_configDisplayMode(...jint screen...)
{
........
root = RootWindow(awt_display, screen);
config = awt_XRRGetScreenInfo(awt_display, root);
if (config != NULL) {
........
}
====================================================================
Should we use awt_numScreens instead of XScreenCount()? seems that
the XScreenCount is used in non-Xinerama code? but awt_numScreens is
initialized in both cases?
But in the fix we compare the screenid in xinerama mode and the
Xinerama-unaware number os screens. It is like compare the apple and juces?
It is unclear do we really support display modes on non-main screen in
case of Xinerama, or it is unsupported on unix? Also looks strange that
we pass to java the screen number which is outside of our internal
native structure.
I guess that we simply unsupport display modes on non main display(other
than the current screen res) in xinerama mode.
--
Best regards, Sergey.