|
|
|
@ -274,10 +274,11 @@ namespace Avalonia.Win32 |
|
|
|
private class TrayPopupRoot : Window |
|
|
|
{ |
|
|
|
private readonly ManagedPopupPositioner _positioner; |
|
|
|
|
|
|
|
private readonly TrayIconManagedPopupPositionerPopupImplHelper _positionerHelper; |
|
|
|
public TrayPopupRoot() |
|
|
|
{ |
|
|
|
_positioner = new ManagedPopupPositioner(new TrayIconManagedPopupPositionerPopupImplHelper(MoveResize)); |
|
|
|
_positionerHelper = new TrayIconManagedPopupPositionerPopupImplHelper(MoveResize); |
|
|
|
_positioner = new ManagedPopupPositioner(_positionerHelper); |
|
|
|
Topmost = true; |
|
|
|
|
|
|
|
Deactivated += TrayPopupRoot_Deactivated; |
|
|
|
@ -292,6 +293,12 @@ namespace Avalonia.Win32 |
|
|
|
Close(); |
|
|
|
} |
|
|
|
|
|
|
|
protected override void OnClosed(EventArgs e) |
|
|
|
{ |
|
|
|
base.OnClosed(e); |
|
|
|
_positionerHelper.Dispose(); |
|
|
|
} |
|
|
|
|
|
|
|
private void MoveResize(PixelPoint position, Size size, double scaling) |
|
|
|
{ |
|
|
|
if (PlatformImpl is { } platformImpl) |
|
|
|
@ -315,7 +322,7 @@ namespace Avalonia.Win32 |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private class TrayIconManagedPopupPositionerPopupImplHelper : IManagedPopupPositionerPopup |
|
|
|
private class TrayIconManagedPopupPositionerPopupImplHelper : IManagedPopupPositionerPopup, IDisposable |
|
|
|
{ |
|
|
|
private readonly Action<PixelPoint, Size, double> _moveResize; |
|
|
|
private readonly Window _hiddenWindow; |
|
|
|
@ -350,6 +357,11 @@ namespace Avalonia.Win32 |
|
|
|
_moveResize(new PixelPoint((int)devicePoint.X, (int)devicePoint.Y), virtualSize, Scaling); |
|
|
|
} |
|
|
|
|
|
|
|
public void Dispose() |
|
|
|
{ |
|
|
|
_hiddenWindow.Close(); |
|
|
|
} |
|
|
|
|
|
|
|
public double Scaling => _hiddenWindow.Screens.Primary?.Scaling ?? 1.0; |
|
|
|
} |
|
|
|
} |
|
|
|
|