Browse Source

Merge pull request #9221 from AvaloniaUI/fixes/8869-show-windowstate

Fix setting WindowState before showing Window.
pull/9538/head
Max Katz 3 years ago
committed by Steven Kirk
parent
commit
ffe74ceaa4
  1. 6
      samples/IntegrationTestApp/MainWindow.axaml
  2. 2
      samples/IntegrationTestApp/MainWindow.axaml.cs
  3. 2
      samples/IntegrationTestApp/ShowWindowTest.axaml
  4. 10
      src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs
  5. 11
      src/Windows/Avalonia.Win32/WindowImpl.cs

6
samples/IntegrationTestApp/MainWindow.axaml

@ -109,6 +109,12 @@
<ComboBoxItem>CenterScreen</ComboBoxItem>
<ComboBoxItem>CenterOwner</ComboBoxItem>
</ComboBox>
<ComboBox Name="ShowWindowState" SelectedIndex="0">
<ComboBoxItem>Normal</ComboBoxItem>
<ComboBoxItem>Minimized</ComboBoxItem>
<ComboBoxItem>Maximized</ComboBoxItem>
<ComboBoxItem>FullScreen</ComboBoxItem>
</ComboBox>
<Button Name="ShowWindow">Show Window</Button>
<Button Name="SendToBack">Send to Back</Button>
<Button Name="ExitFullscreen">Exit Fullscreen</Button>

2
samples/IntegrationTestApp/MainWindow.axaml.cs

@ -53,6 +53,7 @@ namespace IntegrationTestApp
var sizeTextBox = this.GetControl<TextBox>("ShowWindowSize");
var modeComboBox = this.GetControl<ComboBox>("ShowWindowMode");
var locationComboBox = this.GetControl<ComboBox>("ShowWindowLocation");
var stateComboBox = this.GetControl<ComboBox>("ShowWindowState");
var size = !string.IsNullOrWhiteSpace(sizeTextBox.Text) ? Size.Parse(sizeTextBox.Text) : (Size?)null;
var owner = (Window)this.GetVisualRoot()!;
@ -68,6 +69,7 @@ namespace IntegrationTestApp
}
sizeTextBox.Text = string.Empty;
window.WindowState = (WindowState)stateComboBox.SelectedIndex;
switch (modeComboBox.SelectedIndex)
{

2
samples/IntegrationTestApp/ShowWindowTest.axaml

@ -29,7 +29,7 @@
<ComboBoxItem>Normal</ComboBoxItem>
<ComboBoxItem>Minimized</ComboBoxItem>
<ComboBoxItem>Maximized</ComboBoxItem>
<ComboBoxItem>Fullscreen</ComboBoxItem>
<ComboBoxItem>FullScreen</ComboBoxItem>
</ComboBox>
<Button Name="HideButton" Grid.Row="8" Command="{Binding $parent[Window].Hide}">Hide</Button>
</Grid>

10
src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs

@ -399,9 +399,13 @@ namespace Avalonia.Win32
Resized(clientSize / RenderScaling, _resizeReason);
}
var windowState = size == SizeCommand.Maximized ?
WindowState.Maximized :
(size == SizeCommand.Minimized ? WindowState.Minimized : WindowState.Normal);
var windowState = size switch
{
SizeCommand.Maximized => WindowState.Maximized,
SizeCommand.Minimized => WindowState.Minimized,
_ when _isFullScreenActive => WindowState.FullScreen,
_ => WindowState.Normal,
};
if (windowState != _lastWindowState)
{

11
src/Windows/Avalonia.Win32/WindowImpl.cs

@ -245,6 +245,11 @@ namespace Avalonia.Win32
{
get
{
if (!IsWindowVisible(_hwnd))
{
return _showWindowState;
}
if (_isFullScreenActive)
{
return WindowState.FullScreen;
@ -511,6 +516,9 @@ namespace Avalonia.Win32
public void Resize(Size value, PlatformResizeReason reason)
{
if (WindowState != WindowState.Normal)
return;
int requestedClientWidth = (int)(value.Width * RenderScaling);
int requestedClientHeight = (int)(value.Height * RenderScaling);
@ -856,11 +864,10 @@ namespace Avalonia.Win32
var window_rect = monitor_info.rcMonitor.ToPixelRect();
_isFullScreenActive = true;
SetWindowPos(_hwnd, IntPtr.Zero, window_rect.X, window_rect.Y,
window_rect.Width, window_rect.Height,
SetWindowPosFlags.SWP_NOZORDER | SetWindowPosFlags.SWP_NOACTIVATE | SetWindowPosFlags.SWP_FRAMECHANGED);
_isFullScreenActive = true;
}
else
{

Loading…
Cancel
Save