src/macosx/classes/sun/lwawt/macosx/CMenuItem.java

Print this page

        

@@ -26,21 +26,24 @@
 package sun.lwawt.macosx;
 
 import sun.awt.SunToolkit;
 import sun.lwawt.LWToolkit;
 
+import java.awt.MenuContainer;
 import java.awt.MenuItem;
 import java.awt.MenuShortcut;
 import java.awt.event.*;
 import java.awt.peer.MenuItemPeer;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 public class CMenuItem extends CMenuComponent implements MenuItemPeer {
 
+    private final AtomicBoolean enabled = new AtomicBoolean(true);
+
     public CMenuItem(MenuItem target) {
         super(target);
         initialize(target);
-
     }
 
     // This way we avoiding invocation of the setters twice
     protected void initialize(MenuItem target) {
         if (!isSeparator()) {

@@ -122,14 +125,24 @@
 //    @Override
     public void disable() {
         setEnabled(false);
     }
 
+    public final boolean isEnabled() {
+        return enabled.get();
+    }
+
     @Override
     public void setEnabled(boolean b) {
+        final Object parent = LWToolkit.targetToPeer(getTarget().getParent());
+        if (parent instanceof CMenuItem) {
+            b &= ((CMenuItem) parent).isEnabled();
+        }
+        if (enabled.compareAndSet(!b, b)) {
         nativeSetEnabled(getModel(), b);
     }
+    }
 
     private native long nativeCreate(long parentMenu, boolean isSeparator);
     private native void nativeSetLabel(long modelPtr, String label, char keyChar, int keyCode, int modifiers);
     private native void nativeSetImage(long modelPtr, long image);
     private native void nativeSetTooltip(long modelPtr, String text);