On Fri, 10 Sep 2021 04:08:49 GMT, Sergey Bylokhov <[email protected]> wrote:
>> It is called from AquaMenuPainter#405 and 378
>> if (c instanceof JMenu && (model.isArmed() || model.isSelected()) &&
>> arrowIcon instanceof InvertableIcon) {
>> ((InvertableIcon)arrowIcon).getInvertedIcon().paintIcon(c, g,
>> arrowIconRect.x, arrowIconRect.y);
>> }
>> I could not find at what point arrowIcon or checkIcon would be instance of
>> InvertableIcon...
>> I guess we can take one fix at a time since this normal icon disable issue
>> itself is there from macox port origin
>> and fix it later if any issue comes for InvertableIcon...
>
>> I could not find at what point arrowIcon or checkIcon would be an instance
>> of InvertableIcon...
>
> All InvertableImageIcon objects are InvertableIcon since it implements that
> interface, so that part is always true, and if it possible to make "(c
> instanceof JMenu && (model.isArmed() || model.isSelected()"== true for the
> disabled components then "getInvertedIcon" should return disabled icon.
Arrow icon InvertedIcon is handled by testing with setSelected(true) and
setEnabled(false)
but
for checkIcon, it checks for
if (item.isArmed() && checkIcon instanceof InvertableIcon) {
((InvertableIcon)checkIcon).getInvertedIcon().paintIcon(item, g,
checkIconRect.x, checkIconRect.y);
}
but even if we do setArmed(true) it is set to false here
https://github.com/openjdk/jdk/blob/master/src/java.desktop/share/classes/javax/swing/JMenuItem.java#L312
if (!b && !UIManager.getBoolean("MenuItem.disabledAreNavigable")) {
setArmed(false);
}
and MenuItem.disabledAreNavigable is not defined for Aqua so I guess it's false
so InvertedIcon is not called for checkIcon
-------------
PR: https://git.openjdk.java.net/jdk/pull/5310