|
|
@@ -678,44 +678,24 @@ namespace Avalonia.Win32
|
|
|
{
|
|
|
UnmanagedMethods.ShowWindowCommand command;
|
|
|
|
|
|
- Action afterShow = null;
|
|
|
+ bool maximizeFillsDesktop = false; // otherwise we cover entire screen.
|
|
|
|
|
|
switch (state)
|
|
|
{
|
|
|
case WindowState.Minimized:
|
|
|
- command = UnmanagedMethods.ShowWindowCommand.Minimize;
|
|
|
+ command = ShowWindowCommand.Minimize;
|
|
|
break;
|
|
|
case WindowState.Maximized:
|
|
|
- command = UnmanagedMethods.ShowWindowCommand.Maximize;
|
|
|
+ command = ShowWindowCommand.Maximize;
|
|
|
|
|
|
if (!_decorated && !_ignoreTaskBarWhenMaximized)
|
|
|
{
|
|
|
- IntPtr monitor = MonitorFromWindow(_hwnd, MONITOR.MONITOR_DEFAULTTONEAREST);
|
|
|
-
|
|
|
- if (monitor != IntPtr.Zero)
|
|
|
- {
|
|
|
- MONITORINFO monitorInfo = new MONITORINFO();
|
|
|
-
|
|
|
- if (UnmanagedMethods.GetMonitorInfo(monitor, monitorInfo))
|
|
|
- {
|
|
|
- RECT rcMonitorArea = monitorInfo.rcMonitor;
|
|
|
-
|
|
|
- var x = monitorInfo.rcWork.left;
|
|
|
- var y = monitorInfo.rcWork.top;
|
|
|
- var cx = Math.Abs(monitorInfo.rcWork.right - x);
|
|
|
- var cy = Math.Abs(monitorInfo.rcWork.bottom - y);
|
|
|
-
|
|
|
- afterShow = () =>
|
|
|
- {
|
|
|
- UnmanagedMethods.SetWindowPos(_hwnd, new IntPtr(-2), x, y, cx, cy, SetWindowPosFlags.SWP_SHOWWINDOW);
|
|
|
- };
|
|
|
- }
|
|
|
- }
|
|
|
+ maximizeFillsDesktop = true;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case WindowState.Normal:
|
|
|
- command = UnmanagedMethods.ShowWindowCommand.Restore;
|
|
|
+ command = ShowWindowCommand.Restore;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
@@ -724,12 +704,34 @@ namespace Avalonia.Win32
|
|
|
|
|
|
UnmanagedMethods.ShowWindow(_hwnd, command);
|
|
|
|
|
|
- if (afterShow != null)
|
|
|
+ if(maximizeFillsDesktop)
|
|
|
{
|
|
|
- afterShow();
|
|
|
- }
|
|
|
+ MaximizeWithoutCoveringTaskbar();
|
|
|
+ }
|
|
|
+
|
|
|
+ SetFocus(_hwnd);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void MaximizeWithoutCoveringTaskbar()
|
|
|
+ {
|
|
|
+ IntPtr monitor = MonitorFromWindow(_hwnd, MONITOR.MONITOR_DEFAULTTONEAREST);
|
|
|
|
|
|
- UnmanagedMethods.SetFocus(_hwnd);
|
|
|
+ if (monitor != IntPtr.Zero)
|
|
|
+ {
|
|
|
+ MONITORINFO monitorInfo = new MONITORINFO();
|
|
|
+
|
|
|
+ if (GetMonitorInfo(monitor, monitorInfo))
|
|
|
+ {
|
|
|
+ RECT rcMonitorArea = monitorInfo.rcMonitor;
|
|
|
+
|
|
|
+ var x = monitorInfo.rcWork.left;
|
|
|
+ var y = monitorInfo.rcWork.top;
|
|
|
+ var cx = Math.Abs(monitorInfo.rcWork.right - x);
|
|
|
+ var cy = Math.Abs(monitorInfo.rcWork.bottom - y);
|
|
|
+
|
|
|
+ SetWindowPos(_hwnd, new IntPtr(-2), x, y, cx, cy, SetWindowPosFlags.SWP_SHOWWINDOW);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void SetIcon(IWindowIconImpl icon)
|