From 7b6cabe6085409ad0d86bbe4bf777663c7c557ca Mon Sep 17 00:00:00 2001 From: affederaffe <68356204+affederaffe@users.noreply.github.com> Date: Tue, 28 Mar 2023 17:24:52 +0200 Subject: [PATCH] Fix TrayIcons on Gnome --- .../Avalonia.FreeDesktop.csproj | 10 ++++----- src/Avalonia.FreeDesktop/DBusMenuExporter.cs | 21 ++++++++++--------- src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs | 13 ++++++++++-- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj b/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj index da9add1fa4..da6ae9e856 100644 --- a/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj +++ b/src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj @@ -5,20 +5,20 @@ enable - + - + - + - - + + diff --git a/src/Avalonia.FreeDesktop/DBusMenuExporter.cs b/src/Avalonia.FreeDesktop/DBusMenuExporter.cs index 3073ea580c..77f9d31273 100644 --- a/src/Avalonia.FreeDesktop/DBusMenuExporter.cs +++ b/src/Avalonia.FreeDesktop/DBusMenuExporter.cs @@ -38,7 +38,7 @@ namespace Avalonia.FreeDesktop private bool _resetQueued; private int _nextId = 1; - public DBusMenuExporterImpl(Connection connection, IntPtr xid) + public DBusMenuExporterImpl(Connection connection, IntPtr xid) : this() { Connection = connection; _xid = (uint)xid.ToInt32(); @@ -47,7 +47,7 @@ namespace Avalonia.FreeDesktop _ = InitializeAsync(); } - public DBusMenuExporterImpl(Connection connection, string path) + public DBusMenuExporterImpl(Connection connection, string path) : this() { Connection = connection; _appMenu = false; @@ -56,6 +56,13 @@ namespace Avalonia.FreeDesktop _ = InitializeAsync(); } + private DBusMenuExporterImpl() + { + BackingProperties.Status = string.Empty; + BackingProperties.TextDirection = string.Empty; + BackingProperties.IconThemePath = Array.Empty(); + } + protected override Connection Connection { get; } public override string Path { get; } @@ -202,15 +209,9 @@ namespace Avalonia.FreeDesktop return id; } - private void OnMenuItemsChanged(object? sender, NotifyCollectionChangedEventArgs e) - { - QueueReset(); - } + private void OnMenuItemsChanged(object? sender, NotifyCollectionChangedEventArgs e) => QueueReset(); - private void OnItemPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs e) - { - QueueReset(); - } + private void OnItemPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs e) => QueueReset(); private static readonly string[] s_allProperties = { "type", "label", "enabled", "visible", "shortcut", "toggle-type", "children-display", "toggle-state", "icon-data" diff --git a/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs b/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs index fed8b87bc9..43ae48341c 100644 --- a/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs +++ b/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs @@ -220,6 +220,16 @@ namespace Avalonia.FreeDesktop { Connection = connection; BackingProperties.Menu = dbusMenuPath; + BackingProperties.Category = string.Empty; + BackingProperties.Status = string.Empty; + BackingProperties.Id = string.Empty; + BackingProperties.Title = string.Empty; + BackingProperties.IconPixmap = Array.Empty<(int, int, byte[])>(); + BackingProperties.AttentionIconName = string.Empty; + BackingProperties.AttentionIconPixmap = Array.Empty<(int, int, byte[])>(); + BackingProperties.AttentionMovieName = string.Empty; + BackingProperties.OverlayIconName = string.Empty; + BackingProperties.OverlayIconPixmap = Array.Empty<(int, int, byte[])>(); BackingProperties.ToolTip = (string.Empty, Array.Empty<(int, int, byte[])>(), string.Empty, string.Empty); InvalidateAll(); } @@ -234,7 +244,7 @@ namespace Avalonia.FreeDesktop protected override ValueTask OnActivateAsync(int x, int y) { - Dispatcher.UIThread.Post(() => ActivationDelegate?.Invoke()); + ActivationDelegate?.Invoke(); return new ValueTask(); } @@ -267,7 +277,6 @@ namespace Avalonia.FreeDesktop BackingProperties.Category = "ApplicationStatus"; BackingProperties.Status = text; BackingProperties.Title = text; - BackingProperties.ToolTip = (string.Empty, Array.Empty<(int, int, byte[])>(), text, string.Empty); InvalidateAll(); } }