<Swing Dev> Force JPopup to be always heavyweight

Mario Torre neugens.limasoftware at gmail.com
Thu Apr 19 14:46:30 UTC 2012


Hi Pavel,

Did you had any chance to review this?

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/



-- 
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