|
|
@ -123,7 +123,7 @@ namespace Avalonia.Win32 |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
case WindowsMessage.WM_NCRBUTTONUP |
|
|
case WindowsMessage.WM_NCRBUTTONUP |
|
|
when (HitTestValues)ToInt32(wParam) == HitTestValues.HTCAPTION: |
|
|
when (HitTestValues)ToInt32(wParam) == HitTestValues.HTCAPTION && IsCaptionHitForSystemMenu(hWnd, lParam): |
|
|
ShowSystemMenu(PointFromLParam(lParam)); |
|
|
ShowSystemMenu(PointFromLParam(lParam)); |
|
|
callDwp = false; |
|
|
callDwp = false; |
|
|
return IntPtr.Zero; |
|
|
return IntPtr.Zero; |
|
|
@ -301,19 +301,17 @@ namespace Avalonia.Win32 |
|
|
|
|
|
|
|
|
private bool IsCaptionHitForSystemMenu(IntPtr hWnd, IntPtr lParam) |
|
|
private bool IsCaptionHitForSystemMenu(IntPtr hWnd, IntPtr lParam) |
|
|
{ |
|
|
{ |
|
|
if (!_isClientAreaExtended || WindowState == WindowState.FullScreen) |
|
|
if (!_isClientAreaExtended) |
|
|
{ |
|
|
{ |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (HitTestNCA(hWnd, IntPtr.Zero, lParam) != HitTestValues.HTCAPTION) |
|
|
if (HitTestNCA(hWnd, IntPtr.Zero, lParam) is not HitTestValues.HTCAPTION and not HitTestValues.HTNOWHERE) |
|
|
{ |
|
|
{ |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return HitTestVisual(lParam) |
|
|
return HitTestVisual(lParam) is HitTestValues.HTCAPTION or HitTestValues.HTNOWHERE; |
|
|
is HitTestValues.HTNOWHERE |
|
|
|
|
|
or HitTestValues.HTCAPTION; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void ShowSystemMenu(PixelPoint screenPoint) |
|
|
private void ShowSystemMenu(PixelPoint screenPoint) |
|
|
@ -324,7 +322,7 @@ namespace Avalonia.Win32 |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// SetForegroundWindow(_hwnd);
|
|
|
SetForegroundWindow(_hwnd); |
|
|
SendMessage(_hwnd, (int)WindowsMessage.WM_INITMENU, menu, IntPtr.Zero); |
|
|
SendMessage(_hwnd, (int)WindowsMessage.WM_INITMENU, menu, IntPtr.Zero); |
|
|
UpdateSystemMenu(menu); |
|
|
UpdateSystemMenu(menu); |
|
|
|
|
|
|
|
|
@ -341,7 +339,14 @@ namespace Avalonia.Win32 |
|
|
|
|
|
|
|
|
if (command != 0) |
|
|
if (command != 0) |
|
|
{ |
|
|
{ |
|
|
SendMessage(_hwnd, (int)WindowsMessage.WM_SYSCOMMAND, (IntPtr)command, MakeLParam(screenPoint)); |
|
|
if ((SysCommands)command == SysCommands.SC_RESTORE && WindowState == WindowState.FullScreen) |
|
|
|
|
|
{ |
|
|
|
|
|
WindowState = WindowState.Normal; |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
SendMessage(_hwnd, (int)WindowsMessage.WM_SYSCOMMAND, (IntPtr)command, MakeLParam(screenPoint)); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -353,8 +358,8 @@ namespace Avalonia.Win32 |
|
|
var isFullScreen = state == WindowState.FullScreen; |
|
|
var isFullScreen = state == WindowState.FullScreen; |
|
|
var isNormal = state == WindowState.Normal; |
|
|
var isNormal = state == WindowState.Normal; |
|
|
|
|
|
|
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_RESTORE, isMinimized || isMaximized); |
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_RESTORE, isMinimized || isMaximized || isFullScreen); |
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_MOVE, isNormal); |
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_MOVE, isNormal || isFullScreen); |
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_SIZE, isNormal && _windowProperties.IsResizable); |
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_SIZE, isNormal && _windowProperties.IsResizable); |
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_MINIMIZE, !isMinimized && !isFullScreen && _windowProperties.IsMinimizable); |
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_MINIMIZE, !isMinimized && !isFullScreen && _windowProperties.IsMinimizable); |
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_MAXIMIZE, !isMaximized && !isFullScreen && _windowProperties.IsMaximizable); |
|
|
SetSystemMenuItemEnabled(menu, SysCommands.SC_MAXIMIZE, !isMaximized && !isFullScreen && _windowProperties.IsMaximizable); |
|
|
|