From cdadf9be8820d17b9143c6ea791c7c354c2060e5 Mon Sep 17 00:00:00 2001 From: affederaffe <68356204+affederaffe@users.noreply.github.com> Date: Fri, 5 May 2023 11:20:34 +0200 Subject: [PATCH 1/3] Bump Tmds.DBus.SourceGenerator --- src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj | 2 +- src/Avalonia.FreeDesktop/DBusSystemDialog.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj b/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj index 3401da2d4a..31b65dcc02 100644 --- a/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj +++ b/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/Avalonia.FreeDesktop/DBusSystemDialog.cs b/src/Avalonia.FreeDesktop/DBusSystemDialog.cs index 20583dd6ac..cd6f829d7a 100644 --- a/src/Avalonia.FreeDesktop/DBusSystemDialog.cs +++ b/src/Avalonia.FreeDesktop/DBusSystemDialog.cs @@ -21,7 +21,7 @@ namespace Avalonia.FreeDesktop var dbusFileChooser = new OrgFreedesktopPortalFileChooser(DBusHelper.Connection, "org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop"); try { - await dbusFileChooser.GetVersionAsync(); + await dbusFileChooser.GetVersionPropertyAsync(); } catch { From 451f30c9e1472083f4eca9b88dec06970a973708 Mon Sep 17 00:00:00 2001 From: affederaffe <68356204+affederaffe@users.noreply.github.com> Date: Wed, 10 May 2023 01:05:21 +0200 Subject: [PATCH 2/3] Fix color scheme hot switching --- .../DBusPlatformSettings.cs | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/Avalonia.FreeDesktop/DBusPlatformSettings.cs b/src/Avalonia.FreeDesktop/DBusPlatformSettings.cs index 8b2b38bb82..e6ea880b6a 100644 --- a/src/Avalonia.FreeDesktop/DBusPlatformSettings.cs +++ b/src/Avalonia.FreeDesktop/DBusPlatformSettings.cs @@ -32,29 +32,35 @@ namespace Avalonia.FreeDesktop try { var value = await _settings!.ReadAsync("org.freedesktop.appearance", "color-scheme"); - _themeVariant = ReadAsColorScheme(value); + _themeVariant = ToColorScheme(((value.Value as DBusVariantItem)!.Value as DBusUInt32Item)!.Value); } catch (Exception ex) { Logger.TryGet(LogEventLevel.Error, LogArea.FreeDesktopPlatform)?.Log(this, "Unable to get org.freedesktop.appearance.color-scheme value", ex); } + _accentColor = await TryGetAccentColorAsync(); + + _lastColorValues = BuildPlatformColorValues(); + if (_lastColorValues is not null) + OnColorValuesChanged(_lastColorValues); + } + + private async Task TryGetAccentColorAsync() + { try { var value = await _settings!.ReadAsync("org.kde.kdeglobals.General", "AccentColor"); - _accentColor = ReadAsAccentColor(value); + return ToAccentColor(((value.Value as DBusVariantItem)!.Value as DBusStringItem)!.Value); } catch (Exception ex) { Logger.TryGet(LogEventLevel.Error, LogArea.FreeDesktopPlatform)?.Log(this, "Unable to get org.kde.kdeglobals.General.AccentColor value", ex); + return null; } - - _lastColorValues = BuildPlatformColorValues(); - if (_lastColorValues is not null) - OnColorValuesChanged(_lastColorValues); } - private void SettingsChangedHandler(Exception? exception, (string @namespace, string key, DBusVariantItem value) valueTuple) + private async void SettingsChangedHandler(Exception? exception, (string @namespace, string key, DBusVariantItem value) valueTuple) { if (exception is not null) return; @@ -62,12 +68,8 @@ namespace Avalonia.FreeDesktop switch (valueTuple) { case ("org.freedesktop.appearance", "color-scheme", { } colorScheme): - _themeVariant = ReadAsColorScheme(colorScheme); - _lastColorValues = BuildPlatformColorValues(); - OnColorValuesChanged(_lastColorValues!); - break; - case ("org.kde.kdeglobals.General", "AccentColor", { } accentColor): - _accentColor = ReadAsAccentColor(accentColor); + _themeVariant = ToColorScheme((colorScheme.Value as DBusUInt32Item)!.Value); + _accentColor = await TryGetAccentColorAsync(); _lastColorValues = BuildPlatformColorValues(); OnColorValuesChanged(_lastColorValues!); break; @@ -85,21 +87,20 @@ namespace Avalonia.FreeDesktop return null; } - private static PlatformThemeVariant ReadAsColorScheme(DBusVariantItem value) + private static PlatformThemeVariant ToColorScheme(uint value) { /* 0: No preference 1: Prefer dark appearance 2: Prefer light appearance */ - var isDark = ((value.Value as DBusVariantItem)!.Value as DBusUInt32Item)!.Value == 1; + var isDark = value == 1; return isDark ? PlatformThemeVariant.Dark : PlatformThemeVariant.Light; } - private static Color ReadAsAccentColor(DBusVariantItem value) + private static Color ToAccentColor(string value) { - var colorStr = ((value.Value as DBusVariantItem)!.Value as DBusStringItem)!.Value; - var rgb = colorStr.Split(','); + var rgb = value.Split(','); return new Color(255, byte.Parse(rgb[0]), byte.Parse(rgb[1]), byte.Parse(rgb[2])); } } From fd995d63bc5ffd85f9343449d4fe8cdbe66304fe Mon Sep 17 00:00:00 2001 From: affederaffe <68356204+affederaffe@users.noreply.github.com> Date: Wed, 10 May 2023 01:49:30 +0200 Subject: [PATCH 3/3] Turn off log messages --- .../DBusPlatformSettings.cs | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/Avalonia.FreeDesktop/DBusPlatformSettings.cs b/src/Avalonia.FreeDesktop/DBusPlatformSettings.cs index e6ea880b6a..c7552823d4 100644 --- a/src/Avalonia.FreeDesktop/DBusPlatformSettings.cs +++ b/src/Avalonia.FreeDesktop/DBusPlatformSettings.cs @@ -1,8 +1,8 @@ using System; using System.Threading.Tasks; -using Avalonia.Logging; using Avalonia.Media; using Avalonia.Platform; +using Tmds.DBus.Protocol; using Tmds.DBus.SourceGenerator; namespace Avalonia.FreeDesktop @@ -22,28 +22,31 @@ namespace Avalonia.FreeDesktop _settings = new OrgFreedesktopPortalSettings(DBusHelper.Connection, "org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop"); _ = _settings.WatchSettingChangedAsync(SettingsChangedHandler); - _ = TryGetInitialValueAsync(); + _ = TryGetInitialValuesAsync(); } public override PlatformColorValues GetColorValues() => _lastColorValues ?? base.GetColorValues(); - private async Task TryGetInitialValueAsync() + private async Task TryGetInitialValuesAsync() + { + _themeVariant = await TryGetThemeVariantAsync(); + _accentColor = await TryGetAccentColorAsync(); + _lastColorValues = BuildPlatformColorValues(); + if (_lastColorValues is not null) + OnColorValuesChanged(_lastColorValues); + } + + private async Task TryGetThemeVariantAsync() { try { var value = await _settings!.ReadAsync("org.freedesktop.appearance", "color-scheme"); - _themeVariant = ToColorScheme(((value.Value as DBusVariantItem)!.Value as DBusUInt32Item)!.Value); + return ToColorScheme(((value.Value as DBusVariantItem)!.Value as DBusUInt32Item)!.Value); } - catch (Exception ex) + catch (DBusException) { - Logger.TryGet(LogEventLevel.Error, LogArea.FreeDesktopPlatform)?.Log(this, "Unable to get org.freedesktop.appearance.color-scheme value", ex); + return null; } - - _accentColor = await TryGetAccentColorAsync(); - - _lastColorValues = BuildPlatformColorValues(); - if (_lastColorValues is not null) - OnColorValuesChanged(_lastColorValues); } private async Task TryGetAccentColorAsync() @@ -53,9 +56,8 @@ namespace Avalonia.FreeDesktop var value = await _settings!.ReadAsync("org.kde.kdeglobals.General", "AccentColor"); return ToAccentColor(((value.Value as DBusVariantItem)!.Value as DBusStringItem)!.Value); } - catch (Exception ex) + catch (DBusException) { - Logger.TryGet(LogEventLevel.Error, LogArea.FreeDesktopPlatform)?.Log(this, "Unable to get org.kde.kdeglobals.General.AccentColor value", ex); return null; } }