Several GTK issues on latest Ubuntu release

Christopher Schnick crschnick at xpipe.io
Mon Oct 23 16:49:39 UTC 2023


I don't think any of the existing bug tracker issues apply to this 
problem though. The reason I also posted it in here is that this issue 
is exclusive to the JavaFX platform thread. If this method is invoked in 
any other thread, it works fine. I investigated a bit further on this 
issue, I got the stack trace of where it gets stuck:

         native_get_gtk_setting:-1, GTKEngine (com.sun.java.swing.plaf.gtk)
         getSetting:633, GTKEngine (com.sun.java.swing.plaf.gtk)
         getGTKStyleFactory:1562, GTKLookAndFeel 
(com.sun.java.swing.plaf.gtk)
         loadStyles:1548, GTKLookAndFeel (com.sun.java.swing.plaf.gtk)
         initialize:1441, GTKLookAndFeel (com.sun.java.swing.plaf.gtk)
         setLookAndFeel:590, UIManager (javax.swing)
         setLookAndFeel:637, UIManager (javax.swing)
         attemptSetSystemLookAndFeel:690, FXTrayIcon 
(com.dustinredmond.fxtrayicon)
                 <init>:242, FXTrayIcon (com.dustinredmond.fxtrayicon)
                 <init>:640, FXTrayIcon (com.dustinredmond.fxtrayicon)
         build:630, FXTrayIcon$Builder (com.dustinredmond.fxtrayicon)
                 <init>:59, AppTray (io.xpipe.app.core)
         init:69, AppTray (io.xpipe.app.core)
         lambda$onSwitchTo$0:26, TrayMode (io.xpipe.app.core.mode)
         run:-1, TrayMode$$Lambda/0x0000000080724178 
(io.xpipe.app.core.mode)
                 lambda$runLaterIfNeededBlocking$1:319, PlatformThread 
(io.xpipe.app.fxcomps.util)
         run:-1, PlatformThread$$Lambda/0x0000000080470d70 
(io.xpipe.app.fxcomps.util)
                 lambda$runLaterIfNeededBlocking$2:328, PlatformThread 
(io.xpipe.app.fxcomps.util)
         run:-1, PlatformThread$$Lambda/0x0000000080470f90 
(io.xpipe.app.fxcomps.util)
                 lambda$runLater$10:456, PlatformImpl 
(com.sun.javafx.application)
         run:-1, PlatformImpl$$Lambda/0x0000000080417c38 
(com.sun.javafx.application)
                 executePrivileged:778, AccessController (java.security)
         doPrivileged:400, AccessController (java.security)
         lambda$runLater$11:455, PlatformImpl (com.sun.javafx.application)
         run:-1, PlatformImpl$$Lambda/0x00000000804177e8 
(com.sun.javafx.application)
                 run:95, InvokeLaterDispatcher$Future (com.sun.glass.ui)
         _runLoop:-1, GtkApplication (com.sun.glass.ui.gtk)
         lambda$runLoop$10:263, GtkApplication (com.sun.glass.ui.gtk)
         run:-1, GtkApplication$$Lambda/0x00000000802b8c38 
(com.sun.glass.ui.gtk)
                 runWith:1596, Thread (java.lang)
         run:1583, Thread (java.lang)

You can call this method in the first line in the Application.start 
method and it will also get stuck, so it doesn't really matter from 
where it gets called as long as it is the JavaFX platform thread.

