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)
{
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

44
src/Avalonia.FreeDesktop/DbusSNITrayIconImpl.cs → 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<IDisposable> 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;

30
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
{

Loading…
Cancel
Save