浏览代码

UI: Set macOS appearance on theme change

Makes macOS aware that we're using either light or dark theme to adjust
native dialog colors accordingly.

Co-Authored-By: Patrick Heyer <[email protected]>
gxalpha 2 年之前
父节点
当前提交
11e9291800
共有 3 个文件被更改,包括 16 次插入0 次删除
  1. 4 0
      UI/obs-app.cpp
  2. 11 0
      UI/platform-osx.mm
  3. 1 0
      UI/platform.hpp

+ 4 - 0
UI/obs-app.cpp

@@ -1242,6 +1242,10 @@ bool OBSApp::SetTheme(std::string name, std::string path)
 		themeDarkMode = !(color.redF() < 0.5);
 	}
 
+#ifdef __APPLE__
+	SetMacOSDarkMode(themeDarkMode);
+#endif
+
 	emit StyleChanged();
 	return true;
 }

+ 11 - 0
UI/platform-osx.mm

@@ -384,6 +384,17 @@ void OpenMacOSPrivacyPreferences(const char *tab)
 	[[NSWorkspace sharedWorkspace] openURL:url];
 }
 
+void SetMacOSDarkMode(bool dark)
+{
+	if (dark) {
+		NSApp.appearance =
+			[NSAppearance appearanceNamed:NSAppearanceNameDarkAqua];
+	} else {
+		NSApp.appearance =
+			[NSAppearance appearanceNamed:NSAppearanceNameAqua];
+	}
+}
+
 void TaskbarOverlayInit() {}
 void TaskbarOverlaySetStatus(TaskbarOverlayStatus status)
 {

+ 1 - 0
UI/platform.hpp

@@ -101,6 +101,7 @@ bool isInBundle();
 void InstallNSApplicationSubclass();
 void InstallNSThreadLocks();
 void disableColorSpaceConversion(QWidget *window);
+void SetMacOSDarkMode(bool dark);
 
 MacPermissionStatus CheckPermissionWithPrompt(MacPermissionType type,
 					      bool prompt_for_permission);