Browse Source

Fix review comments

pull/6779/head
Jumar Macato 5 years ago
parent
commit
1302d3459a
No known key found for this signature in database GPG Key ID: 85076C4D9D3155A3
  1. 4
      src/Avalonia.FreeDesktop/DBusHelper.cs
  2. 44
      src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs
  3. 30
      src/Avalonia.X11/X11TrayIconImpl.cs

4
src/Avalonia.FreeDesktop/DBusHelper.cs

@ -51,10 +51,10 @@ namespace Avalonia.FreeDesktop
public static Connection TryInitialize(string dbusAddress = null) 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; var oldContext = SynchronizationContext.Current;
try try

44
src/Avalonia.FreeDesktop/DbusSNITrayIconImpl.cs → src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs

@ -10,32 +10,34 @@ using Avalonia.Logging;
using Tmds.DBus; using Tmds.DBus;
[assembly: InternalsVisibleTo(Connection.DynamicAssemblyName)] [assembly: InternalsVisibleTo(Connection.DynamicAssemblyName)]
[assembly: InternalsVisibleTo("Avalonia.X11")]
namespace Avalonia.FreeDesktop 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 readonly ObjectPath _dbusMenuPath;
private StatusNotifierItemDbusObj? _statusNotifierItemDbusObj;
private readonly Connection? _connection; private readonly Connection? _connection;
private DbusPixmap _icon; private readonly IDisposable _serviceWatchDisposable;
private StatusNotifierItemDbusObj? _statusNotifierItemDbusObj;
private IStatusNotifierWatcher? _statusNotifierWatcher; private IStatusNotifierWatcher? _statusNotifierWatcher;
private DbusPixmap _icon;
private string? _sysTrayServiceName; private string? _sysTrayServiceName;
private string? _tooltipText; private string? _tooltipText;
private bool _isDisposed; private bool _isDisposed;
private bool _serviceConnected; private bool _serviceConnected;
private readonly IDisposable _serviceWatchDisposable; private bool _isVisible = true;
private bool _isVisible;
public bool IsActive => _serviceConnected;
public INativeMenuExporter? MenuExporter { get; } public INativeMenuExporter? MenuExporter { get; }
public Action? OnClicked { get; set; } public Action? OnClicked { get; set; }
public bool IsActive => _serviceConnected; public DBusTrayIconImpl()
public DbusSNITrayIconImpl()
{ {
_connection = DBusHelper.TryGetConnection(); _connection = DBusHelper.TryCreateNewConnection();
if (_connection is null) if (_connection is null)
{ {
@ -46,9 +48,9 @@ namespace Avalonia.FreeDesktop
} }
_dbusMenuPath = DBusMenuExporter.GenerateDBusMenuObjPath; _dbusMenuPath = DBusMenuExporter.GenerateDBusMenuObjPath;
MenuExporter = DBusMenuExporter.TryCreateDetachedNativeMenu(_dbusMenuPath, _connection); MenuExporter = DBusMenuExporter.TryCreateDetachedNativeMenu(_dbusMenuPath, _connection);
InitializeSNWService();
CreateTrayIcon();
_serviceWatchDisposable = Watch(); _serviceWatchDisposable = Watch();
} }
@ -73,12 +75,10 @@ namespace Avalonia.FreeDesktop
_serviceConnected = true; _serviceConnected = true;
} }
private async Task<IDisposable> Watch() => private async Task<IDisposable> Watch() =>
await _connection?.ResolveServiceOwnerAsync("org.kde.StatusNotifierWatcher", OnNameChange)!; await _connection?.ResolveServiceOwnerAsync("org.kde.StatusNotifierWatcher", OnNameChange)!;
private void OnNameChange(ServiceOwnerChangedEventArgs obj) private void OnNameChange(ServiceOwnerChangedEventArgs obj)
{ {
if (_isDisposed) if (_isDisposed)
@ -87,6 +87,7 @@ namespace Avalonia.FreeDesktop
if (!_serviceConnected & obj.NewOwner != null) if (!_serviceConnected & obj.NewOwner != null)
{ {
_serviceConnected = true; _serviceConnected = true;
InitializeSNWService();
if (_isVisible) if (_isVisible)
{ {
@ -104,8 +105,7 @@ namespace Avalonia.FreeDesktop
_serviceConnected = false; _serviceConnected = false;
} }
} }
private void CreateTrayIcon()
public void CreateTrayIcon()
{ {
if (_connection is null || !_serviceConnected || _isDisposed) if (_connection is null || !_serviceConnected || _isDisposed)
return; return;
@ -136,7 +136,7 @@ namespace Avalonia.FreeDesktop
_isVisible = true; _isVisible = true;
} }
public void DestroyTrayIcon() private void DestroyTrayIcon()
{ {
if (_connection is null || !_serviceConnected || _isDisposed) if (_connection is null || !_serviceConnected || _isDisposed)
return; return;

30
src/Avalonia.X11/X11TrayIconImpl.cs

@ -11,17 +11,17 @@ namespace Avalonia.X11
public X11TrayIconImpl() public X11TrayIconImpl()
{ {
_xEmbedTrayIcon = new XEmbedTrayIconImpl(); _xEmbedTrayIcon = new XEmbedTrayIconImpl();
_dbusSniTrayIcon = new DbusSNITrayIconImpl(); _dBusTrayIcon = new DBusTrayIconImpl();
} }
private readonly DbusSNITrayIconImpl _dbusSniTrayIcon; private readonly DBusTrayIconImpl _dBusTrayIcon;
private readonly XEmbedTrayIconImpl _xEmbedTrayIcon; private readonly XEmbedTrayIconImpl _xEmbedTrayIcon;
private bool _isDisposed; private bool _isDisposed;
public void Dispose() public void Dispose()
{ {
_dbusSniTrayIcon?.Dispose(); _dBusTrayIcon?.Dispose();
_xEmbedTrayIcon?.Dispose(); _xEmbedTrayIcon?.Dispose();
_isDisposed = true; _isDisposed = true;
} }
@ -30,12 +30,12 @@ namespace Avalonia.X11
{ {
if (_isDisposed) return; if (_isDisposed) return;
if (_dbusSniTrayIcon?.IsActive ?? false) if (_dBusTrayIcon?.IsActive ?? false)
{ {
if (!(icon is X11IconData x11icon)) if (!(icon is X11IconData x11icon))
return; return;
_dbusSniTrayIcon.SetIcon(x11icon.Data); _dBusTrayIcon.SetIcon(x11icon.Data);
} }
else else
{ {
@ -47,9 +47,9 @@ namespace Avalonia.X11
{ {
if (_isDisposed) return; if (_isDisposed) return;
if (_dbusSniTrayIcon?.IsActive ?? false) if (_dBusTrayIcon?.IsActive ?? false)
{ {
_dbusSniTrayIcon.SetToolTipText(text); _dBusTrayIcon.SetToolTipText(text);
} }
else else
{ {
@ -61,9 +61,9 @@ namespace Avalonia.X11
{ {
if (_isDisposed) return; if (_isDisposed) return;
if (_dbusSniTrayIcon?.IsActive ?? false) if (_dBusTrayIcon?.IsActive ?? false)
{ {
_dbusSniTrayIcon.SetIsVisible(visible); _dBusTrayIcon.SetIsVisible(visible);
} }
else else
{ {
@ -75,9 +75,9 @@ namespace Avalonia.X11
{ {
get get
{ {
if (_dbusSniTrayIcon?.IsActive ?? false) if (_dBusTrayIcon?.IsActive ?? false)
{ {
return _dbusSniTrayIcon.MenuExporter; return _dBusTrayIcon.MenuExporter;
} }
else else
{ {
@ -90,9 +90,9 @@ namespace Avalonia.X11
{ {
get get
{ {
if (_dbusSniTrayIcon?.IsActive ?? false) if (_dBusTrayIcon?.IsActive ?? false)
{ {
return _dbusSniTrayIcon.OnClicked; return _dBusTrayIcon.OnClicked;
} }
else else
{ {
@ -101,9 +101,9 @@ namespace Avalonia.X11
} }
set set
{ {
if (_dbusSniTrayIcon?.IsActive ?? false) if (_dBusTrayIcon?.IsActive ?? false)
{ {
_dbusSniTrayIcon.OnClicked = value; _dBusTrayIcon.OnClicked = value;
} }
else else
{ {

Loading…
Cancel
Save