<AWT Dev> RFR: 8076313: GraphicsEnvironment does not detect changes in count of monitors on Linux OS
Sergey Bylokhov
serb at openjdk.java.net
Sun Jan 31 01:29:52 UTC 2021
On Tue, 26 Jan 2021 04:08:44 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:
> This fix enables display change detection on Linux when the number of monitors is changed in the Xinerama mode.
>
> The fix itself is straightforward:
> 1. When we get an event that the root window is changed we assume that it could be caused by some screen manipulation like screen resolution change or adding/removing a monitor.
> 2. We rebuild the native data structure for the x11 screens, and then mirror this data on the java level in the X11GraphicsEnvironment.
> 3. While we updating the data, we block all access to it in the native -> after the fix all access to the native x11 screens should be done under awt-lock.
>
> Notes:
> - This fix has a long chain of pre-fixes where we dropped the native access to the x11 screens, to minimize the places we need to synchronize.
> - In the current version we rebuild the screens more often than needed, for example, we rebuild it even if resolution changed in a single monitor config. It is done intentionally to increase the test code coverage for now.
> - The current implementation is based on the Xinerama, while the better solution will be use XRandr 1.5, but it does not support AIX, and is not supported in the current devkit.
src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java line 113:
> 111: }
> 112:
> 113: public int scaleUp(int x) {
This is copied not moved from the X11GraphicsConfig, just to minimize the change in the fix. I Will clean up this later.
-------------
PR: https://git.openjdk.java.net/jdk/pull/2230
More information about the awt-dev
mailing list