Remove OS theme detection code

Add some string
change enum location
This commit is contained in:
DB p 2021-11-23 15:44:26 +09:00
parent 92ee7638d8
commit 6aefca2e0e
7 changed files with 30 additions and 92 deletions

View file

@ -15,7 +15,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings
private string language = "en";
public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}";
public string OpenResultModifiers { get; set; } = KeyConstant.Alt;
public string DarkMode { get; set; }
public string DarkMode { get; set; } = "System";
public bool ShowOpenResultHotkey { get; set; } = true;
public double WindowSize { get; set; } = 580;
@ -164,4 +164,11 @@ namespace Flow.Launcher.Infrastructure.UserSettings
Empty,
Preserved
}
public enum DarkMode
{
System,
Light,
Dark
}
}

View file

@ -96,7 +96,6 @@
</PackageReference>
<PackageReference Include="PropertyChanged.Fody" Version="3.4.0" />
<PackageReference Include="SharpVectors" Version="1.7.6" />
<PackageReference Include="System.Management" Version="6.0.0" />
</ItemGroup>
<ItemGroup>

View file

@ -1,76 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Management;
using System.Security.Principal;
namespace Flow.Launcher.Helper
{
class SystemTheme
{
private const string PersonalizeKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize";
private const string SysThemeValueName = "SystemUsesLightTheme";
public static event EventHandler<SystemThemeChangedEventArgs> SystemThemeChanged;
public static bool GetIsSystemLightTheme() => ReadDWord(SysThemeValueName);
private static bool ReadDWord(string valueName)
{
var regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(PersonalizeKey);
if (regkey == null)
{
return false;
}
return (int)regkey.GetValue(valueName, 0) > 0;
}
public static void Initialize()
{
UpdateTheme();
try
{
var currentUser = WindowsIdentity.GetCurrent();
var query = new WqlEventQuery(string.Format("SELECT * FROM RegistryValueChangeEvent WHERE Hive='HKEY_USERS' AND KeyPath='{0}\\\\{1}' AND ValueName='{2}'",
currentUser.User.Value, PersonalizeKey.Replace("\\", "\\\\"), SysThemeValueName));
ManagementEventWatcher watcher = new(query);
watcher.EventArrived += new EventArrivedEventHandler(HandleEvent);
watcher.Start();
}
catch (ManagementException managementException)
{
Debug.WriteLine($"{nameof(SystemTheme)}: " + managementException.Message);
}
}
private static void HandleEvent(object sender, EventArrivedEventArgs e)
{
UpdateTheme();
}
private static void UpdateTheme()
{
bool isSystemLightTheme = GetIsSystemLightTheme();
var args = new SystemThemeChangedEventArgs(isSystemLightTheme);
SystemThemeChanged?.Invoke(null, args);
}
}
public class SystemThemeChangedEventArgs : EventArgs
{
public SystemThemeChangedEventArgs(bool isSystemLightTheme)
{
IsSystemLightTheme = isSystemLightTheme;
}
public bool IsSystemLightTheme { get; private set; }
}
}

View file

@ -84,7 +84,8 @@
<system:String x:Key="ThemeFolder">Theme Folder</system:String>
<system:String x:Key="OpenThemeFolder">Open Theme Folder</system:String>
<system:String x:Key="DarkMode">Dark Mode</system:String>
<system:String x:Key="DarkModeDefault">System Default</system:String>
<system:String x:Key="DarkModeTip">System settings will take effect from the next run.</system:String>
<system:String x:Key="DarkModeSystem">System Default</system:String>
<system:String x:Key="DarkModeLight">Light</system:String>
<system:String x:Key="DarkModeDark">Dark</system:String>

View file

@ -1866,15 +1866,18 @@
<ItemsControl Style="{StaticResource SettingGrid}">
<StackPanel Style="{StaticResource TextPanel}">
<TextBlock Style="{DynamicResource SettingTitleLabel}" Text="{DynamicResource DarkMode}" />
<TextBlock Style="{DynamicResource SettingSubTitleLabel}" Text="{DynamicResource DarkModeTip}" />
</StackPanel>
<ComboBox
x:Name="DarkModeComboBox"
Grid.Column="2"
Width="120"
Width="180"
Margin="0,0,18,0"
DisplayMemberPath="Display"
FontSize="14"
ItemsSource="{Binding DarkMode}"
SelectedItem="{Binding Settings.DarkMode}"
ItemsSource="{Binding DarkModes}"
SelectedValue="{Binding Settings.DarkMode}"
SelectedValuePath="Value"
SelectionChanged="DarkModeSelectedIndexChanged" />
<TextBlock Style="{StaticResource Glyph}">
&#xe708;

View file

@ -322,7 +322,6 @@ namespace Flow.Launcher
{
ModernWpf.ThemeManager.Current.ApplicationTheme = ModernWpf.ApplicationTheme.Dark;
}
}
/* Custom TitleBar */

View file

@ -317,20 +317,25 @@ namespace Flow.Launcher.ViewModel
}
}
enum DarkModes
public class DarkMode
{
System,
Light,
Dark
public string Display { get; set; }
public Infrastructure.UserSettings.DarkMode Value { get; set; }
}
public List<string> DarkMode
public List<DarkMode> DarkModes
{
get
{
var darkModeStrings = new List<string>();
var enumList = Enum.GetValues(typeof(DarkModes)).Cast<DarkModes>().ToList();
enumList.ForEach(x => darkModeStrings.Add(x.ToString()));
return darkModeStrings;
List<DarkMode> modes = new List<DarkMode>();
var enums = (Infrastructure.UserSettings.DarkMode[])Enum.GetValues(typeof(Infrastructure.UserSettings.DarkMode));
foreach (var e in enums)
{
var key = $"DarkMode{e}";
var display = _translater.GetTranslation(key);
var m = new DarkMode { Display = display, Value = e, };
modes.Add(m);
}
return modes;
}
}