RFR: 8354943: [Linux] Simplify and update glass gtk backend: window sizing, positioning, and state management issues [v6]
Thiago Milczarek Sayao
tsayao at openjdk.org
Sat Apr 26 13:02:40 UTC 2025
> This is a continuation to [JDK-8236651](https://bugs.openjdk.org/browse/JDK-8236651) and it aims to stabilize the linux glass gtk backend.
>
>
> Overall, it has been made more robust within its scope, particularly in terms of sizing, positioning, and state management.
>
> List of changes:
> 1. It embraces the asynchronous nature of X11 by reporting geometry changes only upon receiving a configure event, rather than immediately as before. This is because it merely requests changes from the window manager, which may or may not honor them. However, it still reports changes immediately in certain special cases, such as when the window has not yet been realized (i.e., when the window has not actually been created yet). One scenario where this behavior is evident is when we request the window to move to position (0, 0), but the window manager instead places it in the top-right corner where panels converge.
> 2. FullScreen now keeps track of geometry changes and apply them on restore as documented on Stage.java. No geometry changes affects the FullScreen state;
> 3. States (fullscreen, maximized and iconify) are now reported back to Java when it actually happens rather than immediately (except when not realized);
> 4. When a window is maximized, it will ignore geometry changes and restore to the geometry it had prior to being maximized. After some testing, I believe this is the best behavior for platform compatibility;
> 5. Unifies the WindowContext class: previously, there were three separate classes—two of which (for applets and Java Web Start) were removed, leaving only one. However, the supporting infrastructure was still there partially. [Unify WindowContext in glass-gtk](https://bugs.openjdk.org/browse/JDK-8305768)
> 6. `setAlpha` and `setBackground` were removed because they no longer function correctly due to the lack of shared rendering. It's not possible to paint a background using GTK and then render custom content on top of it, unless the rendering is done by Gtk (it is not). It is possible to keep the background by painting with cairo, and make it work with software rendering, but that's a very remote scenario;
> 7. Tests were added and re-enabled to ensure everything works correctly. The stage tests now cover various StageStyle configurations, as I found that `DECORATED` stages often behave differently from `UNDECORATED` or `UTILITY` stages;
> 8. Added Logs for debugging. Enable it with ` -PCONF=DebugNative`;
> 9. It no longer keeps track of geometry internally, as GTK alre...
Thiago Milczarek Sayao has updated the pull request incrementally with one additional commit since the last revision:
- Do not allow maximize, fullscreen past max constraints (keep allowing when unresizable)
- Improve code on gtk_window.cpp
- Add delta for sizing (as Martin suggested)
- Add constants for wait times (as Martin suggested)
-------------
Changes:
- all: https://git.openjdk.org/jfx/pull/1789/files
- new: https://git.openjdk.org/jfx/pull/1789/files/02b6ab30..036be1ff
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jfx&pr=1789&range=05
- incr: https://webrevs.openjdk.org/?repo=jfx&pr=1789&range=04-05
Stats: 414 lines in 12 files changed: 98 ins; 134 del; 182 mod
Patch: https://git.openjdk.org/jfx/pull/1789.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/1789/head:pull/1789
PR: https://git.openjdk.org/jfx/pull/1789
More information about the openjfx-dev
mailing list