diff options
5 files changed, 33 insertions, 2 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras index 26a9992f71..90fa40ec2d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras @@ -58,6 +58,9 @@ <arg swt_gen="true"></arg> <retval swt_gen="true"></retval> </method> + <method class_method="true" selector="currentAppearance" swt_gen="true"> + <retval swt_gen="true"></retval> + </method> <method selector="name" swt_gen="true"> <retval swt_gen="true"></retval> </method> diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAppearance.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAppearance.java index 172c1a9563..870f4b1ba2 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAppearance.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAppearance.java @@ -32,6 +32,11 @@ public static NSAppearance appearanceNamed(NSString name) { return result != 0 ? new NSAppearance(result) : null; } +public static NSAppearance currentAppearance() { + long /*int*/ result = OS.objc_msgSend(OS.class_NSAppearance, OS.sel_currentAppearance); + return result != 0 ? new NSAppearance(result) : null; +} + public NSString name() { long /*int*/ result = OS.objc_msgSend(this.id, OS.sel_name); return result != 0 ? new NSString(result) : null; diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java index 93cbd45fb4..06e7414bf2 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java @@ -220,6 +220,22 @@ public class OS extends C { public static void setTheme(boolean isDarkTheme) { OS.objc_msgSend(NSApplication.sharedApplication().id, sel_appAppearanceChanged, isDarkTheme ? 1 : 0); } + public static boolean isAppDarkAppearance() { + if (OS.VERSION_MMB >= OS.VERSION_MMB(10, 14, 0)) { + NSAppearance currentAppearance = NSAppearance.currentAppearance(); + if (currentAppearance != null) { + return "NSAppearanceNameDarkAqua".equals(currentAppearance.name().getString()); + } + } + return false; + } + public static boolean isSystemDarkAppearance() { + if (OS.VERSION_MMB >= OS.VERSION_MMB(10, 14, 0)) { + NSString osxMode = NSUserDefaults.standardUserDefaults ().stringForKey (NSString.stringWith ("AppleInterfaceStyle")); + return osxMode != null && "Dark".equals (osxMode.getString ()); + } + return false; + } /** JNI natives */ @@ -1242,6 +1258,7 @@ public static final long /*int*/ sel_createFileAtPath_contents_attributes_ = Sel public static final long /*int*/ sel_credentialWithUser_password_persistence_ = Selector.sel_credentialWithUser_password_persistence_.value; public static final long /*int*/ sel_crosshairCursor = Selector.sel_crosshairCursor.value; public static final long /*int*/ sel_ctrlKey = Selector.sel_ctrlKey.value; +public static final long /*int*/ sel_currentAppearance = Selector.sel_currentAppearance.value; public static final long /*int*/ sel_currentApplication = Selector.sel_currentApplication.value; public static final long /*int*/ sel_currentContext = Selector.sel_currentContext.value; public static final long /*int*/ sel_currentCursor = Selector.sel_currentCursor.value; diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Selector.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Selector.java index ccd2053469..ef483afb8e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Selector.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Selector.java @@ -354,6 +354,7 @@ public enum Selector { , sel_credentialWithUser_password_persistence_("credentialWithUser:password:persistence:") , sel_crosshairCursor("crosshairCursor") , sel_ctrlKey("ctrlKey") + , sel_currentAppearance("currentAppearance") , sel_currentApplication("currentApplication") , sel_currentContext("currentContext") , sel_currentCursor("currentCursor") diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java index 84c4a40b40..7f996ebb9f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java @@ -110,7 +110,7 @@ public class Display extends Device { enum APPEARANCE { Dark, Light, } - APPEARANCE appAppearance = null; + APPEARANCE appAppearance; /* Windows and Events */ Event [] eventQueue; @@ -1897,7 +1897,7 @@ double /*float*/ [] getWidgetColorRGB (int id) { break; case SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW: color = NSColor.controlLightHighlightColor(); break; case SWT.COLOR_WIDGET_BACKGROUND: - color = OS.VERSION_MMB >= OS.VERSION_MMB (10, 14, 0) ? NSColor.windowBackgroundColor() + color = OS.VERSION_MMB >= OS.VERSION_MMB (10, 14, 0) ? NSColor.controlBackgroundColor() : NSColor.controlHighlightColor(); break; case SWT.COLOR_WIDGET_FOREGROUND: color = NSColor.controlTextColor(); break; @@ -2224,6 +2224,11 @@ boolean hasDefaultButton () { @Override protected void init () { super.init (); + + if (OS.isSystemDarkAppearance()) { + setAppAppearance(APPEARANCE.Dark); + } + initClasses (); initColors (); initFonts (); |