diff --git a/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs b/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs index b19da5ff36..b8ed5d30b4 100644 --- a/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs +++ b/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs @@ -58,6 +58,7 @@ namespace Avalonia.FreeDesktop _statusNotifierItemDbusObj = new StatusNotifierItemDbusObj(_connection, dbusMenuPath); _pathHandler.Add(_statusNotifierItemDbusObj); _connection.AddMethodHandler(_pathHandler); + _statusNotifierItemDbusObj.ActivationDelegate += () => OnClicked?.Invoke(); WatchAsync(); } @@ -112,13 +113,19 @@ namespace Avalonia.FreeDesktop #endif var tid = s_trayIconInstanceId++; + // make sure not to add the path handle and connection method handler twice + if (_statusNotifierItemDbusObj!.PathHandler is null) + _pathHandler.Add(_statusNotifierItemDbusObj!); + + _connection.RemoveMethodHandler(_pathHandler.Path); + _connection.AddMethodHandler(_pathHandler); + _sysTrayServiceName = FormattableString.Invariant($"org.kde.StatusNotifierItem-{pid}-{tid}"); await _dBus!.RequestNameAsync(_sysTrayServiceName, 0); await _statusNotifierWatcher.RegisterStatusNotifierItemAsync(_sysTrayServiceName); _statusNotifierItemDbusObj!.SetTitleAndTooltip(_tooltipText); _statusNotifierItemDbusObj.SetIcon(_icon); - _statusNotifierItemDbusObj.ActivationDelegate += OnClicked; } private void DestroyTrayIcon()