<Swing Dev> Force JPopup to be always heavyweight

Pavel Porvatov pavel.porvatov at oracle.com
Thu Apr 19 15:27:26 UTC 2012


Hi Mario,
> Hi Pavel,
>
> Did you had any chance to review this?
No, I didn't. I remember about your fix and I'll review the fix.

Regards, Pavel
>
> Thanks,
> Mario
>
> 2012/4/17 Mario Torre<neugens.limasoftware at gmail.com>:
>> 2012/4/16 Pavel Porvatov<pavel.porvatov at oracle.com>:
>>
>> Hello Pavel,
>>
>>>> About the test, I'm not sure if you need something more specific, but
>>>> I was thinking to simply test if when isLightWeightPopupEnabled is set
>>>> we create an heavy or lightweight popup, any other ideas?
>>> That's a good way I think
>> Here is the webrev:
>>
>> http://cr.openjdk.java.net/~neugens/6800513/
>>
>> Note that MEDIUM_WEIGHT is still used in some cases (PopupFactory.getPopup):
>>
>>         if (owner == null || invokerInHeavyWeightPopup(owner)) {
>>             popupType = HEAVY_WEIGHT_POPUP;
>>         }
>>         else if (popupType == LIGHT_WEIGHT_POPUP&&
>>                  !(contents instanceof JToolTip)&&
>>                  !(contents instanceof JPopupMenu)) {
>>             popupType = MEDIUM_WEIGHT_POPUP;
>>         }
>>
>> I'm not sure if we want to replace this as well with full HW (I would
>> do it, in fact).
>>
>> Also I was thinking to have a very small optimization, if we are using
>> an HW popups, there's no need to do this check:
>>
>>         // Check if the parent component is an option pane.  If so we need to
>>         // force a heavy weight popup in order to have event dispatching work
>>         // correctly.
>>         Component c = owner;
>>         while (c != null) {
>>             if (c instanceof JComponent) {
>>                 if (((JComponent)c).getClientProperty(
>>                             PopupFactory_FORCE_HEAVYWEIGHT_POPUP) ==
>> Boolean.TRUE) {
>>                     popupType = HEAVY_WEIGHT_POPUP;
>>                     break;
>>                 }
>>             } else if (c instanceof Window) {
>>                 Window w = (Window) c;
>>                 if (!w.isOpaque() || w.getOpacity()<  1 ||
>> w.getShape() != null) {
>>                     popupType = HEAVY_WEIGHT_POPUP;
>>                     break;
>>                 }
>>             }
>>             c = c.getParent();
>>         }
>>
>> We can save a loop and a couple of instanceof checks (although I
>> remember we proved with Jim and Phil that instanceof don't really
>> introduce any speed penalization).
>>
>> What do you think?
>>
>> Cheers,
>> Mario
>> --
>> pgp key: http://subkeys.pgp.net/ PGP Key ID: 80F240CF
>> Fingerprint: BA39 9666 94EC 8B73 27FA  FC7C 4086 63E3 80F2 40CF
>>
>> IcedRobot: www.icedrobot.org
>> Proud GNU Classpath developer: http://www.classpath.org/
>> Read About us at: http://planet.classpath.org
>> OpenJDK: http://openjdk.java.net/projects/caciocavallo/
>>
>> Please, support open standards:
>> http://endsoftpatents.org/
>
>




More information about the swing-dev mailing list