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

Alexander Zvegintsev azvegint at openjdk.org
Fri Jul 28 11:53:55 UTC 2023


On Fri, 21 Jul 2023 10:56:28 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

Marked as reviewed by azvegint (Reviewer).

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

> 100:                 robot.delay(50);
> 101:                 robot.waitForIdle();
> 102:                 if (windowList.get(windowList.size() - 1).getBounds().intersects

Maybe it's better to make `createWindow(r)` return a window and cache it instead of several querying of windowList?

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

> 101:                 robot.waitForIdle();
> 102:                 if (windowList.get(windowList.size() - 1).getBounds().intersects
> 103:                         (screen.getDefaultConfiguration().getBounds())) {

Looks like you can reuse `screenBounds` variable for lines 103 and 106.

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

> 128:     public void mouseClicked(MouseEvent e) {
> 129:         ((Window) e.getSource()).dispose();
> 130:     }

New line missing.

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

PR Review: https://git.openjdk.org/jdk/pull/14825#pullrequestreview-1551942043
PR Review Comment: https://git.openjdk.org/jdk/pull/14825#discussion_r1277439644
PR Review Comment: https://git.openjdk.org/jdk/pull/14825#discussion_r1277435451
PR Review Comment: https://git.openjdk.org/jdk/pull/14825#discussion_r1277439874



More information about the client-libs-dev mailing list