Hi Pankaj, Sorry for replying late to this!
I think the patch is good, I'm still unsure if we shouldn't try to support the GTK laf on anything non KDE instead, but I believe this patch preserves compatibility with the current state of things. Cheers, Mario On Thu, Aug 6, 2020 at 12:03 PM Prasanta Sadhukhan <prasanta.sadhuk...@oracle.com> wrote: > > +1 > > Regards > Prasanta > On 06-Aug-20 1:23 AM, Philip Race wrote: > > Approved. > > -phil. > > On 8/5/20, 11:22 AM, Pankaj Bansal wrote: > > Hello Phil, > > I have made the changes you suggested. > > webrev: http://cr.openjdk.java.net/~pbansal/8247753/webrev02/ > > <<I am assuming that you have a reason for both toLowerCase() and contains() > rather than equals() ? > > Yes, in some distros XDG_CURRENT_DESKTOP is set to some string containing > "gnome" string, but not exactly "gnome". For example, on Ubuntu 18.04, it is > "ubuntu:GNOME". I could have used "endsWith" method as of now, but for more > inclusiveness, I have used contains, so we don't have to change again if some > distro decides to set XDG_CURRENT_DESKTOP to something not covered by > "endsWith". > > Regards, > > Pankaj > > > > On 05/08/20 9:35 PM, Philip Race wrote: > > I've read the bug comments and it looks like you've eventually come to the > right answer. > I just would code it differently for a couple of reasons > 1) To make it easier some day to remove checking the old variable by just > deleting a few lines > 2) To avoid repeating the string literal which I always think of as > error-prone > > I am assuming that you have a reason for both toLowerCase() and contains() > rather than equals() ? > > diff --git a/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java > b/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java > --- a/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java > +++ b/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java > @@ -95,10 +95,19 @@ > > @Override > public String getDesktop() { > + String gnome = "gnome"; > String gsi = AccessController.doPrivileged( > (PrivilegedAction<String>) () > -> > System.getenv("GNOME_DESKTOP_SESSION_ID")); > - return (gsi != null) ? "gnome" : null; > + if (gsi != null) { > + return gnome; > + } > + String desktop = AccessController.doPrivileged( > + (PrivilegedAction<String>) () > + -> System.getenv("XDG_CURRENT_DESKTOP")); > + return (desktop != null && desktop.toLowerCase().contains(gnome)) > + ? gnome : null; > + > } > > -phil. > > On 8/4/20, 10:16 PM, Prasanta Sadhukhan wrote: > > Looks ok to me. > > One observation is, in testcase you can remove line71 linux check as we > already did the check in l54. > > Regards > Prasanta > On 04-Aug-20 11:12 PM, Pankaj Bansal wrote: > > Hi All, > > Please review the following fix for jdk16. > > Bug : https://bugs.openjdk.java.net/browse/JDK-8247753 > webrev: http://cr.openjdk.java.net/~pbansal/8247753/webrev00 > > Bug: UIManager.getSytemLookAndFeelClassName() returns wrong value on Fedora > 32. It is returning the MetalLookAndFeel classname instead of GTKLookAndFeel > classname. > > Cause: Java uses a environment variable GNOME_DESKTOP_SESSION_ID to verify if > the system is gnome (which is set by gnome) and then checks for > GTKLookAndFeel support. If both conditions are satisfied, then GTKLookAndFeel > classname is returned, else cross platform MetalLookAndFeel is selected. > > The GNOME_DESKTOP_SESSION_ID environment has been deprecated for a long time > and the value is set to "this-is-deprecated" by gnome. In java, the actual > value of variable is not being verified. As long as the value is not null (it > has been set to something by gnome), things have been working fine though the > value set by gnome is "this-is-deprecated". Now, gnome has removed the > variable completely and this is causing issues in Fedora 32. As the variable > is not set at all, java is returning the cross platform MetalLookAndFeel > classname for the SystemLookAndFeelClassName instead of GTKLookAndFeel. > > More information on this in JBS. Right now the issue is seen only on Fedora > 32, but this can very well come in future releases of RHEL, CentOS, Oracle > Linux etc. > > Fix: We should check XDG_CURRENT_DESKTOP also along with > GNOME_DESKTOP_SESSION_ID to verify gnome based linux. XDG_CURRENT_DESKTOP is > set by gnome based platforms to some string containing "gnome" substring. So, > this can be used to verify the gnome based desktop. For backward > compatibility, we need to continue checking GNOME_DESKTOP_SESSION_ID as well > because for some linux platforms, XDG_CURRENT_DESKTOP may be set to something > else as they are not gnome based, but have been returning GTKL&F as > GNOME_DESKTOP_SESSION_ID was set by them. so, we dont want to change anything > for them. > > Other solution could have been to just make GTKL&F default on all linux, but > that would result in GTKL&F being selected on some new platfoms like KDE > based platforms where currently Metal L&F is selected. > > I have modified the test case > test/jdk/javax/swing/LookAndFeel/SystemLookAndFeel/SystemLookAndFeelTest.java. > The test fails on Fedora 32 without fix and passes with the fix. I have run > the required mach5 tests and this fix is not breaking anything. Link in JBS. > > > Regards, > > Pankaj Bansal > > -- Mario Torre Associate Manager, Software Engineering Red Hat GmbH <https://www.redhat.com> 9704 A60C B4BE A8B8 0F30 9205 5D7E 4952 3F65 7898