Skip to content

Commit 57d206f

Browse files
committed
Fix SystemBG color select
1 parent c7a2dee commit 57d206f

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

Flow.Launcher.Core/Resource/Theme.cs

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ private void ApplyPreviewBackground(Color? bgColor = null)
420420

421421
public void ColorizeWindow(string Mode)
422422
{
423+
Debug.WriteLine("창 DWM 색상 설정");
423424
Application.Current.Dispatcher.Invoke(() =>
424425
{
425426
var dict = GetThemeResourceDictionary(_settings.Theme);
@@ -431,6 +432,37 @@ public void ColorizeWindow(string Mode)
431432
// ✅ 블러 테마인지 확인
432433
bool hasBlur = dict.Contains("ThemeBlurEnabled") && dict["ThemeBlurEnabled"] is bool b && b;
433434

435+
// ✅ SystemBG 값 확인 (Auto, Light, Dark)
436+
string systemBG = dict.Contains("SystemBG") ? dict["SystemBG"] as string : "Auto"; // 기본값 Auto
437+
438+
// ✅ 사용자의 ColorScheme 설정 확인
439+
string colorScheme = _settings.ColorScheme;
440+
441+
// ✅ 시스템의 다크 모드 설정 확인 (AppsUseLightTheme 값 읽기)
442+
int themeValue = (int)Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme", 1);
443+
bool isSystemDark = themeValue == 0;
444+
445+
// ✅ 최종적으로 사용할 다크 모드 여부 결정
446+
bool useDarkMode = false;
447+
448+
if (colorScheme == "Dark" || systemBG == "Dark")
449+
{
450+
useDarkMode = true; // 사용자가 강제 다크 모드 선택
451+
}
452+
else if (colorScheme == "Light" || systemBG == "Light")
453+
{
454+
useDarkMode = false; // 사용자가 강제 라이트 모드 선택
455+
}
456+
else if (colorScheme == "System" || systemBG == "Auto")
457+
{
458+
useDarkMode = isSystemDark; // 시스템 설정을 따름
459+
}
460+
461+
Debug.WriteLine($"[ColorizeWindow] SystemBG: {systemBG}, ColorScheme: {colorScheme}, 시스템 다크 모드 여부: {isSystemDark}, 최종 적용: {useDarkMode}");
462+
463+
// ✅ DWM 다크 모드 설정 적용
464+
Methods.SetWindowAttribute(new WindowInteropHelper(mainWindow).Handle, DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE, useDarkMode ? 1 : 0);
465+
434466
Color LightBG;
435467
Color DarkBG;
436468

@@ -454,11 +486,7 @@ public void ColorizeWindow(string Mode)
454486
DarkBG = LightBG;
455487
}
456488

457-
// ✅ 설정의 ColorScheme을 우선 사용
458-
int themeValue = (int)Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme", 1);
459-
bool isSystemDark = themeValue == 0;
460-
bool useDarkMode = Mode == "Dark" || (Mode == "Auto" && _settings.ColorScheme == "System" && isSystemDark) || (_settings.ColorScheme == "Dark");
461-
489+
// ✅ ColorScheme과 SystemBG에 맞춰서 배경색 선택
462490
Color selectedBG = useDarkMode ? DarkBG : LightBG;
463491
ApplyPreviewBackground(selectedBG);
464492

@@ -479,16 +507,14 @@ public void ColorizeWindow(string Mode)
479507
mainWindow.Background = new SolidColorBrush(selectedBG);
480508
}
481509
}
482-
483-
// ✅ DWM 다크 모드 적용
484-
Methods.SetWindowAttribute(new WindowInteropHelper(mainWindow).Handle, DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE, useDarkMode ? 1 : 0);
485510
}, DispatcherPriority.Normal);
486511
}
487512

488513

489514

490515

491516

517+
492518
public bool IsBlurTheme()
493519
{
494520
if (Environment.OSVersion.Version >= new Version(6, 2))

0 commit comments

Comments
 (0)