From 1302d3459a8863c347452b4e5fd1bbb704cb3ea4 Mon Sep 17 00:00:00 2001 From: Jumar Macato <16554748+jmacato@users.noreply.github.com> Date: Sun, 24 Oct 2021 14:13:17 +0800 Subject: [PATCH] Fix review comments --- src/Avalonia.FreeDesktop/DBusHelper.cs | 4 +- ...SNITrayIconImpl.cs => DBusTrayIconImpl.cs} | 44 +++++++++---------- src/Avalonia.X11/X11TrayIconImpl.cs | 30 ++++++------- 3 files changed, 39 insertions(+), 39 deletions(-) rename src/Avalonia.FreeDesktop/{DbusSNITrayIconImpl.cs => DBusTrayIconImpl.cs} (96%) diff --git a/src/Avalonia.FreeDesktop/DBusHelper.cs b/src/Avalonia.FreeDesktop/DBusHelper.cs index 4e23711ed4..b5bfb8b116 100644 --- a/src/Avalonia.FreeDesktop/DBusHelper.cs +++ b/src/Avalonia.FreeDesktop/DBusHelper.cs @@ -51,10 +51,10 @@ namespace Avalonia.FreeDesktop public static Connection TryInitialize(string dbusAddress = null) { - return Connection ?? TryGetConnection(dbusAddress); + return Connection ?? TryCreateNewConnection(dbusAddress); } - public static Connection TryGetConnection(string dbusAddress = null) + public static Connection TryCreateNewConnection(string dbusAddress = null) { var oldContext = SynchronizationContext.Current; try diff --git a/src/Avalonia.FreeDesktop/DbusSNITrayIconImpl.cs b/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs similarity index 96% rename from src/Avalonia.FreeDesktop/DbusSNITrayIconImpl.cs rename to src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs index 6ca05efe50..2d30d2ee21 100644 --- a/src/Avalonia.FreeDesktop/DbusSNITrayIconImpl.cs +++ b/src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs @@ -10,32 +10,34 @@ using Avalonia.Logging; using Tmds.DBus; [assembly: InternalsVisibleTo(Connection.DynamicAssemblyName)] - +[assembly: InternalsVisibleTo("Avalonia.X11")] namespace Avalonia.FreeDesktop { - public class DbusSNITrayIconImpl + internal class DBusTrayIconImpl { - private static int s_trayIconInstanceId = 0; + private static int s_trayIconInstanceId; + private readonly ObjectPath _dbusMenuPath; - private StatusNotifierItemDbusObj? _statusNotifierItemDbusObj; private readonly Connection? _connection; - private DbusPixmap _icon; + private readonly IDisposable _serviceWatchDisposable; + + private StatusNotifierItemDbusObj? _statusNotifierItemDbusObj; private IStatusNotifierWatcher? _statusNotifierWatcher; + private DbusPixmap _icon; + private string? _sysTrayServiceName; private string? _tooltipText; private bool _isDisposed; private bool _serviceConnected; - private readonly IDisposable _serviceWatchDisposable; - private bool _isVisible; - + private bool _isVisible = true; + + public bool IsActive => _serviceConnected; public INativeMenuExporter? MenuExporter { get; } public Action? OnClicked { get; set; } - - public bool IsActive => _serviceConnected; - - public DbusSNITrayIconImpl() + + public DBusTrayIconImpl() { - _connection = DBusHelper.TryGetConnection(); + _connection = DBusHelper.TryCreateNewConnection(); if (_connection is null) { @@ -46,9 +48,9 @@ namespace Avalonia.FreeDesktop } _dbusMenuPath = DBusMenuExporter.GenerateDBusMenuObjPath; + MenuExporter = DBusMenuExporter.TryCreateDetachedNativeMenu(_dbusMenuPath, _connection); - InitializeSNWService(); - CreateTrayIcon(); + _serviceWatchDisposable = Watch(); } @@ -73,12 +75,10 @@ namespace Avalonia.FreeDesktop _serviceConnected = true; } - - + private async Task Watch() => await _connection?.ResolveServiceOwnerAsync("org.kde.StatusNotifierWatcher", OnNameChange)!; - - + private void OnNameChange(ServiceOwnerChangedEventArgs obj) { if (_isDisposed) @@ -87,6 +87,7 @@ namespace Avalonia.FreeDesktop if (!_serviceConnected & obj.NewOwner != null) { _serviceConnected = true; + InitializeSNWService(); if (_isVisible) { @@ -104,8 +105,7 @@ namespace Avalonia.FreeDesktop _serviceConnected = false; } } - - public void CreateTrayIcon() + private void CreateTrayIcon() { if (_connection is null || !_serviceConnected || _isDisposed) return; @@ -136,7 +136,7 @@ namespace Avalonia.FreeDesktop _isVisible = true; } - public void DestroyTrayIcon() + private void DestroyTrayIcon() { if (_connection is null || !_serviceConnected || _isDisposed) return; diff --git a/src/Avalonia.X11/X11TrayIconImpl.cs b/src/Avalonia.X11/X11TrayIconImpl.cs index 9e03dcd604..3051e90457 100644 --- a/src/Avalonia.X11/X11TrayIconImpl.cs +++ b/src/Avalonia.X11/X11TrayIconImpl.cs @@ -11,17 +11,17 @@ namespace Avalonia.X11 public X11TrayIconImpl() { _xEmbedTrayIcon = new XEmbedTrayIconImpl(); - _dbusSniTrayIcon = new DbusSNITrayIconImpl(); + _dBusTrayIcon = new DBusTrayIconImpl(); } - private readonly DbusSNITrayIconImpl _dbusSniTrayIcon; + private readonly DBusTrayIconImpl _dBusTrayIcon; private readonly XEmbedTrayIconImpl _xEmbedTrayIcon; private bool _isDisposed; public void Dispose() { - _dbusSniTrayIcon?.Dispose(); + _dBusTrayIcon?.Dispose(); _xEmbedTrayIcon?.Dispose(); _isDisposed = true; } @@ -30,12 +30,12 @@ namespace Avalonia.X11 { if (_isDisposed) return; - if (_dbusSniTrayIcon?.IsActive ?? false) + if (_dBusTrayIcon?.IsActive ?? false) { if (!(icon is X11IconData x11icon)) return; - _dbusSniTrayIcon.SetIcon(x11icon.Data); + _dBusTrayIcon.SetIcon(x11icon.Data); } else { @@ -47,9 +47,9 @@ namespace Avalonia.X11 { if (_isDisposed) return; - if (_dbusSniTrayIcon?.IsActive ?? false) + if (_dBusTrayIcon?.IsActive ?? false) { - _dbusSniTrayIcon.SetToolTipText(text); + _dBusTrayIcon.SetToolTipText(text); } else { @@ -61,9 +61,9 @@ namespace Avalonia.X11 { if (_isDisposed) return; - if (_dbusSniTrayIcon?.IsActive ?? false) + if (_dBusTrayIcon?.IsActive ?? false) { - _dbusSniTrayIcon.SetIsVisible(visible); + _dBusTrayIcon.SetIsVisible(visible); } else { @@ -75,9 +75,9 @@ namespace Avalonia.X11 { get { - if (_dbusSniTrayIcon?.IsActive ?? false) + if (_dBusTrayIcon?.IsActive ?? false) { - return _dbusSniTrayIcon.MenuExporter; + return _dBusTrayIcon.MenuExporter; } else { @@ -90,9 +90,9 @@ namespace Avalonia.X11 { get { - if (_dbusSniTrayIcon?.IsActive ?? false) + if (_dBusTrayIcon?.IsActive ?? false) { - return _dbusSniTrayIcon.OnClicked; + return _dBusTrayIcon.OnClicked; } else { @@ -101,9 +101,9 @@ namespace Avalonia.X11 } set { - if (_dbusSniTrayIcon?.IsActive ?? false) + if (_dBusTrayIcon?.IsActive ?? false) { - _dbusSniTrayIcon.OnClicked = value; + _dBusTrayIcon.OnClicked = value; } else {