Browse Source

Fix DBusPlatformSettings NullReferenceException (#21831)

pull/21852/head
Ilya Pospelov 2 months ago
committed by GitHub
parent
commit
81dad81a08
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 29
      src/Avalonia.FreeDesktop/DBusPlatformSettings.cs

29
src/Avalonia.FreeDesktop/DBusPlatformSettings.cs

@ -30,11 +30,14 @@ namespace Avalonia.FreeDesktop
private async Task TryGetInitialValuesAsync() private async Task TryGetInitialValuesAsync()
{ {
_themeVariant = await TryGetThemeVariantAsync(); if (_settings is { } settings)
_accentColor = await TryGetAccentColorAsync(); {
_lastColorValues = BuildPlatformColorValues(); _themeVariant = await TryGetThemeVariantAsync(settings);
if (_lastColorValues is not null) _accentColor = await TryGetAccentColorAsync(settings);
Dispatcher.UIThread.Post(() => OnColorValuesChanged(_lastColorValues)); _lastColorValues = BuildPlatformColorValues();
if (_lastColorValues is not null)
Dispatcher.UIThread.Post(() => OnColorValuesChanged(_lastColorValues));
}
} }
internal void OnRequestDefaultThemeVariant() internal void OnRequestDefaultThemeVariant()
@ -42,17 +45,17 @@ namespace Avalonia.FreeDesktop
_ = TryGetInitialValuesAsync(); _ = TryGetInitialValuesAsync();
} }
private async Task<PlatformThemeVariant?> TryGetThemeVariantAsync() private static async Task<PlatformThemeVariant?> TryGetThemeVariantAsync(Settings settings)
{ {
try try
{ {
var version = await _settings!.GetVersionAsync(); var version = await settings.GetVersionAsync();
VariantValue value; VariantValue value;
if (version >= 2) if (version >= 2)
value = await _settings!.ReadOneAsync("org.freedesktop.appearance", "color-scheme"); value = await settings.ReadOneAsync("org.freedesktop.appearance", "color-scheme");
else else
// Unpack nested Variant // Unpack nested Variant
value = (await _settings!.ReadAsync("org.freedesktop.appearance", "color-scheme")).GetVariantValue(); value = (await settings.ReadAsync("org.freedesktop.appearance", "color-scheme")).GetVariantValue();
return ToColorScheme(value.GetUInt32()); return ToColorScheme(value.GetUInt32());
} }
catch (DBusExceptionBase) catch (DBusExceptionBase)
@ -61,16 +64,16 @@ namespace Avalonia.FreeDesktop
} }
} }
private async Task<Color?> TryGetAccentColorAsync() private static async Task<Color?> TryGetAccentColorAsync(Settings settings)
{ {
try try
{ {
var version = await _settings!.GetVersionAsync(); var version = await settings.GetVersionAsync();
VariantValue value; VariantValue value;
if (version >= 2) if (version >= 2)
value = await _settings!.ReadOneAsync("org.freedesktop.appearance", "accent-color"); value = await settings.ReadOneAsync("org.freedesktop.appearance", "accent-color");
else else
value = await _settings!.ReadAsync("org.freedesktop.appearance", "accent-color"); value = await settings.ReadAsync("org.freedesktop.appearance", "accent-color");
return ToAccentColor(value); return ToAccentColor(value);
} }
catch (DBusExceptionBase) catch (DBusExceptionBase)

Loading…
Cancel
Save