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;
}
}