--- old/src/java.desktop/share/classes/javax/swing/UIDefaults.java 2016-11-09 16:56:32.000000000 +0300 +++ new/src/java.desktop/share/classes/javax/swing/UIDefaults.java 2016-11-09 16:56:32.000000000 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,6 +50,7 @@ import java.security.AccessController; import java.security.AccessControlContext; import java.security.PrivilegedAction; +import sun.awt.OSInfo; import sun.reflect.misc.MethodUtil; import sun.reflect.misc.ReflectUtil; @@ -90,6 +91,30 @@ * UIDefaults, eg synchronized(this). */ private Map> resourceCache; + + private static boolean disableAquaMenuBarUI = true; + + static { + AccessController + .doPrivileged((PrivilegedAction) () -> { + if (OSInfo.getOSType() == OSInfo.OSType.MACOSX + && !Boolean.getBoolean("apple.laf.disableForcedScreenMenuBar")) { + + try { + Class cls = Class.forName("com.apple.laf.AquaMenuBarUI"); + Method m = cls.getDeclaredMethod("getScreenMenuBarProperty"); + m.setAccessible(true); + + disableAquaMenuBarUI = !((boolean) m.invoke(null)); + } catch (Exception ignored) {} + + if (!disableAquaMenuBarUI) { + System.loadLibrary("osxui"); + } + } + return null; + }); + } /** * Creates an empty defaults table. @@ -398,6 +423,11 @@ super.put(keyValueList[i], value); } } + + if (!disableAquaMenuBarUI) { + UIManager.put("MenuBarUI", "com.apple.laf.AquaMenuBarUI"); + } + firePropertyChange("UIDefaults", null, null); }