mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Remove OS theme detection code
Add some string change enum location
This commit is contained in:
parent
92ee7638d8
commit
6aefca2e0e
7 changed files with 30 additions and 92 deletions
|
|
@ -15,7 +15,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
||||||
private string language = "en";
|
private string language = "en";
|
||||||
public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}";
|
public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}";
|
||||||
public string OpenResultModifiers { get; set; } = KeyConstant.Alt;
|
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 bool ShowOpenResultHotkey { get; set; } = true;
|
||||||
public double WindowSize { get; set; } = 580;
|
public double WindowSize { get; set; } = 580;
|
||||||
|
|
||||||
|
|
@ -164,4 +164,11 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
||||||
Empty,
|
Empty,
|
||||||
Preserved
|
Preserved
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum DarkMode
|
||||||
|
{
|
||||||
|
System,
|
||||||
|
Light,
|
||||||
|
Dark
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -96,7 +96,6 @@
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="PropertyChanged.Fody" Version="3.4.0" />
|
<PackageReference Include="PropertyChanged.Fody" Version="3.4.0" />
|
||||||
<PackageReference Include="SharpVectors" Version="1.7.6" />
|
<PackageReference Include="SharpVectors" Version="1.7.6" />
|
||||||
<PackageReference Include="System.Management" Version="6.0.0" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -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; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -84,7 +84,8 @@
|
||||||
<system:String x:Key="ThemeFolder">Theme Folder</system:String>
|
<system:String x:Key="ThemeFolder">Theme Folder</system:String>
|
||||||
<system:String x:Key="OpenThemeFolder">Open 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="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="DarkModeLight">Light</system:String>
|
||||||
<system:String x:Key="DarkModeDark">Dark</system:String>
|
<system:String x:Key="DarkModeDark">Dark</system:String>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1866,15 +1866,18 @@
|
||||||
<ItemsControl Style="{StaticResource SettingGrid}">
|
<ItemsControl Style="{StaticResource SettingGrid}">
|
||||||
<StackPanel Style="{StaticResource TextPanel}">
|
<StackPanel Style="{StaticResource TextPanel}">
|
||||||
<TextBlock Style="{DynamicResource SettingTitleLabel}" Text="{DynamicResource DarkMode}" />
|
<TextBlock Style="{DynamicResource SettingTitleLabel}" Text="{DynamicResource DarkMode}" />
|
||||||
|
<TextBlock Style="{DynamicResource SettingSubTitleLabel}" Text="{DynamicResource DarkModeTip}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="DarkModeComboBox"
|
x:Name="DarkModeComboBox"
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Width="120"
|
Width="180"
|
||||||
Margin="0,0,18,0"
|
Margin="0,0,18,0"
|
||||||
|
DisplayMemberPath="Display"
|
||||||
FontSize="14"
|
FontSize="14"
|
||||||
ItemsSource="{Binding DarkMode}"
|
ItemsSource="{Binding DarkModes}"
|
||||||
SelectedItem="{Binding Settings.DarkMode}"
|
SelectedValue="{Binding Settings.DarkMode}"
|
||||||
|
SelectedValuePath="Value"
|
||||||
SelectionChanged="DarkModeSelectedIndexChanged" />
|
SelectionChanged="DarkModeSelectedIndexChanged" />
|
||||||
<TextBlock Style="{StaticResource Glyph}">
|
<TextBlock Style="{StaticResource Glyph}">
|
||||||

|

|
||||||
|
|
|
||||||
|
|
@ -322,7 +322,6 @@ namespace Flow.Launcher
|
||||||
{
|
{
|
||||||
ModernWpf.ThemeManager.Current.ApplicationTheme = ModernWpf.ApplicationTheme.Dark;
|
ModernWpf.ThemeManager.Current.ApplicationTheme = ModernWpf.ApplicationTheme.Dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Custom TitleBar */
|
/* Custom TitleBar */
|
||||||
|
|
|
||||||
|
|
@ -317,20 +317,25 @@ namespace Flow.Launcher.ViewModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum DarkModes
|
public class DarkMode
|
||||||
{
|
{
|
||||||
System,
|
public string Display { get; set; }
|
||||||
Light,
|
public Infrastructure.UserSettings.DarkMode Value { get; set; }
|
||||||
Dark
|
|
||||||
}
|
}
|
||||||
public List<string> DarkMode
|
public List<DarkMode> DarkModes
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var darkModeStrings = new List<string>();
|
List<DarkMode> modes = new List<DarkMode>();
|
||||||
var enumList = Enum.GetValues(typeof(DarkModes)).Cast<DarkModes>().ToList();
|
var enums = (Infrastructure.UserSettings.DarkMode[])Enum.GetValues(typeof(Infrastructure.UserSettings.DarkMode));
|
||||||
enumList.ForEach(x => darkModeStrings.Add(x.ToString()));
|
foreach (var e in enums)
|
||||||
return darkModeStrings;
|
{
|
||||||
|
var key = $"DarkMode{e}";
|
||||||
|
var display = _translater.GetTranslation(key);
|
||||||
|
var m = new DarkMode { Display = display, Value = e, };
|
||||||
|
modes.Add(m);
|
||||||
|
}
|
||||||
|
return modes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue