<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
Thu Jun 7 12:28:45 UTC 2012

Looks like I was wrong. Your reasoning makes sense. Given that most 
developers have started using transparent windows since 6u10, they 
already force heavyweight popups. So I guess only a few JDK7-only apps 
(are there any?) may get broken after this change.

I'm fine with the fix then.

best regards,

On 06/06/12 19:38, Artem Ananiev wrote:
> We discussed this fix with Pavel offline, and I agree with the proposed
> changes. When setLightWeightPopupEnabled() was introduced, it gave
> developers flexibility to decide whether they want lightweight popups if
> they fit into Window bounds. The fix for 7027486 removed this
> flexibility in certain cases (shaped and translucent windows), which I
> personally consider bad. Now we're restoring the old behavior.
> Note that after the fix, developers will have full control over popup
> lightweightness. If they want the current behavior, they will call
> setLWPE(false) - exactly the change in TransparentRuler. But they also
> be able to be lightweight if they know that popups will fit into their
> nice shaped and/or translucent window - the ability they don't have
> right now.
> Thanks,
> Artem
> On 6/6/2012 5:23 PM, Anthony Petrov wrote:
>> 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,
>> Anthony
>>> 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