<Swing Dev> RFR: 8247753: UIManager.getSytemLookAndFeelClassName() returns wrong value on Fedora 32

Philip Race philip.race at oracle.com
Wed Aug 5 19:53:45 UTC 2020


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/ 
> <http://cr.openjdk.java.net/%7Epbansal/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 
>>>> <http://cr.openjdk.java.net/%7Epbansal/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
>>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/swing-dev/attachments/20200805/f892afb1/attachment-0001.htm>


More information about the swing-dev mailing list