Browse Source

fix: DBus tray icon NRE when change visible (#19742)

* fix: TrayIcon NRE when change visible

* fix: DBus tray icon duplicated click event

---------

Co-authored-by: Max Katz <maxkatz6@outlook.com>
pull/19876/head
memorydream 4 months ago
committed by GitHub
parent
commit
6cf9b87a95
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 9
      src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs

9
src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs

@ -58,6 +58,7 @@ namespace Avalonia.FreeDesktop
_statusNotifierItemDbusObj = new StatusNotifierItemDbusObj(_connection, dbusMenuPath); _statusNotifierItemDbusObj = new StatusNotifierItemDbusObj(_connection, dbusMenuPath);
_pathHandler.Add(_statusNotifierItemDbusObj); _pathHandler.Add(_statusNotifierItemDbusObj);
_connection.AddMethodHandler(_pathHandler); _connection.AddMethodHandler(_pathHandler);
_statusNotifierItemDbusObj.ActivationDelegate += () => OnClicked?.Invoke();
WatchAsync(); WatchAsync();
} }
@ -112,13 +113,19 @@ namespace Avalonia.FreeDesktop
#endif #endif
var tid = s_trayIconInstanceId++; 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}"); _sysTrayServiceName = FormattableString.Invariant($"org.kde.StatusNotifierItem-{pid}-{tid}");
await _dBus!.RequestNameAsync(_sysTrayServiceName, 0); await _dBus!.RequestNameAsync(_sysTrayServiceName, 0);
await _statusNotifierWatcher.RegisterStatusNotifierItemAsync(_sysTrayServiceName); await _statusNotifierWatcher.RegisterStatusNotifierItemAsync(_sysTrayServiceName);
_statusNotifierItemDbusObj!.SetTitleAndTooltip(_tooltipText); _statusNotifierItemDbusObj!.SetTitleAndTooltip(_tooltipText);
_statusNotifierItemDbusObj.SetIcon(_icon); _statusNotifierItemDbusObj.SetIcon(_icon);
_statusNotifierItemDbusObj.ActivationDelegate += OnClicked;
} }
private void DestroyTrayIcon() private void DestroyTrayIcon()

Loading…
Cancel
Save