ARTICLE AD BOX
I want to get DE accent color from d-bus, so I try to call org.freedesktop.portal.Desktop with interface org.freedesktop.portal.Settings method ReadOne with namespace org.freedesktop.appearance and key accent-color:

I use library Tmds.DBusand create simple console app to test:
using Tmds.DBus.Protocol; try { var connection = new DBusConnection(DBusAddress.Session!); await connection.ConnectAsync(); var writer = connection.GetMessageWriter(); writer.WriteMethodCallHeader( destination: "org.freedesktop.portal.Desktop", path: "/org/freedesktop/portal/desktop", @interface: "org.freedesktop.portal.Settings", member: "ReadOne", signature: "ss"); writer.WriteString("org.freedesktop.appearance"); writer.WriteString("accent-color"); var message = writer.CreateMessage(); var reply = await connection.CallMethodAsync(message, (result, _) => result); var reader = reply.GetBodyReader(); reader.AlignStruct(); reader.ReadInt64(); var red = (int)(reader.ReadDouble() * 255); var green = (int)(reader.ReadDouble() * 255); var blue = (int)(reader.ReadDouble() * 255); Console.WriteLine($"RGB: {red}, {green}, {blue}"); } catch (Exception e) { Console.WriteLine(e.Message); }It works and returns the corrent output:
RGB: 53, 168, 84But THE SAME code in the my app throws an exception:
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
at Tmds.DBus.Protocol.Reader..ctor(Boolean isBigEndian, ReadOnlySequence`1 sequence, UnixFdCollection handles, Int32 handleCount)
at Tmds.DBus.Protocol.Message.GetBodyReader()
at GMenu.Modules.LinuxSystem.LinuxThemeLoader.GetThemeHexAsync() in /home/themakarik/RiderProjects/g-menu/src/GMenu/Modules/LinuxSystem/LinuxThemeLoader.cs:line 27
This is the code:
public async Task<Rgb?> GetThemeHexAsync() { try { var connection = new DBusConnection(DBusAddress.Session!); await connection.ConnectAsync(); var writer = connection.GetMessageWriter(); writer.WriteMethodCallHeader( destination: "org.freedesktop.portal.Desktop", path: "/org/freedesktop/portal/desktop", @interface: "org.freedesktop.portal.Settings", member: "ReadOne", signature: "ss"); writer.WriteString("org.freedesktop.appearance"); writer.WriteString("accent-color"); var message = writer.CreateMessage(); var reply = await connection.CallMethodAsync(message, (result, _) => result); var reader = reply.GetBodyReader(); reader.AlignStruct(); reader.ReadInt64(); var red = (int)(reader.ReadDouble() * 255); var green = (int)(reader.ReadDouble() * 255); var blue = (int)(reader.ReadDouble() * 255); return new Rgb(red, green, blue); } catch (Exception e) { logger.Error("Exception: {exception}", e); return null; } }Code used:
public override async void OnFrameworkInitializationCompleted() { try { //https://stackoverflow.com/questions/79933121/avaloniaui-strange-async-application-loading var provider = Services; LoadLocalization(provider); var logger = provider.GetRequiredService<ILogger>(); logger.Information("Initializing GMenu..."); await LoadMaterialThemeAsync(provider); logger.Information("Desktop files paths: {paths}", StaticConfiguration.PathToDesktopFiles); logger.Information("Desktop files icons path: {paths}", StaticConfiguration.PathsToRefineIcon); if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) desktop.MainWindow = new MainWindow { DataContext = Services.GetRequiredService<MainWindowViewModel>() }; await LoadConfigurationAsync(provider).ConfigureAwait(false); base.OnFrameworkInitializationCompleted(); } catch (Exception e) { Services.GetRequiredService<ILogger>().Error(e, "An error occured while initializing the application."); Console.WriteLine(e); Environment.Exit(-1); } } private async Task LoadMaterialThemeAsync(IServiceProvider provider) { using var scope = provider.CreateScope(); var themeLoader = scope.ServiceProvider.GetRequiredService<ILinuxThemeLoader>(); var rgb = await themeLoader.GetThemeHexAsync(); var color = new Color(255, (byte)rgb.Red, (byte)rgb.Green, (byte)rgb.Blue ); var materialTheme = this.LocateMaterialTheme<CustomMaterialTheme>(); materialTheme.BaseTheme = BaseThemeMode.Inherit; materialTheme.PrimaryColor = color; materialTheme.SecondaryColor = color; this.Resources["AccentColor"] = materialTheme.PrimaryColor; }Can somebody explain why strange things like this happens, and how can I fix it?
