From 8f833dbb2fba5d9a4df0946eef1122bc4f097d87 Mon Sep 17 00:00:00 2001 From: Takoooooo Date: Thu, 9 Sep 2021 19:16:32 +0300 Subject: [PATCH 01/12] it works --- packages/Avalonia/AvaloniaBuildTasks.targets | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/Avalonia/AvaloniaBuildTasks.targets b/packages/Avalonia/AvaloniaBuildTasks.targets index 45a7f1aa44..a18930527f 100644 --- a/packages/Avalonia/AvaloniaBuildTasks.targets +++ b/packages/Avalonia/AvaloniaBuildTasks.targets @@ -42,12 +42,20 @@ - $(BuildAvaloniaResourcesDependsOn);AddAvaloniaResources;ResolveReferences + $(BuildAvaloniaResourcesDependsOn);AddAvaloniaResources;ResolveReferences;ReGenerateAvaloniaResourcesOnResourceDeletion + + + + + + + + From 890eabbd1fb2e211aaadb3a8bb8b3cb1cf6b4e68 Mon Sep 17 00:00:00 2001 From: Takoooooo Date: Fri, 10 Sep 2021 11:27:17 +0300 Subject: [PATCH 02/12] upd --- packages/Avalonia/AvaloniaBuildTasks.targets | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/Avalonia/AvaloniaBuildTasks.targets b/packages/Avalonia/AvaloniaBuildTasks.targets index a18930527f..7fbe939390 100644 --- a/packages/Avalonia/AvaloniaBuildTasks.targets +++ b/packages/Avalonia/AvaloniaBuildTasks.targets @@ -50,12 +50,12 @@ - + From 9d54cd3b889687d3143081e00754265eb8c04697 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 15 Sep 2021 09:41:34 +0200 Subject: [PATCH 03/12] Disable win32 handling of Alt/F10 keys. https://stackoverflow.com/questions/9627379/how-to-disable-normal-behaviour-of-alt-key/9627980#9627980 Fixes #6592. --- .../Interop/UnmanagedMethods.cs | 25 +++++++++++++++++++ .../Avalonia.Win32/WindowImpl.AppWndProc.cs | 6 +++++ 2 files changed, 31 insertions(+) diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index ad409810b8..6a6bcc5715 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -808,6 +808,31 @@ namespace Avalonia.Win32.Interop MNC_SELECT = 3 } + public enum SysCommands + { + SC_SIZE = 0xF000, + SC_MOVE = 0xF010, + SC_MINIMIZE = 0xF020, + SC_MAXIMIZE = 0xF030, + SC_NEXTWINDOW = 0xF040, + SC_PREVWINDOW = 0xF050, + SC_CLOSE = 0xF060, + SC_VSCROLL = 0xF070, + SC_HSCROLL = 0xF080, + SC_MOUSEMENU = 0xF090, + SC_KEYMENU = 0xF100, + SC_ARRANGE = 0xF110, + SC_RESTORE = 0xF120, + SC_TASKLIST = 0xF130, + SC_SCREENSAVE = 0xF140, + SC_HOTKEY = 0xF150, + SC_DEFAULT = 0xF160, + SC_MONITORPOWER = 0xF170, + SC_CONTEXTHELP = 0xF180, + SC_SEPARATOR = 0xF00F, + SCF_ISSECURE = 0x00000001, + } + [StructLayout(LayoutKind.Sequential)] public struct RGBQUAD { diff --git a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs index d163b3d068..f7ed2f215f 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs @@ -123,6 +123,12 @@ namespace Avalonia.Win32 break; } + case WindowsMessage.WM_SYSCOMMAND: + // Disable system handling of Alt/F10 menu keys. + if ((SysCommands)wParam == SysCommands.SC_KEYMENU && HighWord(ToInt32(lParam)) <= 0) + return IntPtr.Zero; + break; + case WindowsMessage.WM_MENUCHAR: { // mute the system beep From acc6f6d3198189068295684af0026b7dd1f2808a Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 16 Sep 2021 12:31:02 +0300 Subject: [PATCH 04/12] [X11/RNDR] Wait for any in-progress rendering before destroying the window --- .../Rendering/DeferredRenderer.cs | 33 +++++++++++++++---- src/Avalonia.X11/X11Window.cs | 3 +- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index 3bd8e05ee2..6c84cfd55c 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -35,6 +35,8 @@ namespace Avalonia.Rendering private IRef _currentDraw; private readonly IDeferredRendererLock _lock; private readonly object _sceneLock = new object(); + private readonly object _startStopLock = new object(); + private readonly object _renderLoopIsRenderingLock = new object(); private readonly Action _updateSceneIfNeededDelegate; /// @@ -139,6 +141,8 @@ namespace Avalonia.Rendering } Stop(); + // Wait for any in-progress rendering to complete + lock(_renderLoopIsRenderingLock){} DisposeRenderTarget(); } @@ -233,20 +237,26 @@ namespace Avalonia.Rendering /// public void Start() { - if (!_running && _renderLoop != null) + lock (_startStopLock) { - _renderLoop.Add(this); - _running = true; + if (!_running && _renderLoop != null) + { + _renderLoop.Add(this); + _running = true; + } } } /// public void Stop() { - if (_running && _renderLoop != null) + lock (_startStopLock) { - _renderLoop.Remove(this); - _running = false; + if (_running && _renderLoop != null) + { + _renderLoop.Remove(this); + _running = false; + } } } @@ -255,7 +265,16 @@ namespace Avalonia.Rendering void IRenderLoopTask.Update(TimeSpan time) => UpdateScene(); - void IRenderLoopTask.Render() => Render(false); + void IRenderLoopTask.Render() + { + lock (_renderLoopIsRenderingLock) + { + lock(_startStopLock) + if(!_running) + return; + Render(false); + } + } /// Size IVisualBrushRenderer.GetRenderTargetSize(IVisualBrush brush) diff --git a/src/Avalonia.X11/X11Window.cs b/src/Avalonia.X11/X11Window.cs index 149d7fb9b2..f0d2d5ca8a 100644 --- a/src/Avalonia.X11/X11Window.cs +++ b/src/Avalonia.X11/X11Window.cs @@ -805,13 +805,14 @@ namespace Avalonia.X11 if (_handle != IntPtr.Zero) { - XDestroyWindow(_x11.Display, _handle); _platform.Windows.Remove(_handle); _platform.XI2?.OnWindowDestroyed(_handle); + var handle = _handle; _handle = IntPtr.Zero; Closed?.Invoke(); _mouse.Dispose(); _touch.Dispose(); + XDestroyWindow(_x11.Display, handle); } if (_useRenderWindow && _renderHandle != IntPtr.Zero) From 20e970f3359160a67644d382f54305730f52da82 Mon Sep 17 00:00:00 2001 From: 0x90d <46010672+0x90d@users.noreply.github.com> Date: Mon, 20 Sep 2021 09:48:15 +0200 Subject: [PATCH 05/12] Update DefaultMenuInteractionHandler.cs --- .../Platform/DefaultMenuInteractionHandler.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs index 209feb351c..726d2c596c 100644 --- a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs +++ b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs @@ -303,7 +303,8 @@ namespace Avalonia.Controls.Platform { item.Parent.SelectedItem.Close(); SelectItemAndAncestors(item); - Open(item, false); + if (item.HasSubMenu) + Open(item, false); } else { From 1e918b1ed4dccf08e3504f4f515c3095b0bde9d6 Mon Sep 17 00:00:00 2001 From: Takoooooo Date: Mon, 20 Sep 2021 12:30:14 +0300 Subject: [PATCH 06/12] upd --- packages/Avalonia/AvaloniaBuildTasks.targets | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/Avalonia/AvaloniaBuildTasks.targets b/packages/Avalonia/AvaloniaBuildTasks.targets index 7fbe939390..f32ffffa12 100644 --- a/packages/Avalonia/AvaloniaBuildTasks.targets +++ b/packages/Avalonia/AvaloniaBuildTasks.targets @@ -42,20 +42,24 @@ - $(BuildAvaloniaResourcesDependsOn);AddAvaloniaResources;ResolveReferences;ReGenerateAvaloniaResourcesOnResourceDeletion + $(BuildAvaloniaResourcesDependsOn);AddAvaloniaResources;ResolveReferences;_GenerateAvaloniaResourcesDependencyCache - + + + + + - + - + From 55de8084a14d0f6e9886ab0d90580fcb1e930ff3 Mon Sep 17 00:00:00 2001 From: Takoooooo Date: Mon, 20 Sep 2021 12:41:38 +0300 Subject: [PATCH 07/12] upd --- packages/Avalonia/AvaloniaBuildTasks.targets | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/Avalonia/AvaloniaBuildTasks.targets b/packages/Avalonia/AvaloniaBuildTasks.targets index f32ffffa12..de3830ffea 100644 --- a/packages/Avalonia/AvaloniaBuildTasks.targets +++ b/packages/Avalonia/AvaloniaBuildTasks.targets @@ -47,14 +47,14 @@ - + - + Date: Mon, 20 Sep 2021 13:45:17 +0100 Subject: [PATCH 08/12] Add DesignStyle property which allows style to be assigned only at design time, similar to WPF. --- src/Avalonia.Controls/Design.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Avalonia.Controls/Design.cs b/src/Avalonia.Controls/Design.cs index 0d05e19e53..36435a46cc 100644 --- a/src/Avalonia.Controls/Design.cs +++ b/src/Avalonia.Controls/Design.cs @@ -60,6 +60,19 @@ namespace Avalonia.Controls return target.GetValue(PreviewWithProperty); } + public static readonly AttachedProperty