<Swing Dev> [8] Review request for 7156657 Version 7 doesn't support translucent popup menus against a translucent window

Anthony Petrov anthony.petrov at oracle.com
Wed Jun 6 15:23:52 UTC 2012

Hi Pavel and Swing team,

On 6/6/2012 6:57 PM, Pavel Porvatov wrote:
> Hi Anthony,
>> On 6/6/2012 5:05 PM, Pavel Porvatov wrote:
>>>> I don't understand why this change is necessary. The current code 
>>>> simply detects if a window is non-opaque and forces HW popups for 
>>>> such windows. This works automatically and is very useful.
>>> Yes, it's very useful but produces the regression that described in 
>>> CR 7156657.
>>>> With this fix, however, most developers who use translucent windows, 
>>>> will have to manually call setLightWeightPopupEnabled(false), which 
>>>> doesn't look developer-friendly. Also, it changes the current 
>>>> behavior causing a regression.
>>> Current behavior contains a regression from older release jdk6, so 
>>> reverting fix of CR 7027486 (JPopupMenu doesn't take window shape 
>>> into account) doesn't look like a regression.
>> Given that the current behavior exists since 7 GA, this will be a 
>> regression, too. So, all in all, we're discussing two regressions here.
> Ok
>>>> Instead of changing our own demo code and affecting developers who 
>>>> might have already relied on the current behavior, why not simply 
>>>> suggest the submitters of 7156657 to force LW popups for their 
>>>> specific use case?
>>> Unfortunately there is no way to force LW popups, so there is no 
>>> workaround for the problem
>> I see. Did you consider introducing such possibility?
>> E.g. we could leave the behavior introduced with 7027486 as is, and 
>> only turn it off when a system property is specified. This would 
>> resolve the issue reported by the submitter, and at the same time 
>> would preserve the useful behavior we have since the 1.7.0 release.
> Actually I don't like idea to introduce new system properties or new API 
> in this case because of the following reasons:
> 1. More compact API looks better. In suggested fix there is only 
> setLightWeightPopupEnabled method and it covers all use cases.
> 2. Fix of CR 7027486 (JPopupMenu doesn't take window shape into account) 
> breaks very old behavior of the 
> javax.swing.JPopupMenu#setLightWeightPopupEnabled method: after the fix 
> light weight popups become heavy weight (for translucent and shaped 
> windows)

I disagree here. Translucent/shaped window have become 
*not-quite-officially* supported since JDK6 only via the 
com.sun.awt.AWTUtilities API, which is not officially supported. In JDK 
7 we introduced public API for translucent windows, and also integrated 
a fix for 7027486 that only affected non-opaque windows (which again, 
are only officially supported since JDK 7). So I don't agree that a fix 
for 7027486 breaks anything. In most cases it helps.

> 3. If we implement the fix as you suggested then we should add in 
> javadoc something like this: "setLightWeightPopupEnabled doesn't work in 
> some cases (for translucent and shaped window). For fix that you must 
> set 'blablabla' system property"... =)

This is not quite correct. In fact, I think a fix for 7027486 should 
have updated the specification to state that popups in non-opaque 
windows are forced to be HW. But this hasn't been done.

Also, if we want to introduce a new system property, and then port the 
fix to 7uX, then it shouldn't be a part of public API, and thus 
shouldn't be mentioned in the specification. This could be some kind of 
  "sun.swing.*" or "sun.awt.*" system property.

> 4. We can add system property that will force heavy weight for the 
> application later. I'd prefer to don't introduce such property unless 
> somebody ask about that.

It's a very simple use-case to imagine - a round-shaped window with a 
popup menu. Currently it will work just great. But if you remove the fix 
for 7027486, a developer will have to modify their app to call the 
setLightWeightPopupEnabled(true) explicitly, which may seem inconvenient.

In any case, I don't think we should simply drop the functionality 
introduced with 7027486. It must be available either by default (which 
personally I prefer), or as an option.

What do others think about this issue?

best regards,

> Regards, Pavel
>> -- 
>> best regards,
>> Anthony
>>> Regards, Pavel
>>>> -- 
>>>> best regards,
>>>> Anthony
>>>> On 6/6/2012 3:08 PM, Pavel Porvatov wrote:
>>>>> Hello,
>>>>> Please review a fix for the following issue:
>>>>>   7156657 Version 7 doesn't support translucent popup menus against 
>>>>> a translucent window
>>>>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7156657
>>>>> The webrev is here: http://cr.openjdk.java.net/~rupashka/7156657/ 
>>>>> <http://cr.openjdk.java.net/%7Erupashka/7156657/>
>>>>> The fix of CR 7027486 (JPopupMenu doesn't take window shape into 
>>>>> account, http://hg.openjdk.java.net/jdk8/awt/jdk/rev/9024198193ce) 
>>>>> doesn't take into account that some users use translucent windows 
>>>>> with translucent menus. After discussions the following decision 
>>>>> was made:
>>>>> 1. When JPopupMenu#setLightWeightPopupEnabled is set to false 
>>>>> HEAVY_WEIGHT popups is used (instead of MEDIUM_WEIGHT). This fix 
>>>>> was done in CR 6800513 (GTK-LaF renders menus incompletely, 
>>>>> http://hg.openjdk.java.net/jdk8/awt/jdk/rev/cd00d68e06ac and 
>>>>> http://hg.openjdk.java.net/jdk8/awt/jdk/rev/8800a98316b2) and that 
>>>>> allows to use non-translucent and non-clipped popups for 
>>>>> translucent or shaped windows
>>>>> 2. Fix of CR 7027486 should be reverted
>>>>> 3. The TransparentRuler should be corrected according new fix
>>>>> Regards,
>>>>> Pavel.

More information about the swing-dev mailing list