RFR: 8280482: Window transparency bug on Linux [v2]

Alexander Zvegintsev azvegint at openjdk.org
Thu Jul 20 14:13:49 UTC 2023


On Wed, 12 Jul 2023 04:59:30 GMT, Tejesh R <tr at openjdk.org> wrote:

>> The bug mentions about transparency issue on Linux which actually got resolved with [JDK-8006421](https://bugs.openjdk.org/browse/JDK-8006421) fix. Now there is another problem related to the bug, which is screen selection going wrong during checking for new screen when the test is run. The problem is that (As seen in the pictures attached in bug) the transparency is lost for windows which are in screen 0 (default screen) too, which is not supposed to happen where windows on screen 1 should have lost there transparency. The main reason being the call to `toGlobal()` when window bounds are passed to `checkIfOnNewScreen` method. I didn't get the actual reason for `toGlobal` being used here (actually not required to check monitor number), but it actually doubled the X position of the window [here]( https://github.com/openjdk/jdk/blob/4b1403d06b99b91ddd89ad6e54669b0595f1f8e5/src/java.desktop/unix/classes/sun/awt/X11/XBaseWindow.java#L776). Removing `toGlobal` solve the issue and neith
 er didn't cause any regression (existing test + the reason `toGlobal()` was added [JDK-8143295](https://bugs.openjdk.org/browse/JDK-8143295)).
>> 
>> The automated test fails if GC is changed for windows within screen 0 (default screen). CI testing is green.
>
> Tejesh R has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Review fix

test/jdk/java/awt/Multiscreen/MultiScreenCheckScreenIDTest.java line 45:

> 43:  * @bug 8280482
> 44:  * @key headful
> 45:  * @requires (os.family == "linux")

Did you check it on other systems? What prevents this test to be available on all systems?

test/jdk/java/awt/Multiscreen/MultiScreenCheckScreenIDTest.java line 46:

> 44:  * @key headful
> 45:  * @requires (os.family == "linux")
> 46:  * @library /java/awt/regtesthelpers

Is the regtesthepers actually being used?

test/jdk/java/awt/Multiscreen/MultiScreenCheckScreenIDTest.java line 62:

> 60:             createGUI();
> 61:         } finally {
> 62:             for (Window win : windowList) {

Looks like you don't wait for possible `graphicsConfiguration` change events to come here, and start closing all windows.

test/jdk/java/awt/Multiscreen/MultiScreenCheckScreenIDTest.java line 98:

> 96:                     });
> 97: 
> 98:                     Thread.sleep(100);

I think that we can show all the windows at once without this delay to speed up the test execution.

test/jdk/java/awt/Multiscreen/MultiScreenCheckScreenIDTest.java line 116:

> 114:         windowList.add(window);
> 115: 
> 116:         window.addPropertyChangeListener("graphicsConfiguration",

Probably it is worth adding the listener before calling `setVisible`.

test/jdk/java/awt/Multiscreen/MultiScreenCheckScreenIDTest.java line 128:

> 126:                 //Check if GC is changed for windows positioned in screen 0.
> 127: 
> 128:                 if (windowXPos < screen1Width) {

This type of check fails for following display arrangement
![image](https://github.com/openjdk/jdk/assets/77687766/e2881415-9ecd-4695-bcc0-2dc98ccd382e)

I suggest to check if window's GraphicsConfiguration is associated with correct screen device
(e.g. check if the window bounds within the `window.getGraphicsConfiguration().getDevice().getBounds()`).

It also seems more reliable to me if we don't check the GraphicsConfiguration only within the `graphicsConfiguration` change event, but unconditionally after some delay after the window is displayed (in case the event doesn't occur).

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/14825#discussion_r1269501381
PR Review Comment: https://git.openjdk.org/jdk/pull/14825#discussion_r1269413142
PR Review Comment: https://git.openjdk.org/jdk/pull/14825#discussion_r1269505202
PR Review Comment: https://git.openjdk.org/jdk/pull/14825#discussion_r1269519493
PR Review Comment: https://git.openjdk.org/jdk/pull/14825#discussion_r1269475424
PR Review Comment: https://git.openjdk.org/jdk/pull/14825#discussion_r1269410573



More information about the client-libs-dev mailing list