From aa642836f6fbe3eacaca12bd42a0bb17944a4ca2 Mon Sep 17 00:00:00 2001 From: Jumar Macato <16554748+jmacato@users.noreply.github.com> Date: Thu, 2 May 2024 07:29:07 +0800 Subject: [PATCH] Fix crash when linux tray icon's visibility is toggled on/off. (#15582) * Call RemoveMethodHandlers to "dispose" method handlers in dbus tray icons. * just move the handler to the ctor and remove the reflection hacks --- src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs b/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs index 61e46b651e..e6af805b4f 100644 --- a/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs +++ b/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Generic; using System.Diagnostics; +using System.Reflection; using System.Threading.Tasks; using Avalonia.Controls.Platform; using Avalonia.Logging; @@ -52,7 +54,10 @@ namespace Avalonia.FreeDesktop _dbusMenuPath = DBusMenuExporter.GenerateDBusMenuObjPath; MenuExporter = DBusMenuExporter.TryCreateDetachedNativeMenu(_dbusMenuPath, _connection); - + + _statusNotifierItemDbusObj = new StatusNotifierItemDbusObj(_connection, _dbusMenuPath); + _connection.AddMethodHandler(_statusNotifierItemDbusObj); + WatchAsync(); } @@ -107,9 +112,6 @@ namespace Avalonia.FreeDesktop var tid = s_trayIconInstanceId++; _sysTrayServiceName = FormattableString.Invariant($"org.kde.StatusNotifierItem-{pid}-{tid}"); - _statusNotifierItemDbusObj = new StatusNotifierItemDbusObj(_connection, _dbusMenuPath); - - _connection.AddMethodHandler(_statusNotifierItemDbusObj); await _dBus!.RequestNameAsync(_sysTrayServiceName, 0); await _statusNotifierWatcher.RegisterStatusNotifierItemAsync(_sysTrayServiceName);