On 10/23/2023 6:18 PM, Philip Race wrote:
> There are several open bug reports of problems in AWT on ubuntu 23.10 
> (and some on 23.04)
>
> https://bugs.openjdk.org/issues/?jql=project%20%3D%20JDK%20AND%20component%20%3D%20client-libs%20AND%20labels%20in%20(ubuntu23.04%2C%20ubuntu23.10)
>
> Note that GTK is not used to the same extent as it is by FX.
> In fact it is used for only 2 things and only one of those can matter 
> in your app,
> and that is that the Swing GTK L&F uses it to get the rendering of GTK 
> themes.
> So if you weren't using the GTK L&F then a Swing app would likely not 
> even load GTK.
> But for a mixed FX + Swing app then of course it will still be loaded 
> by FX.
>
> -phil.
>
>
>
> On 10/23/23 7:48 AM, Christopher Schnick wrote:
>>
>> That is good to know that this issue is already being worked on. From 
>> the description of https://bugs.openjdk.org/browse/JDK-8316423, this 
>> issue is only tracked as affecting secondary stages? At least in our 
>> case it affects the primary stage as well, i.e. the one that is 
>> supplied via Application.start. Also, in this case it's not really 
>> about the scene dimensions, the stage doesn't even apply its own 
>> dimensions that were explicitly set before.
>>
>> On 10/23/2023 4:39 PM, Thiago Milczarek Sayão wrote:
>>> Forgot to mention: except for the system tray, I'm not looking into 
>>> that.
>>>
>>> Em seg., 23 de out. de 2023 11:36, Thiago Milczarek Sayão 
>>> <thiago.sayao at gmail.com> escreveu:
>>>
>>>     Hi Cristopher,
>>>
>>>     https://github.com/openjdk/jfx/pull/1249
>>>
>>>     We noticed it and I'm working on a fix.
>>>
>>>     There's one issue that is probably a mutter bug:
>>>
>>>     https://gitlab.gnome.org/GNOME/mutter/-/issues/3092
>>>
>>>     -- Thiago
>>>
>>>     Em seg., 23 de out. de 2023 10:05, Christopher Schnick
>>>     <crschnick at xpipe.io> escreveu:
>>>
>>>         Hello,
>>>
>>>         a user of our application xpipe
>>>         <https://github.com/xpipe-io/xpipe> reported several issues
>>>         after upgrading their Ubuntu version and I investigated them
>>>         myself. I want to note here that these issues are exclusive
>>>         to new Ubuntu versions. I did not observe any of them on
>>>         slightly older Ubuntu versions or other Gnome-based desktop
>>>         environments. I don't know exactly which versions are
>>>         affected, but 22.04 works fine and Ubuntu 23.10 does not.
>>>
>>>         I'm sorry that I'm not able to create fully reproducible
>>>         examples or dig deeper into the causes here, but I'm very
>>>         constrained on time right now. For reproduction, I just
>>>         installed a new default Ubuntu 23.10 VM and launched the
>>>         JavaFX 21 application straight out of the box.
>>>
>>>         The first issue is that windows do not retain their
>>>         information when being hidden and then shown again. I.e.
>>>         after being shown for the second time, they will have tiny
>>>         dimensions and an GTK error is printed to stderr about
>>>         height < 0. For now I temporarily resolve this by doing the
>>>         following, which somehow fixes the issue:
>>>
>>>                 stage.show();
>>>
>>>                 // Due to some weird GTK bug, we have to set these
>>>         sizes every time we show a window again even though they
>>>         have been previously set
>>>                 stage.setX(stage.getX());
>>>                 stage.setY(stage.getY());
>>>                 stage.setWidth(stage.getWidth());
>>>                 stage.setHeight(stage.getHeight());
>>>
>>>         Furthermore, while this is technically not purely JavaFX
>>>         related, there is also a total freeze of the platform thread
>>>         when it calls javax.swing.UIManager.setLookAndFeel as it
>>>         gets stuck in some GTK implementation method. This is called
>>>         by the fxtrayicon library, which calls this method here
>>>         <https://github.com/dustinkredmond/FXTrayIcon/blob/81c99a7357d8f48d9547c0bdb54b848041ce67c6/src/main/java/com/dustinredmond/fxtrayicon/FXTrayIcon.java#L923>.
>>>         Since there is no native JavaFX tray integration, calling
>>>         these awt/swing related methods is quite important for
>>>         applications trying to use the system tray. This was a very
>>>         unfortunate issue for us as it caused applications to not
>>>         start up at all on affected systems.
>>>         I wasn't able to compare the behavior to Ubuntu 22.04 as
>>>         SystemTray.isSupported() returns false on Ubuntu 22.04 but
>>>         returns true on Ubuntu 23.10. Should this even return true
>>>         on Ubuntu now or is this a bug?
>>>
>>>         Again, these issues only occur on the very latest Ubuntu
>>>         release. I have tested on a lot of other different distros,
>>>         old and new, and they all worked flawlessly.
>>>
>>>         Best regards, Christopher
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20231023/23ac04f8/attachment-0001.htm>


More information about the openjfx-dev mailing list